{"version":3,"file":"graphitePlugin.64a8f0960aec7565f8f4.js","mappings":"2MAWA,MAAMA,MAAO,MAA8C,MAAM,EAK3DC,MAAmB,MAAoC,oBAAoB,EAC3EC,MAAiB,MAA0C,iBAAiB,EAC5EC,MAAe,MAA4B,eAAe,EAG1DC,MAAsB,MAAmE,uBAAuB,EAGhHC,MAAY,MAA2C,aAAa,EACpEC,MAAa,MAAkD,aAAa,EAC5EC,MAAU,MAAa,SAAS,EAGhCC,MAAc,MAA+B,cAAc,EAC3DC,MAAiB,MAAqC,iBAAiB,EACvEC,MAAe,MAAqD,eAAe,EACnFC,MAAsB,MAAmE,uBAAuB,EAGhHC,MAAc,MAAgC,cAAc,EAC5DC,MAAW,MAAa,mBAAmB,EAC3CC,MAAmB,MAAa,eAAe,EAExCC,EAAU,CACrB,KAAAf,GACA,iBAAAC,GACA,eAAAC,GACA,aAAAC,GACA,oBAAAC,GACA,WAAAE,GACA,UAAAD,GACA,QAAAE,GACA,YAAAC,GACA,eAAAC,GACA,aAAAC,GACA,oBAAAC,GACA,YAAAC,GACA,SAAAC,GACA,iBAAAC,EACF,E,8DC5CA,MAAME,EAAqB,CACzB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC9G,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC5G,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,MAC9G,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAChH,MAAO,MAAO,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAC9G,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,OAAQ,O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","sources":["webpack://grafana/./public/app/plugins/datasource/graphite/state/actions.ts","webpack://grafana/./public/app/plugins/datasource/graphite/lexer.ts","webpack://grafana/./public/app/plugins/datasource/graphite/utils.ts","webpack://grafana/./public/app/plugins/datasource/graphite/parser.ts","webpack://grafana/./public/app/plugins/datasource/graphite/graphite_query.ts","webpack://grafana/./public/app/plugins/datasource/graphite/state/helpers.ts","webpack://grafana/./public/app/plugins/datasource/graphite/state/store.ts","webpack://grafana/./public/app/plugins/datasource/graphite/state/context.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/types.ts","webpack://grafana/./public/app/plugins/datasource/graphite/components/helpers.ts","webpack://grafana/./public/app/plugins/datasource/graphite/components/AddGraphiteFunction.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/FunctionEditorControls.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/FunctionEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/FunctionParamEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/GraphiteFunctionEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/FunctionsSection.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/GraphiteTextEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/state/providers.ts","webpack://grafana/./public/app/plugins/datasource/graphite/components/MetricSegment.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/MetricsSection.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/PlayButton.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/TagEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/TagsSection.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/SeriesSection.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/GraphiteQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/components/GraphiteVariableEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/meta.ts","webpack://grafana/./public/app/plugins/datasource/graphite/components/MetricTankMetaInspector.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/versions.ts","webpack://grafana/./public/app/plugins/datasource/graphite/configuration/MappingsHelp.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/configuration/MappingsConfiguration.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/configuration/parseLokiLabelMappings.ts","webpack://grafana/./public/app/plugins/datasource/graphite/configuration/ConfigEditor.tsx","webpack://grafana/./public/app/core/utils/version.ts","webpack://grafana/./public/app/plugins/datasource/graphite/components/AnnotationsEditor.tsx","webpack://grafana/./public/app/plugins/datasource/graphite/gfunc.ts","webpack://grafana/./public/app/plugins/datasource/graphite/migrations.ts","webpack://grafana/./public/app/plugins/datasource/graphite/datasource.ts","webpack://grafana/./public/app/plugins/datasource/graphite/module.ts"],"sourcesContent":["import { createAction } from '@reduxjs/toolkit';\n\nimport { TimeRange } from '@grafana/data';\n\nimport { FuncInstance } from '../gfunc';\nimport { GraphiteQuery, GraphiteQueryEditorDependencies, GraphiteSegment, GraphiteTag } from '../types';\n\n/**\n * List of possible actions changing the state of QueryEditor\n */\n\nconst init = createAction('init');\n\n/**\n * Synchronise editor dependencies with internal state.\n */\nconst timeRangeChanged = createAction('time-range-changed');\nconst queriesChanged = createAction('queries-changed');\nconst queryChanged = createAction('query-changed');\n\n// Metrics & Tags\nconst segmentValueChanged = createAction<{ segment: GraphiteSegment | string; index: number }>('segment-value-changed');\n\n// Tags\nconst addNewTag = createAction<{ segment: GraphiteSegment }>('add-new-tag');\nconst tagChanged = createAction<{ tag: GraphiteTag; index: number }>('tag-changed');\nconst unpause = createAction('unpause');\n\n// Functions\nconst addFunction = createAction<{ name: string }>('add-function');\nconst removeFunction = createAction<{ func: FuncInstance }>('remove-function');\nconst moveFunction = createAction<{ func: FuncInstance; offset: number }>('move-function');\nconst updateFunctionParam = createAction<{ func: FuncInstance; index: number; value: string }>('change-function-param');\n\n// Text editor\nconst updateQuery = createAction<{ query: string }>('update-query');\nconst runQuery = createAction('run-current-query');\nconst toggleEditorMode = createAction('toggle-editor');\n\nexport const actions = {\n init,\n timeRangeChanged,\n queriesChanged,\n queryChanged,\n segmentValueChanged,\n tagChanged,\n addNewTag,\n unpause,\n addFunction,\n removeFunction,\n moveFunction,\n updateFunctionParam,\n updateQuery,\n runQuery,\n toggleEditorMode,\n};\n","import { bind } from 'lodash';\n\n// This is auto generated from the unicode tables.\n// The tables are at:\n// http://www.fileformat.info/info/unicode/category/Lu/list.htm\n// http://www.fileformat.info/info/unicode/category/Ll/list.htm\n// http://www.fileformat.info/info/unicode/category/Lt/list.htm\n// http://www.fileformat.info/info/unicode/category/Lm/list.htm\n// http://www.fileformat.info/info/unicode/category/Lo/list.htm\n// http://www.fileformat.info/info/unicode/category/Nl/list.htm\n\nconst unicodeLetterTable = [\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736, 740, 748, 748, 750, 750, 880, 884, 886,\n 887, 890, 893, 902, 902, 904, 906, 908, 908, 910, 929, 931, 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369,\n 1377, 1415, 1488, 1514, 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774, 1775, 1786,\n 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969, 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069,\n 2074, 2074, 2084, 2084, 2088, 2088, 2112, 2136, 2308, 2361, 2365, 2365, 2384, 2384, 2392, 2401, 2417, 2423, 2425,\n 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525,\n 2527, 2529, 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2649,\n 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749,\n 2768, 2768, 2784, 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2877, 2877, 2908,\n 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975,\n 2979, 2980, 2984, 2986, 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125, 3129, 3133,\n 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240, 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294,\n 3296, 3297, 3313, 3314, 3333, 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455, 3461,\n 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634, 3635, 3648, 3654, 3713, 3714, 3716, 3716,\n 3719, 3720, 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3805, 3840, 3840, 3904, 3911, 3913, 3948, 3976, 3980,\n 4096, 4138, 4159, 4159, 4176, 4181, 4186, 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256,\n 4293, 4304, 4346, 4348, 4348, 4352, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744, 4746, 4749,\n 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902, 5905, 5920, 5937,\n 5952, 5969, 5984, 5996, 5998, 6000, 6016, 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320,\n 6389, 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688, 6740, 6823, 6823, 6917, 6963,\n 6981, 6987, 7043, 7072, 7086, 7087, 7104, 7141, 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7424,\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027, 8029, 8029, 8031, 8061,\n 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182,\n 8188, 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477, 8484, 8484,\n 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584, 11264, 11310, 11312,\n 11358, 11360, 11492, 11499, 11502, 11520, 11557, 11568, 11621, 11631, 11631, 11648, 11670, 11680, 11686, 11688, 11694,\n 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321,\n 12329, 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540, 12543, 12549, 12589, 12593, 12686,\n 12704, 12730, 12784, 12799, 13312, 13312, 19893, 19893, 19968, 19968, 40907, 40907, 40960, 42124, 42192, 42237, 42240,\n 42508, 42512, 42527, 42538, 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888, 42891, 42894,\n 42896, 42897, 42912, 42921, 43002, 43009, 43011, 43013, 43015, 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250,\n 43255, 43259, 43259, 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520, 43560, 43584, 43586,\n 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695, 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714,\n 43714, 43739, 43741, 43777, 43782, 43785, 43790, 43793, 43798, 43808, 43814, 43816, 43822, 43968, 44002, 44032, 44032,\n 55203, 55203, 55216, 55238, 55243, 55291, 63744, 64045, 64048, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285,\n 64285, 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323, 64324, 64326, 64433, 64467, 64829,\n 64848, 64911, 64914, 64967, 65008, 65019, 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\n 65479, 65482, 65487, 65490, 65495, 65498, 65500, 65536, 65547, 65549, 65574, 65576, 65594, 65596, 65597, 65599, 65613,\n 65616, 65629, 65664, 65786, 65856, 65908, 66176, 66204, 66208, 66256, 66304, 66334, 66352, 66378, 66432, 66461, 66464,\n 66499, 66504, 66511, 66513, 66517, 66560, 66717, 67584, 67589, 67592, 67592, 67594, 67637, 67639, 67640, 67644, 67644,\n 67647, 67669, 67840, 67861, 67872, 67897, 68096, 68096, 68112, 68115, 68117, 68119, 68121, 68147, 68192, 68220, 68352,\n 68405, 68416, 68437, 68448, 68466, 68608, 68680, 69635, 69687, 69763, 69807, 73728, 74606, 74752, 74850, 77824, 78894,\n 92160, 92728, 110592, 110593, 119808, 119892, 119894, 119964, 119966, 119967, 119970, 119970, 119973, 119974, 119977,\n 119980, 119982, 119993, 119995, 119995, 119997, 120003, 120005, 120069, 120071, 120074, 120077, 120084, 120086,\n 120092, 120094, 120121, 120123, 120126, 120128, 120132, 120134, 120134, 120138, 120144, 120146, 120485, 120488,\n 120512, 120514, 120538, 120540, 120570, 120572, 120596, 120598, 120628, 120630, 120654, 120656, 120686, 120688,\n 120712, 120714, 120744, 120746, 120770, 120772, 120779, 131072, 131072, 173782, 173782, 173824, 173824, 177972,\n 177972, 177984, 177984, 178205, 178205, 194560, 195101,\n];\n\nconst identifierStartTable: any[] = [];\n\nfor (let i = 0; i < 128; i++) {\n identifierStartTable[i] =\n (i >= 48 && i <= 57) || // 0-9\n i === 36 || // $\n i === 126 || // ~\n i === 124 || // |\n (i >= 65 && i <= 90) || // A-Z\n i === 95 || // _\n i === 45 || // -\n i === 42 || // *\n i === 58 || // :\n i === 91 || // templateStart [\n i === 93 || // templateEnd ]\n i === 63 || // ?\n i === 37 || // %\n i === 35 || // #\n i === 61 || // =\n (i >= 97 && i <= 122); // a-z\n}\n\nconst identifierPartTable = identifierStartTable;\n\nexport class Lexer {\n input: any;\n char: number;\n from: number;\n\n constructor(expression: any) {\n this.input = expression;\n this.char = 1;\n this.from = 1;\n }\n\n peek(i?: number) {\n return this.input.charAt(i || 0);\n }\n\n skip(i?: number) {\n i = i || 1;\n this.char += i;\n this.input = this.input.slice(i);\n }\n\n tokenize() {\n const list = [];\n let token = this.next();\n while (token) {\n list.push(token);\n token = this.next();\n }\n return list;\n }\n\n next() {\n this.from = this.char;\n\n // Move to the next non-space character.\n if (/\\s/.test(this.peek())) {\n while (/\\s/.test(this.peek())) {\n this.from += 1;\n this.skip();\n }\n\n if (this.peek() === '') {\n // EOL\n return null;\n }\n }\n\n let match = this.scanStringLiteral();\n if (match) {\n return match;\n }\n\n match = this.scanPunctuator() || this.scanNumericLiteral() || this.scanIdentifier() || this.scanTemplateSequence();\n\n if (match) {\n this.skip(match.value.length);\n return match;\n }\n\n // No token could be matched, give up.\n return null;\n }\n\n scanTemplateSequence() {\n if (this.peek() === '[' && this.peek(1) === '[') {\n return {\n type: 'templateStart',\n value: '[[',\n pos: this.char,\n };\n }\n\n if (this.peek() === ']' && this.peek(1) === ']') {\n return {\n type: 'templateEnd',\n value: '[[',\n pos: this.char,\n };\n }\n\n return null;\n }\n\n /*\n * Extract a JavaScript identifier out of the next sequence of\n * characters or return 'null' if its not possible. In addition,\n * to Identifier this method can also produce BooleanLiteral\n * (true/false) and NullLiteral (null).\n */\n scanIdentifier() {\n let id = '';\n let index = 0;\n let type, char;\n\n // Detects any character in the Unicode categories \"Uppercase\n // letter (Lu)\", \"Lowercase letter (Ll)\", \"Titlecase letter\n // (Lt)\", \"Modifier letter (Lm)\", \"Other letter (Lo)\", or\n // \"Letter number (Nl)\".\n //\n // Both approach and unicodeLetterTable were borrowed from\n // Google's Traceur.\n\n function isUnicodeLetter(code: number) {\n for (let i = 0; i < unicodeLetterTable.length; ) {\n if (code < unicodeLetterTable[i++]) {\n return false;\n }\n\n if (code <= unicodeLetterTable[i++]) {\n return true;\n }\n }\n\n return false;\n }\n\n function isHexDigit(str: string) {\n return /^[0-9a-fA-F]$/.test(str);\n }\n\n const readUnicodeEscapeSequence = bind(function (this: any) {\n index += 1;\n\n if (this.peek(index) !== 'u') {\n return null;\n }\n\n const ch1 = this.peek(index + 1);\n const ch2 = this.peek(index + 2);\n const ch3 = this.peek(index + 3);\n const ch4 = this.peek(index + 4);\n let code;\n\n if (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) {\n code = parseInt(ch1 + ch2 + ch3 + ch4, 16);\n\n if (isUnicodeLetter(code)) {\n index += 5;\n return '\\\\u' + ch1 + ch2 + ch3 + ch4;\n }\n\n return null;\n }\n\n return null;\n }, this);\n\n const getIdentifierStart = bind(function (this: any) {\n const chr = this.peek(index);\n const code = chr.charCodeAt(0);\n\n if (chr === '*') {\n index += 1;\n return chr;\n }\n\n if (code === 92) {\n return readUnicodeEscapeSequence();\n }\n\n if (code < 128) {\n if (identifierStartTable[code]) {\n index += 1;\n return chr;\n }\n\n return null;\n }\n\n if (isUnicodeLetter(code)) {\n index += 1;\n return chr;\n }\n\n return null;\n }, this);\n\n const getIdentifierPart = bind(function (this: any) {\n const chr = this.peek(index);\n const code = chr.charCodeAt(0);\n\n if (code === 92) {\n return readUnicodeEscapeSequence();\n }\n\n if (code < 128) {\n if (identifierPartTable[code]) {\n index += 1;\n return chr;\n }\n\n return null;\n }\n\n if (isUnicodeLetter(code)) {\n index += 1;\n return chr;\n }\n\n return null;\n }, this);\n\n char = getIdentifierStart();\n if (char === null) {\n return null;\n }\n\n id = char;\n for (;;) {\n char = getIdentifierPart();\n\n if (char === null) {\n break;\n }\n\n id += char;\n }\n\n switch (id) {\n case 'true': {\n type = 'bool';\n break;\n }\n case 'false': {\n type = 'bool';\n break;\n }\n default:\n type = 'identifier';\n }\n\n return {\n type: type,\n value: id,\n pos: this.char,\n };\n }\n\n /*\n * Extract a numeric literal out of the next sequence of\n * characters or return 'null' if its not possible. This method\n * supports all numeric literals described in section 7.8.3\n * of the EcmaScript 5 specification.\n *\n * This method's implementation was heavily influenced by the\n * scanNumericLiteral function in the Esprima parser's source code.\n */\n scanNumericLiteral(): any {\n let index = 0;\n let value = '';\n const length = this.input.length;\n let char = this.peek(index);\n let bad;\n\n function isDecimalDigit(str: string) {\n return /^[0-9]$/.test(str);\n }\n\n function isOctalDigit(str: string) {\n return /^[0-7]$/.test(str);\n }\n\n function isHexDigit(str: string) {\n return /^[0-9a-fA-F]$/.test(str);\n }\n\n function isIdentifierStart(ch: string) {\n return ch === '$' || ch === '_' || ch === '\\\\' || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');\n }\n\n // handle negative num literals\n if (char === '-') {\n value += char;\n index += 1;\n char = this.peek(index);\n }\n\n // Numbers must start either with a decimal digit or a point.\n if (char !== '.' && !isDecimalDigit(char)) {\n return null;\n }\n\n if (char !== '.') {\n value += this.peek(index);\n index += 1;\n char = this.peek(index);\n\n if (value === '0') {\n // Base-16 numbers.\n if (char === 'x' || char === 'X') {\n index += 1;\n value += char;\n\n while (index < length) {\n char = this.peek(index);\n if (!isHexDigit(char)) {\n break;\n }\n value += char;\n index += 1;\n }\n\n if (value.length <= 2) {\n // 0x\n return {\n type: 'number',\n value: value,\n isMalformed: true,\n pos: this.char,\n };\n }\n\n if (index < length) {\n char = this.peek(index);\n if (isIdentifierStart(char)) {\n return null;\n }\n }\n\n return {\n type: 'number',\n value: value,\n base: 16,\n isMalformed: false,\n pos: this.char,\n };\n }\n\n // Base-8 numbers.\n if (isOctalDigit(char)) {\n index += 1;\n value += char;\n bad = false;\n\n while (index < length) {\n char = this.peek(index);\n\n // Numbers like '019' (note the 9) are not valid octals\n // but we still parse them and mark as malformed.\n\n if (isDecimalDigit(char)) {\n bad = true;\n }\n if (!isOctalDigit(char)) {\n // if the char is a non punctuator then its not a valid number\n if (!this.isPunctuator(char)) {\n return null;\n }\n break;\n }\n value += char;\n index += 1;\n }\n\n if (index < length) {\n char = this.peek(index);\n if (isIdentifierStart(char)) {\n return null;\n }\n }\n\n return {\n type: 'number',\n value: value,\n base: 8,\n isMalformed: bad,\n };\n }\n\n // Decimal numbers that start with '0' such as '09' are illegal\n // but we still parse them and return as malformed.\n\n if (isDecimalDigit(char)) {\n index += 1;\n value += char;\n }\n }\n\n while (index < length) {\n char = this.peek(index);\n if (!isDecimalDigit(char)) {\n break;\n }\n value += char;\n index += 1;\n }\n }\n\n // Decimal digits.\n\n if (char === '.') {\n value += char;\n index += 1;\n\n while (index < length) {\n char = this.peek(index);\n if (!isDecimalDigit(char)) {\n break;\n }\n value += char;\n index += 1;\n }\n }\n\n // Exponent part.\n\n if (char === 'e' || char === 'E') {\n value += char;\n index += 1;\n char = this.peek(index);\n\n if (char === '+' || char === '-') {\n value += this.peek(index);\n index += 1;\n }\n\n char = this.peek(index);\n if (isDecimalDigit(char)) {\n value += char;\n index += 1;\n\n while (index < length) {\n char = this.peek(index);\n if (!isDecimalDigit(char)) {\n break;\n }\n value += char;\n index += 1;\n }\n } else {\n return null;\n }\n }\n\n if (index < length) {\n char = this.peek(index);\n if (!this.isPunctuator(char)) {\n return null;\n }\n }\n\n return {\n type: 'number',\n value: value,\n base: 10,\n pos: this.char,\n isMalformed: !isFinite(+value),\n };\n }\n\n isPunctuator(ch1: string) {\n switch (ch1) {\n case '.':\n case '(':\n case ')':\n case ',':\n case '{':\n case '}':\n return true;\n }\n\n return false;\n }\n\n scanPunctuator() {\n const ch1 = this.peek();\n\n if (this.isPunctuator(ch1)) {\n return {\n type: ch1,\n value: ch1,\n pos: this.char,\n };\n }\n\n return null;\n }\n\n /*\n * Extract a string out of the next sequence of characters and/or\n * lines or return 'null' if its not possible. Since strings can\n * span across multiple lines this method has to move the char\n * pointer.\n *\n * This method recognizes pseudo-multiline JavaScript strings:\n *\n * var str = \"hello\\\n * world\";\n */\n scanStringLiteral() {\n const quote = this.peek();\n\n // String must start with a quote.\n if (quote !== '\"' && quote !== \"'\") {\n return null;\n }\n\n let value = '';\n\n this.skip();\n\n while (this.peek() !== quote) {\n if (this.peek() === '') {\n // End Of Line\n return {\n type: 'string',\n value: value,\n isUnclosed: true,\n quote: quote,\n pos: this.char,\n };\n }\n\n const char = this.peek();\n const jump = 1; // A length of a jump, after we're done\n // parsing this character.\n\n value += char;\n this.skip(jump);\n }\n\n this.skip();\n return {\n type: 'string',\n value: value,\n isUnclosed: false,\n quote: quote,\n pos: this.char,\n };\n }\n}\n","import { last } from 'lodash';\n\nimport { GraphiteParserError } from './types';\n\n/**\n * Graphite-web before v1.6 returns HTTP 500 with full stack traces in an HTML page\n * when a query fails. It results in massive error alerts with HTML tags in the UI.\n * This function removes all HTML tags and keeps only the last line from the stack\n * trace which should be the most meaningful.\n */\nexport function reduceError(error: any): any {\n if (error && error.status === 500 && error.data?.message?.startsWith('(\n error.data.message\n .replace(/(<([^>]+)>)/gi, '')\n .trim()\n .split(/\\n/)\n )!.replace(/u?&#[^;]+;/g, '');\n error.data.message = `Graphite encountered an unexpected error while handling your request. ${newMessage}`;\n }\n return error;\n}\n\nexport function isGraphiteParserError(e: unknown): e is GraphiteParserError {\n return typeof e === 'object' && e !== null && 'message' in e && 'pos' in e;\n}\n","import { Lexer } from './lexer';\nimport { GraphiteParserError } from './types';\nimport { isGraphiteParserError } from './utils';\n\nexport class Parser {\n expression: any;\n lexer: Lexer;\n tokens: any;\n index: number;\n\n constructor(expression: any) {\n this.expression = expression;\n this.lexer = new Lexer(expression);\n this.tokens = this.lexer.tokenize();\n this.index = 0;\n }\n\n getAst() {\n return this.start();\n }\n\n start() {\n try {\n return this.functionCall() || this.metricExpression();\n } catch (e) {\n if (isGraphiteParserError(e)) {\n return {\n type: 'error',\n message: e.message,\n pos: e.pos,\n };\n }\n }\n }\n\n curlyBraceSegment() {\n if (this.match('identifier', '{') || this.match('{')) {\n let curlySegment = '';\n\n while (!this.match('') && !this.match('}')) {\n curlySegment += this.consumeToken().value;\n }\n\n if (!this.match('}')) {\n this.errorMark(\"Expected closing '}'\");\n }\n\n curlySegment += this.consumeToken().value;\n\n // if curly segment is directly followed by identifier\n // include it in the segment\n if (this.match('identifier')) {\n curlySegment += this.consumeToken().value;\n }\n\n return {\n type: 'segment',\n value: curlySegment,\n };\n } else {\n return null;\n }\n }\n\n metricSegment() {\n const curly = this.curlyBraceSegment();\n if (curly) {\n return curly;\n }\n\n if (this.match('identifier') || this.match('number') || this.match('bool')) {\n // hack to handle float numbers in metric segments\n const parts = this.consumeToken().value.split('.');\n if (parts.length === 2) {\n this.tokens.splice(this.index, 0, { type: '.' });\n this.tokens.splice(this.index + 1, 0, {\n type: 'number',\n value: parts[1],\n });\n }\n\n return {\n type: 'segment',\n value: parts[0],\n };\n }\n\n if (!this.match('templateStart')) {\n this.errorMark('Expected metric identifier');\n }\n\n this.consumeToken();\n\n if (!this.match('identifier')) {\n this.errorMark('Expected identifier after templateStart');\n }\n\n const node = {\n type: 'template',\n value: this.consumeToken().value,\n };\n\n if (!this.match('templateEnd')) {\n this.errorMark('Expected templateEnd');\n }\n\n this.consumeToken();\n return node;\n }\n\n metricExpression() {\n if (!this.match('templateStart') && !this.match('identifier') && !this.match('number') && !this.match('{')) {\n return null;\n }\n\n const node: any = {\n type: 'metric',\n segments: [],\n };\n\n node.segments.push(this.metricSegment());\n\n while (this.match('.')) {\n this.consumeToken();\n\n const segment = this.metricSegment();\n if (!segment) {\n this.errorMark('Expected metric identifier');\n }\n\n node.segments.push(segment);\n }\n\n return node;\n }\n\n functionCall() {\n if (!this.match('identifier', '(')) {\n return null;\n }\n\n const node: any = {\n type: 'function',\n name: this.consumeToken().value,\n };\n\n // consume left parenthesis\n this.consumeToken();\n\n node.params = this.functionParameters();\n\n if (!this.match(')')) {\n this.errorMark('Expected closing parenthesis');\n }\n\n this.consumeToken();\n\n return node;\n }\n\n boolExpression() {\n if (!this.match('bool')) {\n return null;\n }\n\n return {\n type: 'bool',\n value: this.consumeToken().value === 'true',\n };\n }\n\n functionParameters(): any {\n if (this.match(')') || this.match('')) {\n return [];\n }\n\n const param =\n this.functionCall() ||\n this.numericLiteral() ||\n this.seriesRefExpression() ||\n this.boolExpression() ||\n this.metricExpression() ||\n this.stringLiteral();\n\n if (!this.match(',')) {\n return [param];\n }\n\n this.consumeToken();\n return [param].concat(this.functionParameters());\n }\n\n seriesRefExpression() {\n if (!this.match('identifier')) {\n return null;\n }\n\n const value = this.tokens[this.index].value;\n if (!value.match(/\\#[A-Z]/)) {\n return null;\n }\n\n const token = this.consumeToken();\n\n return {\n type: 'series-ref',\n value: token.value,\n };\n }\n\n numericLiteral() {\n if (!this.match('number')) {\n return null;\n }\n\n return {\n type: 'number',\n value: parseFloat(this.consumeToken().value),\n };\n }\n\n stringLiteral() {\n if (!this.match('string')) {\n return null;\n }\n\n const token = this.consumeToken();\n if (token.isUnclosed) {\n const error: GraphiteParserError = {\n message: 'Unclosed string parameter',\n pos: token.pos,\n };\n throw error;\n }\n\n return {\n type: 'string',\n value: token.value,\n };\n }\n\n errorMark(text: string) {\n const currentToken = this.tokens[this.index];\n const type = currentToken ? currentToken.type : 'end of string';\n const error: GraphiteParserError = {\n message: text + ' instead found ' + type,\n pos: currentToken ? currentToken.pos : this.lexer.char,\n };\n throw error;\n }\n\n // returns token value and incre\n consumeToken() {\n this.index++;\n return this.tokens[this.index - 1];\n }\n\n matchToken(type: any, index: number) {\n const token = this.tokens[this.index + index];\n return (token === undefined && type === '') || (token && token.type === type);\n }\n\n match(token1: any, token2?: any) {\n return this.matchToken(token1, 0) && (!token2 || this.matchToken(token2, 1));\n }\n}\n","import { compact, each, findIndex, flatten, get, join, keyBy, last, map, reduce, without } from 'lodash';\n\nimport { ScopedVars } from '@grafana/data';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { arrayMove } from 'app/core/utils/arrayMove';\n\nimport { GraphiteDatasource } from './datasource';\nimport { FuncInstance } from './gfunc';\nimport { Parser } from './parser';\nimport { GraphiteSegment } from './types';\n\nexport type GraphiteTagOperator = '=' | '=~' | '!=' | '!=~';\n\nexport type GraphiteTag = {\n key: string;\n operator: GraphiteTagOperator;\n value: string;\n};\n\nexport type GraphiteTarget = {\n refId: string | number;\n target: string;\n /**\n * Contains full query after interpolating sub-queries (e.g. \"function(#A)\" referencing query with refId=A)\n */\n targetFull: string;\n textEditor: boolean;\n paused: boolean;\n};\n\nexport default class GraphiteQuery {\n datasource: GraphiteDatasource;\n target: GraphiteTarget;\n functions: FuncInstance[] = [];\n segments: GraphiteSegment[] = [];\n tags: GraphiteTag[] = [];\n error: any;\n seriesByTagUsed = false;\n checkOtherSegmentsIndex = 0;\n removeTagValue: string;\n templateSrv: any;\n scopedVars: any;\n\n constructor(datasource: any, target: any, templateSrv?: TemplateSrv, scopedVars?: ScopedVars) {\n this.datasource = datasource;\n this.target = target;\n this.templateSrv = templateSrv;\n this.scopedVars = scopedVars;\n this.parseTarget();\n\n this.removeTagValue = '-- remove tag --';\n }\n\n parseTarget() {\n this.functions = [];\n this.segments = [];\n this.tags = [];\n this.seriesByTagUsed = false;\n this.error = null;\n\n if (this.target.textEditor) {\n return;\n }\n\n const parser = new Parser(this.target.target);\n const astNode = parser.getAst();\n if (astNode === null) {\n this.checkOtherSegmentsIndex = 0;\n return;\n }\n\n if (astNode.type === 'error') {\n this.error = astNode.message + ' at position: ' + astNode.pos;\n this.target.textEditor = true;\n return;\n }\n\n try {\n this.parseTargetRecursive(astNode, null);\n } catch (err) {\n if (err instanceof Error) {\n console.error('error parsing target:', err.message);\n this.error = err.message;\n }\n this.target.textEditor = true;\n }\n\n this.checkOtherSegmentsIndex = this.segments.length - 1;\n }\n\n getSegmentPathUpTo(index: number) {\n const arr = this.segments.slice(0, index);\n\n return reduce(\n arr,\n (result, segment) => {\n return result ? result + '.' + segment.value : segment.value;\n },\n ''\n );\n }\n\n parseTargetRecursive(astNode: any, func: any): any {\n if (astNode === null) {\n return null;\n }\n\n switch (astNode.type) {\n case 'function':\n const innerFunc = this.datasource.createFuncInstance(astNode.name, {\n withDefaultParams: false,\n });\n each(astNode.params, (param) => {\n this.parseTargetRecursive(param, innerFunc);\n });\n\n innerFunc.updateText();\n this.functions.push(innerFunc);\n\n // extract tags from seriesByTag function and hide function\n if (innerFunc.def.name === 'seriesByTag' && !this.seriesByTagUsed) {\n this.seriesByTagUsed = true;\n innerFunc.hidden = true;\n this.tags = this.splitSeriesByTagParams(innerFunc);\n }\n\n break;\n case 'series-ref':\n if (this.segments.length > 0 || this.getSeriesByTagFuncIndex() >= 0) {\n this.addFunctionParameter(func, astNode.value);\n } else {\n this.segments.push(astNode);\n }\n break;\n case 'bool':\n case 'string':\n case 'number':\n this.addFunctionParameter(func, astNode.value);\n break;\n case 'metric':\n if (this.segments.length || this.tags.length) {\n this.addFunctionParameter(func, join(map(astNode.segments, 'value'), '.'));\n } else {\n this.segments = astNode.segments;\n }\n break;\n }\n }\n\n updateSegmentValue(segment: any, index: number) {\n this.segments[index].value = segment.value;\n }\n\n addSelectMetricSegment() {\n this.segments.push({ value: 'select metric' });\n }\n\n addFunction(newFunc: any) {\n this.functions.push(newFunc);\n }\n\n addFunctionParameter(func: any, value: string) {\n if (func.params.length >= func.def.params.length && !get(last(func.def.params), 'multiple', false)) {\n throw { message: 'too many parameters for function ' + func.def.name };\n }\n func.params.push(value);\n }\n\n removeFunction(func: any) {\n this.functions = without(this.functions, func);\n }\n\n moveFunction(func: any, offset: number) {\n const index = this.functions.indexOf(func);\n arrayMove(this.functions, index, index + offset);\n }\n\n updateModelTarget(targets: any) {\n const wrapFunction = (target: string, func: any) => {\n return func.render(target, (value: string) => {\n return this.templateSrv.replace(value, this.scopedVars);\n });\n };\n\n if (!this.target.textEditor) {\n const metricPath = this.getSegmentPathUpTo(this.segments.length).replace(/\\.?select metric$/, '');\n this.target.target = reduce(this.functions, wrapFunction, metricPath);\n }\n\n this.updateRenderedTarget(this.target, targets);\n\n // loop through other queries and update targetFull as needed\n for (const target of targets || []) {\n if (target.refId !== this.target.refId) {\n this.updateRenderedTarget(target, targets);\n }\n }\n\n // clean-up added param\n this.functions.forEach((func) => (func.added = false));\n }\n\n updateRenderedTarget(target: { refId: string | number; target: any; targetFull: any }, targets: any) {\n // render nested query\n const targetsByRefId = keyBy(targets, 'refId');\n\n // no references to self\n delete targetsByRefId[target.refId];\n\n const nestedSeriesRefRegex = /\\#([A-Z])/g;\n let targetWithNestedQueries = target.target;\n\n // Use ref count to track circular references\n each(targetsByRefId, (t, id) => {\n const regex = RegExp(`\\#(${id})`, 'g');\n const refMatches = targetWithNestedQueries.match(regex);\n t.refCount = refMatches?.length ?? 0;\n });\n\n // Keep interpolating until there are no query references\n // The reason for the loop is that the referenced query might contain another reference to another query\n while (targetWithNestedQueries.match(nestedSeriesRefRegex)) {\n const updated = targetWithNestedQueries.replace(nestedSeriesRefRegex, (match: string, g1: string) => {\n const t = targetsByRefId[g1];\n if (!t) {\n return match;\n }\n\n // no circular references\n if (t.refCount === 0) {\n delete targetsByRefId[g1];\n }\n t.refCount--;\n\n return t.target;\n });\n\n if (updated === targetWithNestedQueries) {\n break;\n }\n\n targetWithNestedQueries = updated;\n }\n\n delete target.targetFull;\n if (target.target !== targetWithNestedQueries) {\n target.targetFull = targetWithNestedQueries;\n }\n }\n\n splitSeriesByTagParams(func: { params: any }) {\n const tagPattern = /([^\\!=~]+)(\\!?=~?)(.*)/;\n return flatten(\n map(func.params, (param: string) => {\n const matches = tagPattern.exec(param);\n if (matches) {\n const tag = matches.slice(1);\n if (tag.length === 3) {\n return {\n key: tag[0],\n operator: tag[1] as GraphiteTagOperator,\n value: tag[2],\n };\n }\n }\n return [];\n })\n );\n }\n\n getSeriesByTagFuncIndex() {\n return findIndex(this.functions, (func) => func.def.name === 'seriesByTag');\n }\n\n getSeriesByTagFunc() {\n const seriesByTagFuncIndex = this.getSeriesByTagFuncIndex();\n if (seriesByTagFuncIndex >= 0) {\n return this.functions[seriesByTagFuncIndex];\n } else {\n return undefined;\n }\n }\n\n addTag(tag: { key: any; operator: GraphiteTagOperator; value: string }) {\n const newTagParam = renderTagString(tag);\n this.getSeriesByTagFunc()!.params.push(newTagParam);\n this.tags.push(tag);\n }\n\n removeTag(index: number) {\n this.getSeriesByTagFunc()!.params.splice(index, 1);\n this.tags.splice(index, 1);\n }\n\n updateTag(tag: { key: string; operator: GraphiteTagOperator; value: string }, tagIndex: number) {\n this.error = null;\n\n if (tag.key === this.removeTagValue) {\n this.removeTag(tagIndex);\n if (this.tags.length === 0) {\n this.removeFunction(this.getSeriesByTagFunc());\n this.checkOtherSegmentsIndex = 0;\n this.seriesByTagUsed = false;\n }\n return;\n }\n\n this.getSeriesByTagFunc()!.params[tagIndex] = renderTagString(tag);\n this.tags[tagIndex] = tag;\n }\n\n renderTagExpressions(excludeIndex = -1) {\n return compact(\n map(this.tags, (tagExpr, index) => {\n // Don't render tag that we want to lookup\n if (index !== excludeIndex) {\n return tagExpr.key + tagExpr.operator + tagExpr.value;\n } else {\n return undefined;\n }\n })\n );\n }\n}\n\nfunction renderTagString(tag: { key: any; operator?: any; value?: any }) {\n return tag.key + tag.operator + tag.value;\n}\n","import { clone, some } from 'lodash';\n\nimport { createErrorNotification } from '../../../../core/copy/appNotification';\nimport { notifyApp } from '../../../../core/reducers/appNotification';\nimport { dispatch } from '../../../../store/store';\nimport { FuncInstance } from '../gfunc';\nimport { GraphiteQuery, GraphiteTagOperator } from '../types';\n\nimport { GraphiteQueryEditorState } from './store';\n\n/**\n * Helpers used by reducers and providers. They modify state object directly so should operate on a copy of the state.\n */\n\nexport const GRAPHITE_TAG_OPERATORS: GraphiteTagOperator[] = ['=', '!=', '=~', '!=~'];\n\n/**\n * Tag names and metric names are displayed in a single dropdown. This prefix is used to\n * distinguish both in the UI.\n */\nexport const TAG_PREFIX = 'tag: ';\n\n/**\n * Create new AST based on new query.\n * Build segments from parsed metric name and functions.\n */\nexport async function parseTarget(state: GraphiteQueryEditorState): Promise {\n state.queryModel.parseTarget();\n await buildSegments(state);\n}\n\n/**\n * Create segments out of the current metric path + add \"select metrics\" if it's possible to add more to the path\n */\nexport async function buildSegments(state: GraphiteQueryEditorState, modifyLastSegment = true): Promise {\n // Start with a shallow copy from the model, then check if \"select metric\" segment should be added at the end\n state.segments = clone(state.queryModel.segments);\n\n const checkOtherSegmentsIndex = state.queryModel.checkOtherSegmentsIndex || 0;\n\n await checkOtherSegments(state, checkOtherSegmentsIndex, modifyLastSegment);\n}\n\n/**\n * Add \"select metric\" segment at the end\n */\nexport function addSelectMetricSegment(state: GraphiteQueryEditorState): void {\n state.queryModel.addSelectMetricSegment();\n state.segments.push({ value: 'select metric', fake: true });\n}\n\n/**\n * Validates the state after adding or changing a segment:\n * - adds \"select metric\" only when more segments can be added to the metric name\n * - check if subsequent segments are still valid if in-between segment changes and\n * removes invalid segments.\n */\nexport async function checkOtherSegments(\n state: GraphiteQueryEditorState,\n fromIndex: number,\n modifyLastSegment = true\n): Promise {\n if (state.queryModel.segments.length === 1 && state.queryModel.segments[0].type === 'series-ref') {\n return;\n }\n\n if (fromIndex === 0) {\n addSelectMetricSegment(state);\n return;\n }\n\n const currentFromIndex = fromIndex + 1;\n const path = state.queryModel.getSegmentPathUpTo(currentFromIndex);\n if (path === '') {\n return;\n }\n\n try {\n const segments = await state.datasource.metricFindQuery(path);\n if (segments.length === 0) {\n if (path !== '' && modifyLastSegment) {\n state.queryModel.segments = state.queryModel.segments.splice(0, currentFromIndex);\n state.segments = state.segments.splice(0, currentFromIndex);\n if (!some(state.segments, { fake: true })) {\n addSelectMetricSegment(state);\n }\n }\n } else if (segments[0].expandable) {\n if (state.segments.length === fromIndex) {\n addSelectMetricSegment(state);\n } else {\n await checkOtherSegments(state, currentFromIndex);\n }\n }\n } catch (err) {\n if (err instanceof Error) {\n handleMetricsAutoCompleteError(state, err);\n }\n }\n}\n\nexport function spliceSegments(state: GraphiteQueryEditorState, index: number): void {\n state.segments = state.segments.splice(0, index);\n state.queryModel.segments = state.queryModel.segments.splice(0, index);\n}\n\nexport function emptySegments(state: GraphiteQueryEditorState): void {\n state.queryModel.segments = [];\n state.segments = [];\n}\n\n/**\n * When seriesByTag function is added the UI changes it's state and only tags can be added from now.\n */\nexport async function addSeriesByTagFunc(state: GraphiteQueryEditorState, tag: string): Promise {\n const newFunc = state.datasource.createFuncInstance('seriesByTag', {\n withDefaultParams: false,\n });\n const tagParam = `${tag}=`;\n newFunc.params = [tagParam];\n state.queryModel.addFunction(newFunc);\n newFunc.added = true;\n\n emptySegments(state);\n handleTargetChanged(state);\n await parseTarget(state);\n}\n\nexport function smartlyHandleNewAliasByNode(state: GraphiteQueryEditorState, func: FuncInstance): void {\n if (func.def.name !== 'aliasByNode') {\n return;\n }\n\n for (let i = 0; i < state.segments.length; i++) {\n if (state.segments[i].value.indexOf('*') >= 0) {\n func.params[0] = i;\n func.added = false;\n handleTargetChanged(state);\n return;\n }\n }\n}\n\n/**\n * Pauses running the query to allow selecting tag value. This is to prevent getting errors if the query is run\n * for a tag with no selected value.\n */\nexport function pause(state: GraphiteQueryEditorState): void {\n state.paused = true;\n}\n\nexport function removeTagPrefix(value: string): string {\n return value.replace(TAG_PREFIX, '');\n}\n\nexport function handleTargetChanged(state: GraphiteQueryEditorState): void {\n if (state.queryModel.error) {\n return;\n }\n\n let oldTarget = state.queryModel.target.target;\n // Interpolate from other queries:\n // Because of mixed data sources the list may contain queries for non-Graphite data sources. To ensure a valid query\n // is used for interpolation we should check required properties are passed though in theory it allows to interpolate\n // with queries that contain \"target\" property as well.\n state.queryModel.updateModelTarget(\n (state.queries || []).filter((query) => 'target' in query && typeof (query as GraphiteQuery).target === 'string')\n );\n\n // remove spaces from old and new targets\n const newTarget = state.queryModel.target.target.replace(/\\s+/g, '');\n oldTarget = oldTarget.replace(/\\s+/g, '');\n\n if (newTarget !== oldTarget && !state.paused) {\n state.refresh();\n }\n}\n\n/**\n * When metrics autocomplete fails - the error is shown, but only once per page view\n */\nexport function handleMetricsAutoCompleteError(\n state: GraphiteQueryEditorState,\n error: Error\n): GraphiteQueryEditorState {\n if (!state.metricAutoCompleteErrorShown) {\n state.metricAutoCompleteErrorShown = true;\n dispatch(notifyApp(createErrorNotification(`Fetching metrics failed: ${error.message}.`)));\n }\n return state;\n}\n\n/**\n * When tags autocomplete fails - the error is shown, but only once per page view\n */\nexport function handleTagsAutoCompleteError(state: GraphiteQueryEditorState, error: Error): GraphiteQueryEditorState {\n if (!state.tagsAutoCompleteErrorShown) {\n state.tagsAutoCompleteErrorShown = true;\n dispatch(notifyApp(createErrorNotification(`Fetching tags failed: ${error.message}.`)));\n }\n return state;\n}\n","import { AnyAction } from '@reduxjs/toolkit';\nimport { Action, Dispatch } from 'redux';\n\nimport { DataQuery, TimeRange } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\n\nimport { TemplateSrv } from '../../../../features/templating/template_srv';\nimport { GraphiteDatasource } from '../datasource';\nimport { FuncDefs } from '../gfunc';\nimport GraphiteQuery, { GraphiteTarget } from '../graphite_query';\nimport { GraphiteSegment, GraphiteTagOperator } from '../types';\n\nimport { actions } from './actions';\nimport {\n addSeriesByTagFunc,\n buildSegments,\n checkOtherSegments,\n emptySegments,\n handleTargetChanged,\n parseTarget,\n pause,\n removeTagPrefix,\n smartlyHandleNewAliasByNode,\n spliceSegments,\n} from './helpers';\n\nexport type GraphiteQueryEditorState = {\n // external dependencies\n datasource: GraphiteDatasource;\n target: GraphiteTarget;\n refresh: () => void;\n queries?: DataQuery[];\n templateSrv: TemplateSrv;\n range?: TimeRange;\n\n // internal\n supportsTags: boolean;\n paused: boolean;\n removeTagValue: string;\n funcDefs: FuncDefs | null;\n segments: GraphiteSegment[];\n queryModel: GraphiteQuery;\n error: Error | null;\n tagsAutoCompleteErrorShown: boolean;\n metricAutoCompleteErrorShown: boolean;\n};\n\nconst reducer = async (action: Action, state: GraphiteQueryEditorState): Promise => {\n state = { ...state };\n\n if (actions.init.match(action)) {\n const deps = action.payload;\n deps.target.target = deps.target.target || '';\n\n await deps.datasource.waitForFuncDefsLoaded();\n\n state = {\n ...state,\n ...deps,\n queryModel: new GraphiteQuery(deps.datasource, deps.target, getTemplateSrv()),\n supportsTags: deps.datasource.supportsTags,\n paused: false,\n removeTagValue: '-- remove tag --',\n funcDefs: deps.datasource.funcDefs,\n queries: deps.queries,\n };\n\n await buildSegments(state, false);\n }\n if (actions.timeRangeChanged.match(action)) {\n state.range = action.payload;\n }\n if (actions.queriesChanged.match(action)) {\n state.queries = action.payload;\n handleTargetChanged(state);\n }\n if (actions.queryChanged.match(action)) {\n state.target.target = action.payload.target || '';\n await parseTarget(state);\n handleTargetChanged(state);\n }\n if (actions.segmentValueChanged.match(action)) {\n const { segment: segmentOrString, index: segmentIndex } = action.payload;\n\n let segment;\n // is segment was changed to a string - create a new segment\n if (typeof segmentOrString === 'string') {\n segment = {\n value: segmentOrString,\n expandable: true,\n fake: false,\n };\n } else {\n segment = segmentOrString as GraphiteSegment;\n }\n\n state.error = null;\n state.segments[segmentIndex] = segment;\n state.queryModel.updateSegmentValue(segment, segmentIndex);\n\n if (state.queryModel.functions.length > 0 && state.queryModel.functions[0].def.fake) {\n state.queryModel.functions = [];\n }\n\n if (segment.type === 'tag') {\n const tag = removeTagPrefix(segment.value);\n pause(state);\n await addSeriesByTagFunc(state, tag);\n return state;\n }\n\n // if newly selected segment can be expanded -> check if the path is correct\n if (segment.expandable) {\n await checkOtherSegments(state, segmentIndex + 1);\n } else {\n // if not expandable -> remove all other segments\n spliceSegments(state, segmentIndex + 1);\n }\n\n handleTargetChanged(state);\n }\n if (actions.tagChanged.match(action)) {\n const { tag, index: tagIndex } = action.payload;\n state.queryModel.updateTag(tag, tagIndex);\n handleTargetChanged(state);\n if (state.queryModel.tags.length === 0) {\n await checkOtherSegments(state, 0);\n state.paused = false;\n }\n }\n if (actions.addNewTag.match(action)) {\n const segment = action.payload.segment;\n const newTagKey = segment.value;\n const newTag = { key: newTagKey, operator: '=' as GraphiteTagOperator, value: '' };\n state.queryModel.addTag(newTag);\n handleTargetChanged(state);\n }\n if (actions.unpause.match(action)) {\n state.paused = false;\n state.refresh();\n }\n if (actions.addFunction.match(action)) {\n const newFunc = state.datasource.createFuncInstance(action.payload.name, {\n withDefaultParams: true,\n });\n newFunc.added = true;\n state.queryModel.addFunction(newFunc);\n smartlyHandleNewAliasByNode(state, newFunc);\n\n if (state.segments.length === 1 && state.segments[0].fake) {\n emptySegments(state);\n }\n\n if (!newFunc.params.length && newFunc.added) {\n handleTargetChanged(state);\n }\n\n if (newFunc.def.name === 'seriesByTag') {\n await parseTarget(state);\n }\n }\n if (actions.removeFunction.match(action)) {\n state.queryModel.removeFunction(action.payload.func);\n handleTargetChanged(state);\n }\n if (actions.moveFunction.match(action)) {\n const { func, offset } = action.payload;\n state.queryModel.moveFunction(func, offset);\n handleTargetChanged(state);\n }\n if (actions.updateFunctionParam.match(action)) {\n const { func, index, value } = action.payload;\n func.updateParam(value, index);\n handleTargetChanged(state);\n }\n if (actions.updateQuery.match(action)) {\n state.target.target = action.payload.query;\n handleTargetChanged(state);\n }\n if (actions.runQuery.match(action)) {\n state.refresh();\n }\n if (actions.toggleEditorMode.match(action)) {\n state.target.textEditor = !state.target.textEditor;\n await parseTarget(state);\n }\n\n return { ...state };\n};\n\nexport const createStore = (onChange: (state: GraphiteQueryEditorState) => void): Dispatch => {\n let state = {} as GraphiteQueryEditorState;\n\n const dispatch = async (action: AnyAction) => {\n state = await reducer(action, state);\n onChange(state);\n };\n\n return dispatch as Dispatch;\n};\n","import { AnyAction } from '@reduxjs/toolkit';\nimport React, { createContext, Dispatch, PropsWithChildren, useContext, useEffect, useMemo, useState } from 'react';\nimport { usePrevious } from 'react-use';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport { getTemplateSrv } from 'app/features/templating/template_srv';\n\nimport { GraphiteDatasource } from '../datasource';\nimport { GraphiteOptions, GraphiteQuery } from '../types';\n\nimport { actions } from './actions';\nimport { createStore, GraphiteQueryEditorState } from './store';\n\nconst DispatchContext = createContext>({} as Dispatch);\nconst GraphiteStateContext = createContext({} as GraphiteQueryEditorState);\n\nexport const useDispatch = () => {\n return useContext(DispatchContext);\n};\n\nexport const useGraphiteState = () => {\n return useContext(GraphiteStateContext);\n};\n\nexport type GraphiteQueryEditorProps = QueryEditorProps;\n\nexport const GraphiteQueryEditorContext = ({\n datasource,\n onRunQuery,\n onChange,\n query,\n queries,\n range,\n children,\n}: PropsWithChildren) => {\n const [state, setState] = useState();\n const [needsRefresh, setNeedsRefresh] = useState(false);\n\n const dispatch = useMemo(() => {\n return createStore((state) => {\n setState(state);\n });\n }, []);\n\n // synchronise changes provided in props with editor's state\n const previousRange = usePrevious(range);\n useEffect(() => {\n if (previousRange?.raw !== range?.raw) {\n dispatch(actions.timeRangeChanged(range));\n }\n }, [dispatch, range, previousRange]);\n\n useEffect(\n () => {\n if (state) {\n dispatch(actions.queriesChanged(queries));\n }\n },\n // adding state to dependencies causes infinite loops\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatch, queries]\n );\n\n useEffect(\n () => {\n if (state && state.target?.target !== query.target) {\n dispatch(actions.queryChanged(query));\n }\n },\n // adding state to dependencies causes infinite loops\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatch, query]\n );\n\n useEffect(\n () => {\n if (needsRefresh && state) {\n setNeedsRefresh(false);\n onChange({ ...query, target: state.target.target });\n onRunQuery();\n }\n },\n // adding state to dependencies causes infinite loops\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [needsRefresh, onChange, onRunQuery, query]\n );\n\n if (!state) {\n dispatch(\n actions.init({\n target: query,\n datasource: datasource,\n range: range,\n templateSrv: getTemplateSrv(),\n // list of queries is passed only when the editor is in Dashboards. This is to allow interpolation\n // of sub-queries which are stored in \"targetFull\" property used by alerting in the backend.\n queries: queries || [],\n refresh: () => {\n // do not run onChange/onRunQuery straight away to ensure the internal state gets updated first\n // to avoid race conditions (onChange could update props before the reducer action finishes)\n setNeedsRefresh(true);\n },\n })\n );\n return null;\n } else {\n return (\n \n {children}\n \n );\n }\n};\n","import { DataQuery, DataQueryRequest, DataSourceJsonData, TimeRange } from '@grafana/data';\n\nimport { TemplateSrv } from '../../../features/templating/template_srv';\n\nimport { GraphiteDatasource } from './datasource';\n\nexport enum GraphiteQueryType {\n Default = 'Default',\n Value = 'Value',\n MetricName = 'Metric Name',\n}\n\nexport interface GraphiteQuery extends DataQuery {\n queryType?: string;\n textEditor?: boolean;\n target?: string;\n tags?: string[];\n fromAnnotations?: boolean;\n}\n\nexport interface GraphiteOptions extends DataSourceJsonData {\n graphiteVersion: string;\n graphiteType: GraphiteType;\n rollupIndicatorEnabled?: boolean;\n importConfiguration: GraphiteQueryImportConfiguration;\n}\n\nexport enum GraphiteType {\n Default = 'default',\n Metrictank = 'metrictank',\n}\n\nexport interface MetricTankRequestMeta {\n [key: string]: any;\n}\n\nexport interface MetricTankSeriesMeta {\n 'schema-name': string;\n 'schema-retentions': string; //\"1s:35d:20min:5:1542274085,1min:38d:2h:1:true,10min:120d:6h:1:true,2h:2y:6h:2\",\n 'archive-read': number;\n 'archive-interval': number;\n 'aggnum-norm': number;\n 'consolidator-normfetch': string; //\"MaximumConsolidator\",\n 'aggnum-rc': number;\n 'consolidator-rc': string; //\"MaximumConsolidator\",\n count: number;\n}\n\nexport interface MetricTankMeta {\n request: MetricTankRequestMeta;\n info: MetricTankSeriesMeta[];\n}\n\nexport interface GraphiteParserError {\n message: string;\n pos: number;\n}\n\nexport type GraphiteQueryImportConfiguration = {\n loki: GraphiteToLokiQueryImportConfiguration;\n};\n\nexport type GraphiteToLokiQueryImportConfiguration = {\n mappings: GraphiteLokiMapping[];\n};\n\nexport type GraphiteLokiMapping = {\n matchers: GraphiteMetricLokiMatcher[];\n};\n\nexport type GraphiteMetricLokiMatcher = {\n value: string;\n labelName?: string;\n};\n\nexport type GraphiteSegment = {\n value: string;\n type?: 'tag' | 'metric' | 'series-ref' | 'template';\n expandable?: boolean;\n fake?: boolean;\n};\n\nexport type GraphiteTagOperator = '=' | '!=' | '=~' | '!=~';\n\nexport type GraphiteTag = {\n key: string;\n operator: GraphiteTagOperator;\n value: string;\n};\n\nexport type GraphiteQueryEditorDependencies = {\n target: any;\n datasource: GraphiteDatasource;\n range?: TimeRange;\n templateSrv: TemplateSrv;\n queries: DataQuery[];\n // schedule onChange/onRunQuery after the reducer actions finishes\n refresh: () => void;\n};\n\nexport interface GraphiteQueryRequest extends DataQueryRequest {\n format: string;\n}\n","import { forEach, sortBy } from 'lodash';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { FuncDefs, FuncInstance, ParamDef } from '../gfunc';\nimport { GraphiteQuery, GraphiteQueryType, GraphiteSegment } from '../types';\n\nimport { EditableParam } from './FunctionParamEditor';\n\nexport function mapStringsToSelectables(values: T[]): Array> {\n return values.map((value) => ({\n value,\n label: value,\n }));\n}\n\nexport function mapSegmentsToSelectables(segments: GraphiteSegment[]): Array> {\n return segments.map((segment) => ({\n label: segment.value,\n value: segment,\n }));\n}\n\nexport function mapFuncDefsToSelectables(funcDefs: FuncDefs): Array> {\n const categories: any = {};\n\n forEach(funcDefs, (funcDef) => {\n if (!funcDef.category) {\n return;\n }\n if (!categories[funcDef.category]) {\n categories[funcDef.category] = { label: funcDef.category, value: funcDef.category, options: [] };\n }\n categories[funcDef.category].options.push({\n label: funcDef.name,\n value: funcDef.name,\n });\n });\n\n return sortBy(categories, 'label');\n}\n\nfunction createEditableParam(paramDef: ParamDef, additional: boolean, value?: string | number): EditableParam {\n return {\n name: paramDef.name,\n value: value?.toString() || '',\n optional: !!paramDef.optional || additional, // only first param is required when multiple are allowed\n multiple: !!paramDef.multiple,\n options:\n paramDef.options?.map((option: string | number) => ({\n value: option.toString(),\n label: option.toString(),\n })) ?? [],\n };\n}\n\n/**\n * Create a list of params that can be edited in the function editor.\n */\nexport function mapFuncInstanceToParams(func: FuncInstance): EditableParam[] {\n // list of required parameters (from func.def)\n const params: EditableParam[] = func.def.params.map((paramDef: ParamDef, index: number) =>\n createEditableParam(paramDef, false, func.params[index])\n );\n\n // list of additional (multiple or optional) params entered by the user\n while (params.length < func.params.length) {\n const paramDef = func.def.params[func.def.params.length - 1];\n const value = func.params[params.length];\n params.push(createEditableParam(paramDef, true, value));\n }\n\n // extra \"fake\" param to allow adding more multiple values at the end\n if (params.length && params[params.length - 1].value && params[params.length - 1]?.multiple) {\n const paramDef = func.def.params[func.def.params.length - 1];\n params.push(createEditableParam(paramDef, true, ''));\n }\n\n return params;\n}\n\nexport function convertToGraphiteQueryObject(query: string | GraphiteQuery): GraphiteQuery {\n if (typeof query === 'string') {\n return {\n refId: 'A',\n target: query,\n queryType: GraphiteQueryType.Default.toString(),\n };\n }\n return query;\n}\n","import { css, cx } from '@emotion/css';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Button, Segment, useStyles2 } from '@grafana/ui';\n\nimport { FuncDefs } from '../gfunc';\nimport { actions } from '../state/actions';\nimport { useDispatch } from '../state/context';\n\nimport { mapFuncDefsToSelectables } from './helpers';\n\ntype Props = {\n funcDefs: FuncDefs;\n};\n\nexport function AddGraphiteFunction({ funcDefs }: Props) {\n const dispatch = useDispatch();\n const [value, setValue] = useState | undefined>(undefined);\n const styles = useStyles2(getStyles);\n\n const options = useMemo(() => mapFuncDefsToSelectables(funcDefs), [funcDefs]);\n\n // Note: actions.addFunction will add a component that will have a dropdown or input in auto-focus\n // (the first param of the function). This auto-focus will cause onBlur() on AddGraphiteFunction's\n // Segment component and trigger onChange once again. (why? we call onChange if the user dismissed\n // the dropdown, see: SegmentSelect.onCloseMenu for more details). To avoid it we need to wait for\n // the Segment to disappear first (hence useEffect) and then dispatch the action that will add new\n // components.\n useEffect(() => {\n if (value?.value !== undefined) {\n dispatch(actions.addFunction({ name: value.value }));\n setValue(undefined);\n }\n }, [value, dispatch]);\n\n return (\n }\n options={options}\n onChange={setValue}\n inputMinWidth={150}\n />\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n button: css`\n margin-right: ${theme.spacing(0.5)};\n `,\n };\n}\n","import React, { Suspense } from 'react';\n\nimport { Icon, Tooltip } from '@grafana/ui';\n\nimport { FuncInstance } from '../gfunc';\n\nexport interface FunctionEditorControlsProps {\n onMoveLeft: (func: FuncInstance) => void;\n onMoveRight: (func: FuncInstance) => void;\n onRemove: (func: FuncInstance) => void;\n}\n\nconst FunctionDescription = React.lazy(async () => {\n return {\n default(props: { description?: string }) {\n return
{props.description}
;\n },\n };\n});\n\nconst FunctionHelpButton = (props: { description?: string; name: string }) => {\n if (props.description) {\n let tooltip = (\n Loading description...}>\n \n \n );\n return (\n \n \n \n );\n }\n\n return (\n {\n window.open(\n 'http://graphite.readthedocs.org/en/latest/functions.html#graphite.render.functions.' + props.name,\n '_blank'\n );\n }}\n />\n );\n};\n\nexport const FunctionEditorControls = (\n props: FunctionEditorControlsProps & {\n func: FuncInstance;\n }\n) => {\n const { func, onMoveLeft, onMoveRight, onRemove } = props;\n return (\n \n onMoveLeft(func)} />\n \n onRemove(func)} />\n onMoveRight(func)} />\n \n );\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { FuncInstance } from '../gfunc';\n\nimport { FunctionEditorControls, FunctionEditorControlsProps } from './FunctionEditorControls';\n\ninterface FunctionEditorProps extends FunctionEditorControlsProps {\n func: FuncInstance;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n icon: css`\n margin-right: ${theme.spacing(0.5)};\n `,\n label: css({\n fontWeight: theme.typography.fontWeightMedium,\n fontSize: theme.typography.bodySmall.fontSize, // to match .gf-form-label\n cursor: 'pointer',\n display: 'inline-block',\n }),\n };\n};\n\nconst FunctionEditor: React.FC = ({ onMoveLeft, onMoveRight, func, ...props }) => {\n const styles = useStyles2(getStyles);\n\n const renderContent = ({ updatePopperPosition }: any) => (\n {\n onMoveLeft(func);\n updatePopperPosition();\n }}\n onMoveRight={() => {\n onMoveRight(func);\n updatePopperPosition();\n }}\n />\n );\n\n return (\n <>\n {func.def.unknown && (\n } placement=\"bottom\" interactive>\n \n \n )}\n \n {func.def.name}\n \n \n );\n};\n\nconst TooltipContent = React.memo(() => {\n return (\n \n This function is not supported. Check your function for typos and{' '}\n \n read the docs\n {' '}\n to see whether you need to upgrade your data source’s version to make this function available.\n \n );\n});\nTooltipContent.displayName = 'FunctionEditorTooltipContent';\n\nexport { FunctionEditor };\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { Segment, SegmentInput, useStyles2 } from '@grafana/ui';\n\nexport type EditableParam = {\n name: string;\n value: string;\n optional: boolean;\n multiple: boolean;\n options: Array>;\n};\n\ntype FieldEditorProps = {\n editableParam: EditableParam;\n onChange: (value: string) => void;\n onExpandedChange: (expanded: boolean) => void;\n autofocus: boolean;\n};\n\n/**\n * Render a function parameter with a segment dropdown for multiple options or simple input.\n */\nexport function FunctionParamEditor({ editableParam, onChange, onExpandedChange, autofocus }: FieldEditorProps) {\n const styles = useStyles2(getStyles);\n\n if (editableParam.options?.length > 0) {\n return (\n {\n onChange(value.value || '');\n }}\n onExpandedChange={onExpandedChange}\n inputMinWidth={150}\n allowCustomValue={true}\n allowEmptyValue={true}\n >\n );\n } else {\n return (\n {\n onChange(value.toString());\n }}\n onExpandedChange={onExpandedChange}\n // input style\n style={{ height: '25px', paddingTop: '2px', marginTop: '2px', paddingLeft: '4px', minWidth: '100px' }}\n >\n );\n }\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n segment: css({\n margin: 0,\n padding: 0,\n }),\n input: css`\n margin: 0;\n padding: 0;\n input {\n height: 25px;\n },\n `,\n});\n","import { css, cx } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { HorizontalGroup, InlineLabel, useStyles2 } from '@grafana/ui';\n\nimport { FuncInstance } from '../gfunc';\nimport { actions } from '../state/actions';\nimport { useDispatch } from '../state/context';\n\nimport { FunctionEditor } from './FunctionEditor';\nimport { EditableParam, FunctionParamEditor } from './FunctionParamEditor';\nimport { mapFuncInstanceToParams } from './helpers';\n\nexport type FunctionEditorProps = {\n func: FuncInstance;\n};\n\n/**\n * Allows editing function params and removing/moving a function (note: editing function name is not supported)\n */\nexport function GraphiteFunctionEditor({ func }: FunctionEditorProps) {\n const dispatch = useDispatch();\n const styles = useStyles2(getStyles);\n\n // keep track of mouse over and isExpanded state to display buttons for adding optional/multiple params\n // only when the user mouse over over the function editor OR any param editor is expanded.\n const [mouseOver, setIsMouseOver] = useState(false);\n const [expanded, setIsExpanded] = useState(false);\n\n let params = mapFuncInstanceToParams(func);\n params = params.filter((p: EditableParam, index: number) => {\n // func.added is set for newly added functions - see autofocus below\n return (index < func.def.params.length && !p.optional) || func.added || p.value || expanded || mouseOver;\n });\n\n return (\n setIsMouseOver(false)}\n onFocus={() => setIsMouseOver(true)}\n onMouseOver={() => setIsMouseOver(true)}\n onMouseOut={() => setIsMouseOver(false)}\n >\n \n {\n dispatch(actions.moveFunction({ func, offset: -1 }));\n }}\n onMoveRight={() => {\n dispatch(actions.moveFunction({ func, offset: 1 }));\n }}\n onRemove={() => {\n dispatch(actions.removeFunction({ func }));\n }}\n />\n (\n {params.map((editableParam: EditableParam, index: number) => {\n return (\n \n {\n if (value !== '' || editableParam.optional) {\n dispatch(actions.updateFunctionParam({ func, index, value }));\n }\n setIsExpanded(false);\n setIsMouseOver(false);\n }}\n onExpandedChange={setIsExpanded}\n />\n {index !== params.length - 1 ? ',' : ''}\n \n );\n })}\n )\n \n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n backgroundColor: theme.colors.background.secondary,\n borderRadius: theme.shape.borderRadius(),\n marginRight: theme.spacing(0.5),\n padding: `0 ${theme.spacing(1)}`,\n height: `${theme.v1.spacing.formInputHeight}px`,\n }),\n error: css`\n border: 1px solid ${theme.colors.error.main};\n `,\n label: css({\n padding: 0,\n margin: 0,\n }),\n button: css({\n padding: theme.spacing(0.5),\n }),\n});\n","import React from 'react';\n\nimport { SegmentSection } from '@grafana/ui';\n\nimport { FuncDefs, FuncInstance } from '../gfunc';\n\nimport { AddGraphiteFunction } from './AddGraphiteFunction';\nimport { GraphiteFunctionEditor } from './GraphiteFunctionEditor';\n\ntype Props = {\n functions: FuncInstance[];\n funcDefs: FuncDefs;\n};\n\nexport function FunctionsSection({ functions = [], funcDefs }: Props) {\n return (\n \n {functions.map((func: FuncInstance, index: number) => {\n return !func.hidden && ;\n })}\n \n \n );\n}\n","import React, { useCallback } from 'react';\n\nimport { QueryField } from '@grafana/ui';\n\nimport { actions } from '../state/actions';\nimport { useDispatch } from '../state/context';\n\ntype Props = {\n rawQuery: string;\n};\n\nexport function GraphiteTextEditor({ rawQuery }: Props) {\n const dispatch = useDispatch();\n\n const updateQuery = useCallback(\n (query: string) => {\n dispatch(actions.updateQuery({ query }));\n },\n [dispatch]\n );\n\n const runQuery = useCallback(() => {\n dispatch(actions.runQuery());\n }, [dispatch]);\n\n return (\n \n );\n}\n","import { eachRight, map, remove } from 'lodash';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { mapSegmentsToSelectables, mapStringsToSelectables } from '../components/helpers';\nimport { GraphiteSegment, GraphiteTag, GraphiteTagOperator } from '../types';\n\nimport {\n TAG_PREFIX,\n GRAPHITE_TAG_OPERATORS,\n handleMetricsAutoCompleteError,\n handleTagsAutoCompleteError,\n} from './helpers';\nimport { GraphiteQueryEditorState } from './store';\n\n/**\n * All auto-complete lists are updated while typing. To avoid performance issues we do not render more\n * than MAX_SUGGESTIONS limits in a single dropdown.\n *\n * MAX_SUGGESTIONS is per metrics and tags separately. On the very first dropdown where metrics and tags are\n * combined together meaning it may end up with max of 2 * MAX_SUGGESTIONS items in total.\n */\nconst MAX_SUGGESTIONS = 5000;\n\n/**\n * Providers are hooks for views to provide temporal data for autocomplete. They don't modify the state.\n */\n\n/**\n * Return list of available options for a segment with given index\n *\n * It may be:\n * - mixed list of metrics and tags (only when nothing was selected)\n * - list of metric names (if a metric name was selected for this segment)\n */\nasync function getAltSegments(\n state: GraphiteQueryEditorState,\n index: number,\n prefix: string\n): Promise {\n let query = prefix.length > 0 ? '*' + prefix + '*' : '*';\n if (index > 0) {\n query = state.queryModel.getSegmentPathUpTo(index) + '.' + query;\n }\n const options = {\n range: state.range,\n requestId: 'get-alt-segments',\n };\n\n try {\n const segments = await state.datasource.metricFindQuery(query, options);\n const altSegments: GraphiteSegment[] = map(segments, (segment) => {\n return {\n value: segment.text,\n expandable: segment.expandable,\n };\n });\n\n if (index > 0 && altSegments.length === 0) {\n return altSegments;\n }\n\n // add query references\n if (index === 0) {\n eachRight(state.queries, (target) => {\n if (target.refId === state.queryModel.target.refId) {\n return;\n }\n\n altSegments.unshift({\n type: 'series-ref',\n value: '#' + target.refId,\n expandable: false,\n });\n });\n }\n\n // add template variables\n eachRight(state.templateSrv.getVariables(), (variable) => {\n altSegments.unshift({\n type: 'template',\n value: '$' + variable.name,\n expandable: true,\n });\n });\n\n // add wildcard option and limit number of suggestions (API doesn't support limiting\n // hence we are doing it here)\n altSegments.unshift({ value: '*', expandable: true });\n altSegments.splice(MAX_SUGGESTIONS);\n\n if (state.supportsTags && index === 0) {\n removeTaggedEntry(altSegments);\n return await addAltTagSegments(state, prefix, altSegments);\n } else {\n return altSegments;\n }\n } catch (err) {\n if (err instanceof Error) {\n handleMetricsAutoCompleteError(state, err);\n }\n }\n\n return [];\n}\n\n/**\n * Get the list of segments with tags and metrics. Suggestions are reduced in getAltSegments and addAltTagSegments so in case\n * we hit MAX_SUGGESTIONS limit there are always some tags and metrics shown.\n */\nexport async function getAltSegmentsSelectables(\n state: GraphiteQueryEditorState,\n index: number,\n prefix: string\n): Promise>> {\n return mapSegmentsToSelectables(await getAltSegments(state, index, prefix));\n}\n\nexport function getTagOperatorsSelectables(): Array> {\n return mapStringsToSelectables(GRAPHITE_TAG_OPERATORS);\n}\n\n/**\n * Returns tags as dropdown options\n */\nasync function getTags(state: GraphiteQueryEditorState, index: number, tagPrefix: string): Promise {\n try {\n const tagExpressions = state.queryModel.renderTagExpressions(index);\n const values = await state.datasource.getTagsAutoComplete(tagExpressions, tagPrefix, {\n range: state.range,\n limit: MAX_SUGGESTIONS,\n });\n\n const altTags = map(values, 'text');\n altTags.splice(0, 0, state.removeTagValue);\n return altTags;\n } catch (err) {\n if (err instanceof Error) {\n handleTagsAutoCompleteError(state, err);\n }\n }\n\n return [];\n}\n\nexport async function getTagsSelectables(\n state: GraphiteQueryEditorState,\n index: number,\n tagPrefix: string\n): Promise>> {\n return mapStringsToSelectables(await getTags(state, index, tagPrefix));\n}\n\n/**\n * List of tags when a tag is added. getTags is used for editing.\n * When adding - segment is used. When editing - dropdown is used.\n */\nasync function getTagsAsSegments(state: GraphiteQueryEditorState, tagPrefix: string): Promise {\n let tagsAsSegments: GraphiteSegment[];\n try {\n const tagExpressions = state.queryModel.renderTagExpressions();\n const values = await state.datasource.getTagsAutoComplete(tagExpressions, tagPrefix, {\n range: state.range,\n limit: MAX_SUGGESTIONS,\n });\n tagsAsSegments = map(values, (val) => {\n return {\n value: val.text,\n type: 'tag',\n expandable: false,\n };\n });\n } catch (err) {\n tagsAsSegments = [];\n if (err instanceof Error) {\n handleTagsAutoCompleteError(state, err);\n }\n }\n\n return tagsAsSegments;\n}\n\n/**\n * Get list of tags, used when adding additional tags (first tag is selected from a joined list of metrics and tags)\n */\nexport async function getTagsAsSegmentsSelectables(\n state: GraphiteQueryEditorState,\n tagPrefix: string\n): Promise>> {\n return mapSegmentsToSelectables(await getTagsAsSegments(state, tagPrefix));\n}\n\nasync function getTagValues(\n state: GraphiteQueryEditorState,\n tag: GraphiteTag,\n index: number,\n valuePrefix: string\n): Promise {\n const tagExpressions = state.queryModel.renderTagExpressions(index);\n const tagKey = tag.key;\n const values = await state.datasource.getTagValuesAutoComplete(tagExpressions, tagKey, valuePrefix, {\n limit: MAX_SUGGESTIONS,\n });\n const altValues = map(values, 'text');\n // Add template variables as additional values\n eachRight(state.templateSrv.getVariables(), (variable) => {\n altValues.push('${' + variable.name + ':regex}');\n });\n\n return altValues;\n}\n\nexport async function getTagValuesSelectables(\n state: GraphiteQueryEditorState,\n tag: GraphiteTag,\n index: number,\n valuePrefix: string\n): Promise>> {\n return mapStringsToSelectables(await getTagValues(state, tag, index, valuePrefix));\n}\n\n/**\n * Add segments with tags prefixed with \"tag: \" to include them in the same list as metrics\n */\nasync function addAltTagSegments(\n state: GraphiteQueryEditorState,\n prefix: string,\n altSegments: GraphiteSegment[]\n): Promise {\n let tagSegments = await getTagsAsSegments(state, prefix);\n\n tagSegments = map(tagSegments, (segment) => {\n segment.value = TAG_PREFIX + segment.value;\n return segment;\n });\n\n return altSegments.concat(...tagSegments);\n}\n\nfunction removeTaggedEntry(altSegments: GraphiteSegment[]) {\n remove(altSegments, (s) => s.value === '_tagged');\n}\n","import { debounce } from 'lodash';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { SegmentAsync } from '@grafana/ui';\n\nimport { actions } from '../state/actions';\nimport { useDispatch } from '../state/context';\nimport { getAltSegmentsSelectables } from '../state/providers';\nimport { GraphiteQueryEditorState } from '../state/store';\nimport { GraphiteSegment } from '../types';\n\ntype Props = {\n segment: GraphiteSegment;\n metricIndex: number;\n state: GraphiteQueryEditorState;\n};\n\n/**\n * Represents a single metric node in the metric path at the given index. Allows to change the metric name to one of the\n * provided options or a custom value.\n *\n * Options for tag names and metric names are reloaded while user is typing with backend taking care of auto-complete\n * (auto-complete cannot be implemented in front-end because backend returns only limited number of entries)\n *\n * getAltSegmentsSelectables() also returns list of tags for segment with index=0. Once a tag is selected the editor\n * enters tag-adding mode (see SeriesSection and GraphiteQueryModel.seriesByTagUsed).\n */\nexport function MetricSegment({ metricIndex, segment, state }: Props) {\n const dispatch = useDispatch();\n const loadOptions = useCallback(\n (value: string | undefined) => {\n return getAltSegmentsSelectables(state, metricIndex, value || '');\n },\n [state, metricIndex]\n );\n const debouncedLoadOptions = useMemo(() => debounce(loadOptions, 200, { leading: true }), [loadOptions]);\n\n const onSegmentChanged = useCallback(\n (selectableValue: SelectableValue) => {\n // selectableValue.value is always defined because emptyValues are not allowed in SegmentAsync by default\n dispatch(actions.segmentValueChanged({ segment: selectableValue.value!, index: metricIndex }));\n },\n [dispatch, metricIndex]\n );\n\n // segmentValueChanged action will destroy SegmentAsync immediately if a tag is selected. To give time\n // for the clean up the action is debounced.\n const onSegmentChangedDebounced = useMemo(() => debounce(onSegmentChanged, 100), [onSegmentChanged]);\n\n return (\n \n value={segment.value}\n inputMinWidth={150}\n allowCustomValue={true}\n loadOptions={debouncedLoadOptions}\n reloadOptionsOnChange={true}\n onChange={onSegmentChangedDebounced}\n />\n );\n}\n","import React from 'react';\n\nimport { GraphiteQueryEditorState } from '../state/store';\nimport { GraphiteSegment } from '../types';\n\nimport { MetricSegment } from './MetricSegment';\n\ntype Props = {\n segments: GraphiteSegment[];\n state: GraphiteQueryEditorState;\n};\n\nexport function MetricsSection({ segments = [], state }: Props) {\n return (\n <>\n {segments.map((segment, index) => {\n return ;\n })}\n \n );\n}\n","import React, { useCallback } from 'react';\n\nimport { Button } from '@grafana/ui';\n\nimport { actions } from '../state/actions';\nimport { useDispatch } from '../state/context';\n\nexport function PlayButton() {\n const dispatch = useDispatch();\n const onClick = useCallback(() => {\n dispatch(actions.unpause());\n }, [dispatch]);\n return \n

\n )}\n {props.showHelp && }\n\n
\n {mappings.map((mapping, i) => (\n \n \n ) => {\n let newMappings = mappings.concat();\n newMappings[i] = changeEvent.target.value;\n setMappings(newMappings);\n }}\n onBlur={() => {\n props.onChange(mappings);\n }}\n placeholder=\"e.g. test.metric.(labelName).*\"\n value={mapping}\n />\n \n {\n let newMappings = mappings.concat();\n newMappings.splice(i, 1);\n setMappings(newMappings);\n props.onChange(newMappings);\n }}\n >\n \n \n \n ))}\n {\n setMappings([...mappings, '']);\n }}\n >\n Add label mapping\n \n
\n \n );\n};\n","import { GraphiteLokiMapping } from '../types';\n\n/**\n * Converts a simple string used in LokiLogsMappings component (e.g. \"servers.(name).*\")\n * to data model saved in data source configuration.\n */\nexport function fromString(text: string): GraphiteLokiMapping {\n return {\n matchers: text.split('.').map((metricNode) => {\n if (metricNode.startsWith('(') && metricNode.endsWith(')')) {\n return {\n value: '*',\n labelName: metricNode.slice(1, -1),\n };\n } else {\n return { value: metricNode };\n }\n }),\n };\n}\n\n/**\n * Coverts configuration stored in data source configuration into a string displayed in LokiLogsMappings component.\n */\nexport function toString(mapping: GraphiteLokiMapping): string {\n return mapping.matchers\n .map((matcher) => {\n return matcher.labelName ? `(${matcher.labelName})` : `${matcher.value}`;\n })\n .join('.');\n}\n","import React, { PureComponent } from 'react';\n\nimport {\n DataSourcePluginOptionsEditorProps,\n updateDatasourcePluginJsonDataOption,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceJsonDataOptionChecked,\n} from '@grafana/data';\nimport {\n Alert,\n DataSourceHttpSettings,\n InlineFormLabel,\n LegacyForms,\n Select,\n SecureSocksProxySettings,\n} from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport store from 'app/core/store';\n\nimport { GraphiteOptions, GraphiteType } from '../types';\nimport { DEFAULT_GRAPHITE_VERSION, GRAPHITE_VERSIONS } from '../versions';\n\nimport { MappingsConfiguration } from './MappingsConfiguration';\nimport { fromString, toString } from './parseLokiLabelMappings';\n\nconst { Switch } = LegacyForms;\nexport const SHOW_MAPPINGS_HELP_KEY = 'grafana.datasources.graphite.config.showMappingsHelp';\n\nconst graphiteVersions = GRAPHITE_VERSIONS.map((version) => ({ label: `${version}.x`, value: version }));\n\nconst graphiteTypes = Object.entries(GraphiteType).map(([label, value]) => ({\n label,\n value,\n}));\n\nexport type Props = DataSourcePluginOptionsEditorProps;\n\ntype State = {\n showMappingsHelp: boolean;\n};\n\nexport class ConfigEditor extends PureComponent {\n constructor(props: Props) {\n super(props);\n this.state = {\n showMappingsHelp: store.getObject(SHOW_MAPPINGS_HELP_KEY, true),\n };\n }\n\n renderTypeHelp = () => {\n return (\n

\n There are different types of Graphite compatible backends. Here you can specify the type you are using. If you\n are using{' '}\n \n Metrictank\n {' '}\n then select that here. This will enable Metrictank specific features like query processing meta data. Metrictank\n is a multi-tenant timeseries engine for Graphite and friends.\n

\n );\n };\n\n componentDidMount() {\n updateDatasourcePluginJsonDataOption(this.props, 'graphiteVersion', this.currentGraphiteVersion);\n }\n\n render() {\n const { options, onOptionsChange } = this.props;\n\n const currentVersion = graphiteVersions.find((item) => item.value === this.currentGraphiteVersion);\n\n return (\n <>\n {options.access === 'direct' && (\n \n This data source uses browser access mode. This mode is deprecated and will be removed in the future. Please\n use server access mode instead.\n \n )}\n \n {config.featureToggles.secureSocksDatasourceProxy && (\n \n )}\n

Graphite details

\n
\n
\n
\n \n Version\n \n \n
\n
\n
\n
\n Type\n type.value === options.jsonData.graphiteType)}\n className=\"width-8\"\n onChange={onUpdateDatasourceJsonDataOptionSelect(this.props, 'graphiteType')}\n />\n
\n
\n {options.jsonData.graphiteType === GraphiteType.Metrictank && (\n
\n
\n \n
\n
\n )}\n
\n {\n this.setState({ showMappingsHelp: false });\n store.setObject(SHOW_MAPPINGS_HELP_KEY, false);\n }}\n onRestoreHelp={() => {\n this.setState({ showMappingsHelp: true });\n store.setObject(SHOW_MAPPINGS_HELP_KEY, true);\n }}\n onChange={(mappings) => {\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n importConfiguration: {\n ...options.jsonData.importConfiguration,\n loki: {\n mappings: mappings.map(fromString),\n },\n },\n },\n });\n }}\n />\n \n );\n }\n\n private get currentGraphiteVersion() {\n return this.props.options.jsonData.graphiteVersion || DEFAULT_GRAPHITE_VERSION;\n }\n}\n","import { isNumber } from 'lodash';\n\nconst versionPattern = /^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-([0-9A-Za-z\\.]+))?/;\n\nexport class SemVersion {\n major: number;\n minor: number;\n patch: number;\n meta: string;\n\n constructor(version: string) {\n this.major = 0;\n this.minor = 0;\n this.patch = 0;\n this.meta = '';\n const match = versionPattern.exec(version);\n if (match) {\n this.major = Number(match[1]);\n this.minor = Number(match[2] || 0);\n this.patch = Number(match[3] || 0);\n this.meta = match[4];\n }\n }\n\n isGtOrEq(version: string): boolean {\n const compared = new SemVersion(version);\n\n for (let i = 0; i < this.comparable.length; ++i) {\n if (this.comparable[i] > compared.comparable[i]) {\n return true;\n }\n if (this.comparable[i] < compared.comparable[i]) {\n return false;\n }\n }\n return true;\n }\n\n isValid(): boolean {\n return isNumber(this.major);\n }\n\n get comparable() {\n return [this.major, this.minor, this.patch];\n }\n}\n\nexport function isVersionGtOrEq(a: string, b: string): boolean {\n const aSemver = new SemVersion(a);\n return aSemver.isGtOrEq(b);\n}\n","import React, { useState } from 'react';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport { InlineFormLabel, Input, TagsInput } from '@grafana/ui';\n\nimport { GraphiteDatasource } from '../datasource';\nimport { GraphiteQuery, GraphiteOptions } from '../types';\n\nexport const AnnotationEditor = (props: QueryEditorProps) => {\n const { query, onChange } = props;\n const [target, setTarget] = useState(query.target ?? '');\n const [tags, setTags] = useState(query.tags ?? []);\n const updateValue = (key: K, val: V) => {\n if (key === 'tags') {\n onChange({\n ...query,\n [key]: val,\n fromAnnotations: true,\n queryType: key,\n });\n } else {\n onChange({\n ...query,\n [key]: val,\n fromAnnotations: true,\n textEditor: true,\n });\n }\n };\n\n const onTagsChange = (tagsInput: string[]) => {\n setTags(tagsInput);\n updateValue('tags', tagsInput);\n };\n\n return (\n
\n
\n Graphite Query\n setTarget(e.currentTarget.value || '')}\n onBlur={() => updateValue('target', target)}\n placeholder=\"Example: statsd.application.counters.*.count\"\n />\n
\n\n
Or
\n\n
\n Graphite events tags\n \n
\n
\n );\n};\n","import { assign, each, filter, forEach, get, includes, isString, last, map, toString, isFinite } from 'lodash';\n\nimport { InterpolateFunction } from '@grafana/data';\nimport { isVersionGtOrEq } from 'app/core/utils/version';\n\nexport type ParamDef = {\n name: string;\n type: string;\n options?: Array;\n multiple?: boolean;\n optional?: boolean;\n version?: string;\n};\n\nexport interface FuncDef {\n name: string;\n params: ParamDef[];\n defaultParams: Array;\n category?: string;\n shortName?: any;\n fake?: boolean;\n version?: string;\n description?: string;\n /**\n * True if the function was not found on the list of available function descriptions.\n */\n unknown?: boolean;\n}\n\nexport type FuncDefs = {\n [functionName in string]: FuncDef;\n};\n\nconst index: FuncDefs = {};\n\nfunction addFuncDef(funcDef: Partial & { name: string; category: string }) {\n funcDef.params = funcDef.params || [];\n funcDef.defaultParams = funcDef.defaultParams || [];\n\n index[funcDef.name] = funcDef as FuncDef;\n if (funcDef.shortName) {\n index[funcDef.shortName] = funcDef as FuncDef;\n }\n}\n\nconst optionalSeriesRefArgs = [{ name: 'other', type: 'value_or_series', optional: true, multiple: true }];\n\naddFuncDef({\n name: 'scaleToSeconds',\n category: 'Transform',\n params: [{ name: 'seconds', type: 'int' }],\n defaultParams: [1],\n});\n\naddFuncDef({\n name: 'perSecond',\n category: 'Transform',\n params: [{ name: 'max value', type: 'int', optional: true }],\n defaultParams: [],\n});\n\naddFuncDef({\n name: 'holtWintersForecast',\n category: 'Calculate',\n});\n\naddFuncDef({\n name: 'holtWintersConfidenceBands',\n category: 'Calculate',\n params: [{ name: 'delta', type: 'int' }],\n defaultParams: [3],\n});\n\naddFuncDef({\n name: 'holtWintersAberration',\n category: 'Calculate',\n params: [{ name: 'delta', type: 'int' }],\n defaultParams: [3],\n});\n\naddFuncDef({\n name: 'nPercentile',\n category: 'Calculate',\n params: [{ name: 'Nth percentile', type: 'int' }],\n defaultParams: [95],\n});\n\naddFuncDef({\n name: 'diffSeries',\n params: optionalSeriesRefArgs,\n defaultParams: ['#A'],\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'stddevSeries',\n params: optionalSeriesRefArgs,\n defaultParams: [''],\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'divideSeries',\n params: optionalSeriesRefArgs,\n defaultParams: ['#A'],\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'multiplySeries',\n params: optionalSeriesRefArgs,\n defaultParams: ['#A'],\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'asPercent',\n params: optionalSeriesRefArgs,\n defaultParams: ['#A'],\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'group',\n params: optionalSeriesRefArgs,\n defaultParams: ['#A', '#B'],\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'sumSeries',\n shortName: 'sum',\n category: 'Combine',\n params: optionalSeriesRefArgs,\n defaultParams: [''],\n});\n\naddFuncDef({\n name: 'averageSeries',\n shortName: 'avg',\n category: 'Combine',\n params: optionalSeriesRefArgs,\n defaultParams: [''],\n});\n\naddFuncDef({\n name: 'rangeOfSeries',\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'percentileOfSeries',\n category: 'Combine',\n params: [\n { name: 'n', type: 'int' },\n { name: 'interpolate', type: 'boolean', options: ['true', 'false'] },\n ],\n defaultParams: [95, 'false'],\n});\n\naddFuncDef({\n name: 'sumSeriesWithWildcards',\n category: 'Combine',\n params: [{ name: 'node', type: 'int', multiple: true }],\n defaultParams: [3],\n});\n\naddFuncDef({\n name: 'maxSeries',\n shortName: 'max',\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'minSeries',\n shortName: 'min',\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'averageSeriesWithWildcards',\n category: 'Combine',\n params: [{ name: 'node', type: 'int', multiple: true }],\n defaultParams: [3],\n});\n\naddFuncDef({\n name: 'alias',\n category: 'Alias',\n params: [{ name: 'alias', type: 'string' }],\n defaultParams: ['alias'],\n});\n\naddFuncDef({\n name: 'aliasSub',\n category: 'Alias',\n params: [\n { name: 'search', type: 'string' },\n { name: 'replace', type: 'string' },\n ],\n defaultParams: ['', '\\\\1'],\n});\n\naddFuncDef({\n name: 'consolidateBy',\n category: 'Special',\n params: [\n {\n name: 'function',\n type: 'string',\n options: ['sum', 'average', 'min', 'max'],\n },\n ],\n defaultParams: ['max'],\n});\n\naddFuncDef({\n name: 'cumulative',\n category: 'Special',\n params: [],\n defaultParams: [],\n});\n\naddFuncDef({\n name: 'groupByNode',\n category: 'Combine',\n params: [\n {\n name: 'node',\n type: 'int',\n options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12],\n },\n {\n name: 'function',\n type: 'string',\n options: ['sum', 'avg', 'maxSeries'],\n },\n ],\n defaultParams: [3, 'sum'],\n});\n\naddFuncDef({\n name: 'aliasByNode',\n category: 'Alias',\n params: [\n {\n name: 'node',\n type: 'int',\n options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12],\n multiple: true,\n },\n ],\n defaultParams: [3],\n});\n\naddFuncDef({\n name: 'substr',\n category: 'Special',\n params: [\n {\n name: 'start',\n type: 'int',\n options: [-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12],\n },\n {\n name: 'stop',\n type: 'int',\n options: [-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12],\n },\n ],\n defaultParams: [0, 0],\n});\n\naddFuncDef({\n name: 'sortByName',\n category: 'Sorting',\n params: [\n {\n name: 'natural',\n type: 'boolean',\n options: ['true', 'false'],\n optional: true,\n },\n ],\n defaultParams: ['false'],\n});\n\naddFuncDef({\n name: 'sortByMaxima',\n category: 'Sorting',\n});\n\naddFuncDef({\n name: 'sortByMinima',\n category: 'Sorting',\n});\n\naddFuncDef({\n name: 'sortByTotal',\n category: 'Sorting',\n});\n\naddFuncDef({\n name: 'aliasByMetric',\n category: 'Alias',\n});\n\naddFuncDef({\n name: 'randomWalk',\n fake: true,\n category: 'Special',\n params: [{ name: 'name', type: 'string' }],\n defaultParams: ['randomWalk'],\n});\n\naddFuncDef({\n name: 'countSeries',\n category: 'Combine',\n});\n\naddFuncDef({\n name: 'constantLine',\n category: 'Special',\n params: [{ name: 'value', type: 'int' }],\n defaultParams: [10],\n});\n\naddFuncDef({\n name: 'cactiStyle',\n category: 'Special',\n});\n\naddFuncDef({\n name: 'keepLastValue',\n category: 'Transform',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [100],\n});\n\naddFuncDef({\n name: 'changed',\n category: 'Special',\n params: [],\n defaultParams: [],\n});\n\naddFuncDef({\n name: 'scale',\n category: 'Transform',\n params: [{ name: 'factor', type: 'int' }],\n defaultParams: [1],\n});\n\naddFuncDef({\n name: 'offset',\n category: 'Transform',\n params: [{ name: 'amount', type: 'int' }],\n defaultParams: [10],\n});\n\naddFuncDef({\n name: 'transformNull',\n category: 'Transform',\n params: [{ name: 'amount', type: 'int' }],\n defaultParams: [0],\n});\n\naddFuncDef({\n name: 'integral',\n category: 'Transform',\n});\n\naddFuncDef({\n name: 'derivative',\n category: 'Transform',\n});\n\naddFuncDef({\n name: 'nonNegativeDerivative',\n category: 'Transform',\n params: [{ name: 'max value or 0', type: 'int', optional: true }],\n defaultParams: [''],\n});\n\naddFuncDef({\n name: 'timeShift',\n category: 'Transform',\n params: [\n {\n name: 'amount',\n type: 'select',\n options: ['1h', '6h', '12h', '1d', '2d', '7d', '14d', '30d'],\n },\n ],\n defaultParams: ['1d'],\n});\n\naddFuncDef({\n name: 'timeStack',\n category: 'Transform',\n params: [\n {\n name: 'timeShiftUnit',\n type: 'select',\n options: ['1h', '6h', '12h', '1d', '2d', '7d', '14d', '30d'],\n },\n { name: 'timeShiftStart', type: 'int' },\n { name: 'timeShiftEnd', type: 'int' },\n ],\n defaultParams: ['1d', 0, 7],\n});\n\naddFuncDef({\n name: 'summarize',\n category: 'Transform',\n params: [\n { name: 'interval', type: 'string' },\n {\n name: 'func',\n type: 'select',\n options: ['sum', 'avg', 'min', 'max', 'last'],\n },\n {\n name: 'alignToFrom',\n type: 'boolean',\n optional: true,\n options: ['false', 'true'],\n },\n ],\n defaultParams: ['1h', 'sum', 'false'],\n});\n\naddFuncDef({\n name: 'smartSummarize',\n category: 'Transform',\n params: [\n { name: 'interval', type: 'string' },\n {\n name: 'func',\n type: 'select',\n options: ['sum', 'avg', 'min', 'max', 'last'],\n },\n ],\n defaultParams: ['1h', 'sum'],\n});\n\naddFuncDef({\n name: 'absolute',\n category: 'Transform',\n});\n\naddFuncDef({\n name: 'hitcount',\n category: 'Transform',\n params: [{ name: 'interval', type: 'string' }],\n defaultParams: ['10s'],\n});\n\naddFuncDef({\n name: 'log',\n category: 'Transform',\n params: [{ name: 'base', type: 'int' }],\n defaultParams: ['10'],\n});\n\naddFuncDef({\n name: 'averageAbove',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [25],\n});\n\naddFuncDef({\n name: 'averageBelow',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [25],\n});\n\naddFuncDef({\n name: 'currentAbove',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [25],\n});\n\naddFuncDef({\n name: 'currentBelow',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [25],\n});\n\naddFuncDef({\n name: 'maximumAbove',\n category: 'Filter Series',\n params: [{ name: 'value', type: 'int' }],\n defaultParams: [0],\n});\n\naddFuncDef({\n name: 'maximumBelow',\n category: 'Filter Series',\n params: [{ name: 'value', type: 'int' }],\n defaultParams: [0],\n});\n\naddFuncDef({\n name: 'minimumAbove',\n category: 'Filter Series',\n params: [{ name: 'value', type: 'int' }],\n defaultParams: [0],\n});\n\naddFuncDef({\n name: 'minimumBelow',\n category: 'Filter Series',\n params: [{ name: 'value', type: 'int' }],\n defaultParams: [0],\n});\n\naddFuncDef({\n name: 'limit',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'mostDeviant',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [10],\n});\n\naddFuncDef({\n name: 'exclude',\n category: 'Filter Series',\n params: [{ name: 'exclude', type: 'string' }],\n defaultParams: ['exclude'],\n});\n\naddFuncDef({\n name: 'highestCurrent',\n category: 'Filter Series',\n params: [{ name: 'count', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'highestMax',\n category: 'Filter Series',\n params: [{ name: 'count', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'lowestCurrent',\n category: 'Filter Series',\n params: [{ name: 'count', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'movingAverage',\n category: 'Calculate',\n params: [\n {\n name: 'windowSize',\n type: 'int_or_interval',\n options: ['5', '7', '10', '5min', '10min', '30min', '1hour'],\n },\n ],\n defaultParams: [10],\n});\n\naddFuncDef({\n name: 'movingMedian',\n category: 'Calculate',\n params: [\n {\n name: 'windowSize',\n type: 'int_or_interval',\n options: ['5', '7', '10', '5min', '10min', '30min', '1hour'],\n },\n ],\n defaultParams: ['5'],\n});\n\naddFuncDef({\n name: 'stdev',\n category: 'Calculate',\n params: [\n { name: 'n', type: 'int' },\n { name: 'tolerance', type: 'int' },\n ],\n defaultParams: [5, 0.1],\n});\n\naddFuncDef({\n name: 'highestAverage',\n category: 'Filter Series',\n params: [{ name: 'count', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'lowestAverage',\n category: 'Filter Series',\n params: [{ name: 'count', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'removeAbovePercentile',\n category: 'Filter Data',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'removeAboveValue',\n category: 'Filter Data',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'removeBelowPercentile',\n category: 'Filter Data',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'removeBelowValue',\n category: 'Filter Data',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [5],\n});\n\naddFuncDef({\n name: 'useSeriesAbove',\n category: 'Filter Series',\n params: [\n { name: 'value', type: 'int' },\n { name: 'search', type: 'string' },\n { name: 'replace', type: 'string' },\n ],\n defaultParams: [0, 'search', 'replace'],\n});\n\n////////////////////\n// Graphite 1.0.x //\n////////////////////\n\naddFuncDef({\n name: 'aggregateLine',\n category: 'Calculate',\n params: [\n {\n name: 'func',\n type: 'select',\n options: ['sum', 'avg', 'min', 'max', 'last'],\n },\n ],\n defaultParams: ['avg'],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'averageOutsidePercentile',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [95],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'delay',\n category: 'Transform',\n params: [{ name: 'steps', type: 'int' }],\n defaultParams: [1],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'exponentialMovingAverage',\n category: 'Calculate',\n params: [\n {\n name: 'windowSize',\n type: 'int_or_interval',\n options: ['5', '7', '10', '5min', '10min', '30min', '1hour'],\n },\n ],\n defaultParams: [10],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'fallbackSeries',\n category: 'Special',\n params: [{ name: 'fallback', type: 'string' }],\n defaultParams: ['constantLine(0)'],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'grep',\n category: 'Filter Series',\n params: [{ name: 'grep', type: 'string' }],\n defaultParams: ['grep'],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'groupByNodes',\n category: 'Combine',\n params: [\n {\n name: 'function',\n type: 'string',\n options: ['sum', 'avg', 'maxSeries'],\n },\n {\n name: 'node',\n type: 'int',\n options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12],\n multiple: true,\n },\n ],\n defaultParams: ['sum', 3],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'integralByInterval',\n category: 'Transform',\n params: [\n {\n name: 'intervalUnit',\n type: 'select',\n options: ['1h', '6h', '12h', '1d', '2d', '7d', '14d', '30d'],\n },\n ],\n defaultParams: ['1d'],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'interpolate',\n category: 'Transform',\n params: [{ name: 'limit', type: 'int', optional: true }],\n defaultParams: [],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'invert',\n category: 'Transform',\n version: '1.0',\n});\n\naddFuncDef({\n name: 'isNonNull',\n category: 'Combine',\n version: '1.0',\n});\n\naddFuncDef({\n name: 'linearRegression',\n category: 'Calculate',\n params: [\n {\n name: 'startSourceAt',\n type: 'select',\n options: ['-1h', '-6h', '-12h', '-1d', '-2d', '-7d', '-14d', '-30d'],\n optional: true,\n },\n {\n name: 'endSourceAt',\n type: 'select',\n options: ['-1h', '-6h', '-12h', '-1d', '-2d', '-7d', '-14d', '-30d'],\n optional: true,\n },\n ],\n defaultParams: [],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'mapSeries',\n shortName: 'map',\n params: [{ name: 'node', type: 'int' }],\n defaultParams: [3],\n category: 'Combine',\n version: '1.0',\n});\n\naddFuncDef({\n name: 'movingMin',\n category: 'Calculate',\n params: [\n {\n name: 'windowSize',\n type: 'int_or_interval',\n options: ['5', '7', '10', '5min', '10min', '30min', '1hour'],\n },\n ],\n defaultParams: [10],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'movingMax',\n category: 'Calculate',\n params: [\n {\n name: 'windowSize',\n type: 'int_or_interval',\n options: ['5', '7', '10', '5min', '10min', '30min', '1hour'],\n },\n ],\n defaultParams: [10],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'movingSum',\n category: 'Calculate',\n params: [\n {\n name: 'windowSize',\n type: 'int_or_interval',\n options: ['5', '7', '10', '5min', '10min', '30min', '1hour'],\n },\n ],\n defaultParams: [10],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'multiplySeriesWithWildcards',\n category: 'Combine',\n params: [\n {\n name: 'position',\n type: 'int',\n options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12],\n multiple: true,\n },\n ],\n defaultParams: [2],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'offsetToZero',\n category: 'Transform',\n version: '1.0',\n});\n\naddFuncDef({\n name: 'pow',\n category: 'Transform',\n params: [{ name: 'factor', type: 'int' }],\n defaultParams: [10],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'powSeries',\n category: 'Transform',\n params: optionalSeriesRefArgs,\n defaultParams: [''],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'reduceSeries',\n shortName: 'reduce',\n params: [\n {\n name: 'function',\n type: 'string',\n options: ['asPercent', 'diffSeries', 'divideSeries'],\n },\n {\n name: 'reduceNode',\n type: 'int',\n options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13],\n },\n { name: 'reduceMatchers', type: 'string', multiple: true },\n ],\n defaultParams: ['asPercent', 2, 'used_bytes'],\n category: 'Combine',\n version: '1.0',\n});\n\naddFuncDef({\n name: 'removeBetweenPercentile',\n category: 'Filter Series',\n params: [{ name: 'n', type: 'int' }],\n defaultParams: [95],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'removeEmptySeries',\n category: 'Filter Series',\n version: '1.0',\n});\n\naddFuncDef({\n name: 'squareRoot',\n category: 'Transform',\n version: '1.0',\n});\n\naddFuncDef({\n name: 'timeSlice',\n category: 'Transform',\n params: [\n {\n name: 'startSliceAt',\n type: 'select',\n options: ['-1h', '-6h', '-12h', '-1d', '-2d', '-7d', '-14d', '-30d'],\n },\n {\n name: 'endSliceAt',\n type: 'select',\n options: ['-1h', '-6h', '-12h', '-1d', '-2d', '-7d', '-14d', '-30d'],\n optional: true,\n },\n ],\n defaultParams: ['-1h'],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'weightedAverage',\n category: 'Combine',\n params: [\n { name: 'other', type: 'value_or_series', optional: true },\n {\n name: 'node',\n type: 'int',\n options: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12],\n },\n ],\n defaultParams: ['#A', 4],\n version: '1.0',\n});\n\naddFuncDef({\n name: 'seriesByTag',\n category: 'Special',\n params: [{ name: 'tagExpression', type: 'string', multiple: true }],\n version: '1.1',\n});\n\naddFuncDef({\n name: 'groupByTags',\n category: 'Combine',\n params: [\n {\n name: 'function',\n type: 'string',\n options: ['sum', 'avg', 'maxSeries'],\n },\n { name: 'tag', type: 'string', multiple: true },\n ],\n defaultParams: ['sum', 'tag'],\n version: '1.1',\n});\n\naddFuncDef({\n name: 'aliasByTags',\n category: 'Alias',\n params: [{ name: 'tag', type: 'string', multiple: true }],\n defaultParams: ['tag'],\n version: '1.1',\n});\n\nfunction isVersionRelatedFunction(obj: { version?: string }, graphiteVersion: string) {\n return !obj.version || isVersionGtOrEq(graphiteVersion, obj.version);\n}\n\nexport class FuncInstance {\n def: FuncDef;\n params: Array;\n text: any;\n /**\n * True if this function was just added and not edited yet. It's used to focus on first\n * function param to edit it straight away after adding a function.\n */\n declare added: boolean;\n /**\n * Hidden functions are not displayed in UI but available in text editor\n * This is used for seriesByTagUsed function which when used switches\n * the editor to tag-only mode. Defined tags are provided to seriesByTagUsed\n * as parameters.\n */\n hidden?: boolean;\n\n constructor(funcDef: FuncDef, options?: { withDefaultParams: any }) {\n this.def = funcDef;\n this.params = [];\n\n if (options && options.withDefaultParams && funcDef.defaultParams) {\n this.params = funcDef.defaultParams.slice(0);\n }\n\n this.updateText();\n }\n\n render(metricExp: string, replaceVariables: InterpolateFunction): string {\n const str = this.def.name + '(';\n\n const parameters = map(this.params, (value, index) => {\n let paramType;\n\n if (index < this.def.params.length) {\n paramType = this.def.params[index].type;\n } else if (get(last(this.def.params), 'multiple')) {\n paramType = get(last(this.def.params), 'type');\n }\n\n // param types that should never be quoted\n const neverQuotedParams = ['value_or_series', 'boolean', 'int', 'float', 'node', 'int_or_infinity'];\n\n // functions that should not have param types quoted\n // https://github.com/grafana/grafana/issues/54924\n const neverQuotedFunctions = ['asPercent'];\n // params or functions that should never be quoted\n if (includes(neverQuotedParams, paramType) || includes(neverQuotedFunctions, this.def.name)) {\n return value;\n }\n\n const valueInterpolated = isString(value) ? replaceVariables(value) : value;\n\n // param types that might be quoted\n // To quote variables correctly we need to interpolate it to check if it contains a numeric or string value\n if (includes(['int_or_interval', 'node_or_tag'], paramType) && isFinite(+valueInterpolated)) {\n return toString(value);\n }\n\n return \"'\" + value + \"'\";\n });\n\n // don't send any blank parameters to graphite\n while (parameters[parameters.length - 1] === '') {\n parameters.pop();\n }\n\n if (metricExp) {\n parameters.unshift(metricExp);\n }\n\n return str + parameters.join(', ') + ')';\n }\n\n _hasMultipleParamsInString(strValue: any, index: number) {\n if (strValue.indexOf(',') === -1) {\n return false;\n }\n\n if (this.def.params[index + 1] && this.def.params[index + 1].optional) {\n return true;\n }\n\n if (index + 1 >= this.def.params.length && get(last(this.def.params), 'multiple')) {\n return true;\n }\n\n return false;\n }\n\n updateParam(strValue: any, index: any) {\n // handle optional parameters\n // if string contains ',' and next param is optional, split and update both\n if (this._hasMultipleParamsInString(strValue, index)) {\n each(strValue.split(','), (partVal, idx) => {\n this.updateParam(partVal.trim(), index + idx);\n });\n return;\n }\n\n if (strValue === '' && (index >= this.def.params.length || this.def.params[index].optional)) {\n this.params.splice(index, 1);\n } else {\n this.params[index] = strValue;\n }\n\n this.updateText();\n }\n\n updateText() {\n if (this.params.length === 0) {\n this.text = this.def.name + '()';\n return;\n }\n\n let text = this.def.name + '(';\n text += this.params.join(', ');\n text += ')';\n this.text = text;\n }\n}\n\nfunction createFuncInstance(funcDef: any, options?: { withDefaultParams: any }, idx?: any): FuncInstance {\n if (isString(funcDef)) {\n funcDef = getFuncDef(funcDef, idx);\n }\n return new FuncInstance(funcDef, options);\n}\n\nfunction getFuncDef(name: string, idx?: any): FuncDef {\n if (!(idx || index)[name]) {\n return { name: name, params: [{ name: '', type: '', multiple: true }], defaultParams: [''], unknown: true };\n }\n return (idx || index)[name];\n}\n\nfunction getFuncDefs(graphiteVersion: string, idx?: any): FuncDefs {\n const funcs: FuncDefs = {};\n forEach(idx || index, (funcDef: FuncDef) => {\n if (isVersionRelatedFunction(funcDef, graphiteVersion)) {\n funcs[funcDef.name] = assign({}, funcDef, {\n params: filter(funcDef.params, (param) => {\n return isVersionRelatedFunction(param, graphiteVersion);\n }),\n });\n }\n });\n return funcs;\n}\n\n// parse response from graphite /functions endpoint into internal format\nfunction parseFuncDefs(rawDefs: any): FuncDefs {\n const funcDefs: FuncDefs = {};\n\n forEach(rawDefs || {}, (funcDef, funcName) => {\n // skip graphite graph functions\n if (funcDef.group === 'Graph') {\n return;\n }\n\n let description = funcDef.description;\n if (description) {\n // tidy up some pydoc syntax that rst2html can't handle\n description = description\n .replace(/:py:func:`(.+)( <[^>]*>)?`/g, '``$1``')\n .replace(/.. seealso:: /g, 'See also: ')\n .replace(/.. code-block *:: *none/g, '.. code-block::');\n }\n\n const func: FuncDef = {\n name: funcDef.name,\n description,\n category: funcDef.group,\n params: [],\n defaultParams: [],\n fake: false,\n };\n\n // get rid of the first \"seriesList\" param\n if (/^seriesLists?$/.test(get(funcDef, 'params[0].type', ''))) {\n // handle functions that accept multiple seriesLists\n // we leave the param in place but mark it optional, so users can add more series if they wish\n if (funcDef.params[0].multiple) {\n funcDef.params[0].required = false;\n // otherwise chop off the first param, it'll be handled separately\n } else {\n funcDef.params.shift();\n }\n // tag function as fake\n } else {\n func.fake = true;\n }\n\n forEach(funcDef.params, (rawParam) => {\n const param: any = {\n name: rawParam.name,\n type: 'string',\n optional: !rawParam.required,\n multiple: !!rawParam.multiple,\n options: undefined,\n };\n\n if (rawParam.default !== undefined) {\n if (rawParam.default === Infinity) {\n func.defaultParams.push('inf');\n } else {\n func.defaultParams.push(toString(rawParam.default));\n }\n } else if (rawParam.suggestions) {\n func.defaultParams.push(toString(rawParam.suggestions[0]));\n } else {\n func.defaultParams.push('');\n }\n\n if (rawParam.type === 'boolean') {\n param.type = 'boolean';\n param.options = ['true', 'false'];\n } else if (rawParam.type === 'integer') {\n param.type = 'int';\n } else if (rawParam.type === 'float') {\n param.type = 'float';\n } else if (rawParam.type === 'node') {\n param.type = 'node';\n param.options = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\n } else if (rawParam.type === 'nodeOrTag') {\n param.type = 'node_or_tag';\n param.options = ['name', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'];\n } else if (rawParam.type === 'intOrInterval') {\n param.type = 'int_or_interval';\n } else if (rawParam.type === 'seriesList') {\n param.type = 'value_or_series';\n } else if (rawParam.type === 'intOrInf') {\n param.type = 'int_or_infinity';\n }\n\n if (rawParam.options) {\n param.options = map(rawParam.options, toString);\n } else if (rawParam.suggestions) {\n param.options = map(rawParam.suggestions, toString);\n }\n\n func.params.push(param);\n });\n\n funcDefs[funcName] = func;\n });\n\n return funcDefs;\n}\n\nexport default {\n createFuncInstance: createFuncInstance,\n getFuncDef: getFuncDef,\n getFuncDefs: getFuncDefs,\n parseFuncDefs: parseFuncDefs,\n};\n","type LegacyAnnotation = {\n target?: string;\n tags?: string;\n};\n\n// this becomes the target in the migrated annotations\nconst migrateLegacyAnnotation = (json: LegacyAnnotation) => {\n // return the target annotation\n if (typeof json.target === 'string' && json.target) {\n return {\n fromAnnotations: true,\n target: json.target,\n textEditor: true,\n };\n }\n\n // return the tags annotation\n return {\n queryType: 'tags',\n tags: (json.tags || '').split(' '),\n fromAnnotations: true,\n };\n};\n\n// eslint-ignore-next-line\nexport const prepareAnnotation = (json: any) => {\n // annotation attributes are either 'tags' or 'target'(a graphite query string)\n // because the new annotations will also have a target attribute, {}\n // we need to handle the ambiguous 'target' when migrating legacy annotations\n // so, to migrate legacy annotations\n // we check that target is a string\n // or\n // there is a tags attribute with no target\n const resultingTarget = json.target && typeof json.target !== 'string' ? json.target : migrateLegacyAnnotation(json);\n\n json.target = resultingTarget;\n\n return json;\n};\n","import { each, indexOf, isArray, isString, map as _map } from 'lodash';\nimport { lastValueFrom, merge, Observable, of, OperatorFunction, pipe, throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n AbstractLabelMatcher,\n AbstractLabelOperator,\n AbstractQuery,\n DataFrame,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceApi,\n DataSourceWithQueryExportSupport,\n dateMath,\n dateTime,\n MetricFindValue,\n QueryResultMetaStat,\n ScopedVars,\n TimeRange,\n TimeZone,\n toDataFrame,\n} from '@grafana/data';\nimport { getBackendSrv } from '@grafana/runtime';\nimport { isVersionGtOrEq, SemVersion } from 'app/core/utils/version';\nimport { getTemplateSrv, TemplateSrv } from 'app/features/templating/template_srv';\nimport { getRollupNotice, getRuntimeConsolidationNotice } from 'app/plugins/datasource/graphite/meta';\n\nimport { getSearchFilterScopedVar } from '../../../features/variables/utils';\n\nimport { AnnotationEditor } from './components/AnnotationsEditor';\nimport { convertToGraphiteQueryObject } from './components/helpers';\nimport gfunc, { FuncDefs, FuncInstance } from './gfunc';\nimport GraphiteQueryModel from './graphite_query';\nimport { prepareAnnotation } from './migrations';\n// Types\nimport {\n GraphiteLokiMapping,\n GraphiteMetricLokiMatcher,\n GraphiteOptions,\n GraphiteQuery,\n GraphiteQueryImportConfiguration,\n GraphiteQueryRequest,\n GraphiteQueryType,\n GraphiteType,\n MetricTankRequestMeta,\n} from './types';\nimport { reduceError } from './utils';\nimport { DEFAULT_GRAPHITE_VERSION } from './versions';\n\nconst GRAPHITE_TAG_COMPARATORS = {\n '=': AbstractLabelOperator.Equal,\n '!=': AbstractLabelOperator.NotEqual,\n '=~': AbstractLabelOperator.EqualRegEx,\n '!=~': AbstractLabelOperator.NotEqualRegEx,\n};\n\n/**\n * Converts Graphite glob-like pattern to a regular expression\n */\nfunction convertGlobToRegEx(text: string): string {\n if (text.includes('*') || text.includes('{')) {\n return '^' + text.replace(/\\*/g, '.*').replace(/\\{/g, '(').replace(/}/g, ')').replace(/,/g, '|');\n } else {\n return text;\n }\n}\n\nexport class GraphiteDatasource\n extends DataSourceApi\n implements DataSourceWithQueryExportSupport\n{\n basicAuth: string;\n url: string;\n name: string;\n graphiteVersion: any;\n supportsTags: boolean;\n isMetricTank: boolean;\n rollupIndicatorEnabled: boolean;\n cacheTimeout: any;\n withCredentials: boolean;\n funcDefs: FuncDefs | null = null;\n funcDefsPromise: Promise | null = null;\n _seriesRefLetters: string;\n requestCounter = 100;\n private readonly metricMappings: GraphiteLokiMapping[];\n\n constructor(instanceSettings: any, private readonly templateSrv: TemplateSrv = getTemplateSrv()) {\n super(instanceSettings);\n this.basicAuth = instanceSettings.basicAuth;\n this.url = instanceSettings.url;\n this.name = instanceSettings.name;\n // graphiteVersion is set when a datasource is created but it hadn't been set in the past so we're\n // still falling back to the default behavior here for backwards compatibility (see also #17429)\n this.graphiteVersion = instanceSettings.jsonData.graphiteVersion || DEFAULT_GRAPHITE_VERSION;\n this.metricMappings = instanceSettings.jsonData.importConfiguration?.loki?.mappings || [];\n this.isMetricTank = instanceSettings.jsonData.graphiteType === GraphiteType.Metrictank;\n this.supportsTags = supportsTags(this.graphiteVersion);\n this.cacheTimeout = instanceSettings.cacheTimeout;\n this.rollupIndicatorEnabled = instanceSettings.jsonData.rollupIndicatorEnabled;\n this.withCredentials = instanceSettings.withCredentials;\n this.funcDefs = null;\n this.funcDefsPromise = null;\n this._seriesRefLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n this.annotations = {\n QueryEditor: AnnotationEditor,\n prepareAnnotation,\n };\n }\n\n getQueryOptionsInfo() {\n return {\n maxDataPoints: true,\n cacheTimeout: true,\n links: [\n {\n text: 'Help',\n url: 'http://docs.grafana.org/features/datasources/graphite/#using-graphite-in-grafana',\n },\n ],\n };\n }\n\n getImportQueryConfiguration(): GraphiteQueryImportConfiguration {\n return {\n loki: {\n mappings: this.metricMappings,\n },\n };\n }\n\n async exportToAbstractQueries(queries: GraphiteQuery[]): Promise {\n return queries.map((query) => this.exportToAbstractQuery(query));\n }\n\n exportToAbstractQuery(query: GraphiteQuery): AbstractQuery {\n const graphiteQuery: GraphiteQueryModel = new GraphiteQueryModel(\n this,\n {\n ...query,\n target: query.target || '',\n textEditor: false,\n },\n getTemplateSrv()\n );\n graphiteQuery.parseTarget();\n\n let labels: AbstractLabelMatcher[] = [];\n const config = this.getImportQueryConfiguration().loki;\n\n if (graphiteQuery.seriesByTagUsed) {\n graphiteQuery.tags.forEach((tag) => {\n labels.push({\n name: tag.key,\n operator: GRAPHITE_TAG_COMPARATORS[tag.operator],\n value: tag.value,\n });\n });\n } else {\n const targetNodes = graphiteQuery.segments.map((segment) => segment.value);\n let mappings = config.mappings.filter((mapping) => mapping.matchers.length <= targetNodes.length);\n\n for (let mapping of mappings) {\n const matchers = mapping.matchers.concat();\n\n matchers.every((matcher: GraphiteMetricLokiMatcher, index: number) => {\n if (matcher.labelName) {\n let value = (targetNodes[index] as string)!;\n\n if (value === '*') {\n return true;\n }\n\n const converted = convertGlobToRegEx(value);\n labels.push({\n name: matcher.labelName,\n operator: converted !== value ? AbstractLabelOperator.EqualRegEx : AbstractLabelOperator.Equal,\n value: converted,\n });\n return true;\n }\n return targetNodes[index] === matcher.value || matcher.value === '*';\n });\n }\n }\n\n return {\n refId: query.refId,\n labelMatchers: labels,\n };\n }\n\n query(options: DataQueryRequest): Observable {\n if (options.targets.some((target: GraphiteQuery) => target.fromAnnotations)) {\n const streams: Array> = [];\n\n for (const target of options.targets) {\n streams.push(\n new Observable((subscriber) => {\n this.annotationEvents(options.range, target)\n .then((events) => subscriber.next({ data: [toDataFrame(events)] }))\n .catch((ex) => subscriber.error(new Error(ex)))\n .finally(() => subscriber.complete());\n })\n );\n }\n\n return merge(...streams);\n }\n\n // handle the queries here\n const graphOptions = {\n from: this.translateTime(options.range.from, false, options.timezone),\n until: this.translateTime(options.range.to, true, options.timezone),\n targets: options.targets,\n format: (options as GraphiteQueryRequest).format,\n cacheTimeout: options.cacheTimeout || this.cacheTimeout,\n maxDataPoints: options.maxDataPoints,\n };\n\n const params = this.buildGraphiteParams(graphOptions, options.scopedVars);\n if (params.length === 0) {\n return of({ data: [] });\n }\n\n if (this.isMetricTank) {\n params.push('meta=true');\n }\n\n const httpOptions: any = {\n method: 'POST',\n url: '/render',\n data: params.join('&'),\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n };\n\n this.addTracingHeaders(httpOptions, options);\n\n if (options.panelId) {\n httpOptions.requestId = this.name + '.panelId.' + options.panelId;\n }\n\n return this.doGraphiteRequest(httpOptions).pipe(map(this.convertResponseToDataFrames));\n }\n\n addTracingHeaders(httpOptions: { headers: any }, options: { dashboardId?: number; panelId?: number }) {\n const proxyMode = !this.url.match(/^http/);\n if (proxyMode) {\n if (options.dashboardId) {\n httpOptions.headers['X-Dashboard-Id'] = options.dashboardId;\n }\n if (options.panelId) {\n httpOptions.headers['X-Panel-Id'] = options.panelId;\n }\n }\n }\n\n convertResponseToDataFrames = (result: any): DataQueryResponse => {\n const data: DataFrame[] = [];\n if (!result || !result.data) {\n return { data };\n }\n\n // Series are either at the root or under a node called 'series'\n const series = result.data.series || result.data;\n\n if (!isArray(series)) {\n throw { message: 'Missing series in result', data: result };\n }\n\n for (let i = 0; i < series.length; i++) {\n const s = series[i];\n\n // Disables Grafana own series naming\n s.title = s.target;\n\n for (let y = 0; y < s.datapoints.length; y++) {\n s.datapoints[y][1] *= 1000;\n }\n\n const frame = toDataFrame(s);\n\n // Metrictank metadata\n if (s.meta) {\n frame.meta = {\n custom: {\n requestMetaList: result.data.meta, // info for the whole request\n seriesMetaList: s.meta, // Array of metadata\n },\n };\n\n if (this.rollupIndicatorEnabled) {\n const rollupNotice = getRollupNotice(s.meta);\n const runtimeNotice = getRuntimeConsolidationNotice(s.meta);\n\n if (rollupNotice) {\n frame.meta.notices = [rollupNotice];\n } else if (runtimeNotice) {\n frame.meta.notices = [runtimeNotice];\n }\n }\n\n // only add the request stats to the first frame\n if (i === 0 && result.data.meta.stats) {\n frame.meta.stats = this.getRequestStats(result.data.meta);\n }\n }\n\n data.push(frame);\n }\n\n return { data };\n };\n\n getRequestStats(meta: MetricTankRequestMeta): QueryResultMetaStat[] {\n const stats: QueryResultMetaStat[] = [];\n\n for (const key in meta.stats) {\n let unit: string | undefined = undefined;\n\n if (key.endsWith('.ms')) {\n unit = 'ms';\n }\n\n stats.push({ displayName: key, value: meta.stats[key], unit });\n }\n\n return stats;\n }\n\n parseTags(tagString: string) {\n let tags: string[] = [];\n tags = tagString.split(',');\n if (tags.length === 1) {\n tags = tagString.split(' ');\n if (tags[0] === '') {\n tags = [];\n }\n }\n return tags;\n }\n\n interpolateVariablesInQueries(queries: GraphiteQuery[], scopedVars: ScopedVars): GraphiteQuery[] {\n let expandedQueries = queries;\n if (queries && queries.length > 0) {\n expandedQueries = queries.map((query) => {\n const expandedQuery = {\n ...query,\n datasource: this.getRef(),\n target: this.templateSrv.replace(query.target ?? '', scopedVars),\n };\n return expandedQuery;\n });\n }\n return expandedQueries;\n }\n\n annotationEvents(range: any, target: any) {\n if (target.target) {\n // Graphite query as target as annotation\n const targetAnnotation = this.templateSrv.replace(target.target, {}, 'glob');\n const graphiteQuery = {\n range: range,\n targets: [{ target: targetAnnotation }],\n format: 'json',\n maxDataPoints: 100,\n } as unknown as DataQueryRequest;\n\n return lastValueFrom(\n this.query(graphiteQuery).pipe(\n map((result: any) => {\n const list = [];\n\n for (let i = 0; i < result.data.length; i++) {\n const target = result.data[i];\n\n for (let y = 0; y < target.length; y++) {\n const time = target.fields[0].values.get(y);\n const value = target.fields[1].values.get(y);\n\n if (!value) {\n continue;\n }\n\n list.push({\n annotation: target,\n time,\n title: target.name,\n });\n }\n }\n\n return list;\n })\n )\n );\n } else {\n // Graphite event/tag as annotation\n const tags = this.templateSrv.replace(target.tags?.join(' '));\n return this.events({ range: range, tags: tags }).then((results: any) => {\n const list = [];\n if (!isArray(results.data)) {\n console.error(`Unable to get annotations from ${results.url}.`);\n return [];\n }\n for (let i = 0; i < results.data.length; i++) {\n const e = results.data[i];\n\n let tags = e.tags;\n if (isString(e.tags)) {\n tags = this.parseTags(e.tags);\n }\n\n list.push({\n annotation: target,\n time: e.when * 1000,\n title: e.what,\n tags: tags,\n text: e.data,\n });\n }\n\n return list;\n });\n }\n }\n\n events(options: { range: TimeRange; tags: any; timezone?: any }) {\n try {\n let tags = '';\n if (options.tags) {\n tags = '&tags=' + options.tags;\n }\n return lastValueFrom(\n this.doGraphiteRequest({\n method: 'GET',\n url:\n '/events/get_data?from=' +\n this.translateTime(options.range.raw.from, false, options.timezone) +\n '&until=' +\n this.translateTime(options.range.raw.to, true, options.timezone) +\n tags,\n })\n );\n } catch (err) {\n return Promise.reject(err);\n }\n }\n\n targetContainsTemplate(target: GraphiteQuery) {\n return this.templateSrv.containsTemplate(target.target ?? '');\n }\n\n translateTime(date: any, roundUp: any, timezone: TimeZone) {\n if (isString(date)) {\n if (date === 'now') {\n return 'now';\n } else if (date.indexOf('now-') >= 0 && date.indexOf('/') === -1) {\n date = date.substring(3);\n date = date.replace('m', 'min');\n date = date.replace('M', 'mon');\n return date;\n }\n date = dateMath.parse(date, roundUp, timezone);\n }\n\n // graphite' s from filter is exclusive\n // here we step back one minute in order\n // to guarantee that we get all the data that\n // exists for the specified range\n if (roundUp) {\n if (date.get('s')) {\n date.add(1, 's');\n }\n } else if (roundUp === false) {\n if (date.get('s')) {\n date.subtract(1, 's');\n }\n }\n\n return date.unix();\n }\n\n metricFindQuery(findQuery: string | GraphiteQuery, optionalOptions?: any): Promise {\n const options: any = optionalOptions || {};\n\n const queryObject = convertToGraphiteQueryObject(findQuery);\n if (queryObject.queryType === GraphiteQueryType.Value || queryObject.queryType === GraphiteQueryType.MetricName) {\n return this.requestMetricRender(queryObject, options, queryObject.queryType);\n }\n\n let query = queryObject.target ?? '';\n\n // First attempt to check for tag-related functions (using empty wildcard for interpolation)\n let interpolatedQuery = this.templateSrv.replace(\n query,\n getSearchFilterScopedVar({ query, wildcardChar: '', options: optionalOptions })\n );\n\n // special handling for tag_values([,]*), this is used for template variables\n let allParams = interpolatedQuery.match(/^tag_values\\((.*)\\)$/);\n let expressions = allParams ? allParams[1].split(',').filter((p) => !!p) : undefined;\n if (expressions) {\n options.limit = 10000;\n return this.getTagValuesAutoComplete(expressions.slice(1), expressions[0], undefined, options);\n }\n\n // special handling for tags([,]*), this is used for template variables\n allParams = interpolatedQuery.match(/^tags\\((.*)\\)$/);\n expressions = allParams ? allParams[1].split(',').filter((p) => !!p) : undefined;\n if (expressions) {\n options.limit = 10000;\n return this.getTagsAutoComplete(expressions, undefined, options);\n }\n\n // If no tag-related query was found, perform metric-based search (using * as the wildcard for interpolation)\n let useExpand = query.match(/^expand\\((.*)\\)$/);\n query = useExpand ? useExpand[1] : query;\n\n interpolatedQuery = this.templateSrv.replace(\n query,\n getSearchFilterScopedVar({ query, wildcardChar: '*', options: optionalOptions })\n );\n\n let range;\n if (options.range) {\n range = {\n from: this.translateTime(options.range.from, false, options.timezone),\n until: this.translateTime(options.range.to, true, options.timezone),\n };\n }\n\n if (useExpand) {\n return this.requestMetricExpand(interpolatedQuery, options.requestId, range);\n } else {\n return this.requestMetricFind(interpolatedQuery, options.requestId, range);\n }\n }\n\n /**\n * Search for metrics matching giving pattern using /metrics/render endpoint.\n * It will return all possible values or names and parse them based on queryType.\n * For example:\n *\n * queryType: GraphiteQueryType.Value\n * query: groupByNode(movingAverage(apps.country.IE.counters.requests.count, 10), 2, 'sum')\n * result: 239.4, 233.4, 230.8, 230.4, 233.9, 238, 239.8, 236.8, 235.8\n *\n * queryType: GraphiteQueryType.MetricName\n * query: highestAverage(carbon.agents.*.*, 5)\n * result: carbon.agents.aa6338c54341-a.memUsage, carbon.agents.aa6338c54341-a.committedPoints, carbon.agents.aa6338c54341-a.updateOperations, carbon.agents.aa6338c54341-a.metricsReceived, carbon.agents.aa6338c54341-a.activeConnections\n */\n private async requestMetricRender(\n queryObject: GraphiteQuery,\n options: any,\n queryType: GraphiteQueryType\n ): Promise {\n const requestId: string = options.requestId ?? `Q${this.requestCounter++}`;\n const range: TimeRange = options.range ?? {\n from: dateTime().subtract(6, 'hour'),\n to: dateTime(),\n raw: {\n from: 'now - 6h',\n to: 'now',\n },\n };\n const queryReq: DataQueryRequest = {\n app: 'graphite-variable-editor',\n interval: '1s',\n intervalMs: 10000,\n startTime: Date.now(),\n targets: [{ ...queryObject }],\n timezone: 'browser',\n scopedVars: {},\n requestId,\n range,\n };\n const data: DataQueryResponse = await lastValueFrom(this.query(queryReq));\n\n let result: MetricFindValue[];\n\n if (queryType === GraphiteQueryType.Value) {\n result = data.data[0].fields[1].values\n .filter((f?: number) => !!f)\n .map((v: number) => ({\n text: v.toString(),\n value: v,\n expandable: false,\n }));\n } else if (queryType === GraphiteQueryType.MetricName) {\n result = data.data.map((series) => ({\n text: series.name,\n value: series.name,\n expandable: false,\n }));\n } else {\n result = [];\n }\n\n return Promise.resolve(result);\n }\n\n /**\n * Search for metrics matching giving pattern using /metrics/find endpoint. It will\n * return all possible values at the last level of the query, for example:\n *\n * metrics: prod.servers.001.cpu, prod.servers.002.cpu\n * query: *.servers.*\n * result: 001, 002\n *\n * For more complex searches use requestMetricExpand\n */\n private requestMetricFind(\n query: string,\n requestId: string,\n range?: { from: any; until: any }\n ): Promise {\n const httpOptions: any = {\n method: 'POST',\n url: '/metrics/find',\n params: {},\n data: `query=${query}`,\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n // for cancellations\n requestId: requestId,\n };\n\n if (range) {\n httpOptions.params.from = range.from;\n httpOptions.params.until = range.until;\n }\n\n return lastValueFrom(\n this.doGraphiteRequest(httpOptions).pipe(\n map((results: any) => {\n return _map(results.data, (metric) => {\n return {\n text: metric.text,\n expandable: metric.expandable ? true : false,\n };\n });\n })\n )\n );\n }\n\n /**\n * Search for metrics matching giving pattern using /metrics/expand endpoint.\n * The result will contain all metrics (with full name) matching provided query.\n * It's a more flexible version of /metrics/find endpoint (@see requestMetricFind)\n */\n private requestMetricExpand(\n query: string,\n requestId: string,\n range?: { from: any; until: any }\n ): Promise {\n const httpOptions: any = {\n method: 'GET',\n url: '/metrics/expand',\n params: { query },\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n },\n // for cancellations\n requestId,\n };\n\n if (range) {\n httpOptions.params.from = range.from;\n httpOptions.params.until = range.until;\n }\n\n return lastValueFrom(\n this.doGraphiteRequest(httpOptions).pipe(\n map((results: any) => {\n return _map(results.data.results, (metric) => {\n return {\n text: metric,\n expandable: false,\n };\n });\n })\n )\n );\n }\n\n getTags(optionalOptions: any) {\n const options = optionalOptions || {};\n\n const httpOptions: any = {\n method: 'GET',\n url: '/tags',\n // for cancellations\n requestId: options.requestId,\n };\n\n if (options.range) {\n httpOptions.params.from = this.translateTime(options.range.from, false, options.timezone);\n httpOptions.params.until = this.translateTime(options.range.to, true, options.timezone);\n }\n\n return lastValueFrom(\n this.doGraphiteRequest(httpOptions).pipe(\n map((results: any) => {\n return _map(results.data, (tag) => {\n return {\n text: tag.tag,\n id: tag.id,\n };\n });\n })\n )\n );\n }\n\n getTagValues(options: any = {}) {\n const httpOptions: any = {\n method: 'GET',\n url: '/tags/' + this.templateSrv.replace(options.key),\n // for cancellations\n requestId: options.requestId,\n };\n\n if (options.range) {\n httpOptions.params.from = this.translateTime(options.range.from, false, options.timezone);\n httpOptions.params.until = this.translateTime(options.range.to, true, options.timezone);\n }\n\n return lastValueFrom(\n this.doGraphiteRequest(httpOptions).pipe(\n map((results: any) => {\n if (results.data && results.data.values) {\n return _map(results.data.values, (value) => {\n return {\n text: value.value,\n id: value.id,\n };\n });\n } else {\n return [];\n }\n })\n )\n );\n }\n\n getTagsAutoComplete(expressions: any[], tagPrefix: any, optionalOptions?: any) {\n const options = optionalOptions || {};\n\n const httpOptions: any = {\n method: 'GET',\n url: '/tags/autoComplete/tags',\n params: {\n expr: _map(expressions, (expression) => this.templateSrv.replace((expression || '').trim())),\n },\n // for cancellations\n requestId: options.requestId,\n };\n\n if (tagPrefix) {\n httpOptions.params.tagPrefix = tagPrefix;\n }\n if (options.limit) {\n httpOptions.params.limit = options.limit;\n }\n if (options.range) {\n httpOptions.params.from = this.translateTime(options.range.from, false, options.timezone);\n httpOptions.params.until = this.translateTime(options.range.to, true, options.timezone);\n }\n return lastValueFrom(this.doGraphiteRequest(httpOptions).pipe(mapToTags()));\n }\n\n getTagValuesAutoComplete(expressions: any[], tag: any, valuePrefix: any, optionalOptions: any) {\n const options = optionalOptions || {};\n\n const httpOptions: any = {\n method: 'GET',\n url: '/tags/autoComplete/values',\n params: {\n expr: _map(expressions, (expression) => this.templateSrv.replace((expression || '').trim())),\n tag: this.templateSrv.replace((tag || '').trim()),\n },\n // for cancellations\n requestId: options.requestId,\n };\n\n if (valuePrefix) {\n httpOptions.params.valuePrefix = valuePrefix;\n }\n if (options.limit) {\n httpOptions.params.limit = options.limit;\n }\n if (options.range) {\n httpOptions.params.from = this.translateTime(options.range.from, false, options.timezone);\n httpOptions.params.until = this.translateTime(options.range.to, true, options.timezone);\n }\n return lastValueFrom(this.doGraphiteRequest(httpOptions).pipe(mapToTags()));\n }\n\n getVersion(optionalOptions: any) {\n const options = optionalOptions || {};\n\n const httpOptions = {\n method: 'GET',\n url: '/version',\n requestId: options.requestId,\n };\n\n return lastValueFrom(\n this.doGraphiteRequest(httpOptions).pipe(\n map((results: any) => {\n if (results.data) {\n const semver = new SemVersion(results.data);\n return semver.isValid() ? results.data : '';\n }\n return '';\n }),\n catchError(() => {\n return of('');\n })\n )\n );\n }\n\n createFuncInstance(funcDef: any, options?: any): FuncInstance {\n return gfunc.createFuncInstance(funcDef, options, this.funcDefs);\n }\n\n getFuncDef(name: string) {\n return gfunc.getFuncDef(name, this.funcDefs);\n }\n\n waitForFuncDefsLoaded() {\n return this.getFuncDefs();\n }\n\n getFuncDefs() {\n if (this.funcDefsPromise !== null) {\n return this.funcDefsPromise;\n }\n\n if (!supportsFunctionIndex(this.graphiteVersion)) {\n this.funcDefs = gfunc.getFuncDefs(this.graphiteVersion);\n this.funcDefsPromise = Promise.resolve(this.funcDefs);\n return this.funcDefsPromise;\n }\n\n const httpOptions = {\n method: 'GET',\n url: '/functions',\n // add responseType because if this is not defined,\n // backend_srv defaults to json\n responseType: 'text',\n };\n\n return lastValueFrom(\n this.doGraphiteRequest(httpOptions).pipe(\n map((results: any) => {\n // Fix for a Graphite bug: https://github.com/graphite-project/graphite-web/issues/2609\n // There is a fix for it https://github.com/graphite-project/graphite-web/pull/2612 but\n // it was merged to master in July 2020 but it has never been released (the last Graphite\n // release was 1.1.7 - March 2020). The bug was introduced in Graphite 1.1.7, in versions\n // 1.1.0 - 1.1.6 /functions endpoint returns a valid JSON\n const fixedData = JSON.parse(results.data.replace(/\"default\": ?Infinity/g, '\"default\": 1e9999'));\n this.funcDefs = gfunc.parseFuncDefs(fixedData);\n return this.funcDefs;\n }),\n catchError((error: any) => {\n console.error('Fetching graphite functions error', error);\n this.funcDefs = gfunc.getFuncDefs(this.graphiteVersion);\n return of(this.funcDefs);\n })\n )\n );\n }\n\n testDatasource() {\n const query: DataQueryRequest = {\n app: 'graphite',\n interval: '10ms',\n intervalMs: 10,\n requestId: 'reqId',\n scopedVars: {},\n startTime: 0,\n timezone: 'browser',\n panelId: 3,\n rangeRaw: { from: 'now-1h', to: 'now' },\n range: {\n from: dateTime('now-1h'),\n to: dateTime('now'),\n raw: { from: 'now-1h', to: 'now' },\n },\n targets: [{ refId: 'A', target: 'constantLine(100)' }],\n maxDataPoints: 300,\n };\n\n return lastValueFrom(this.query(query)).then(() => ({ status: 'success', message: 'Data source is working' }));\n }\n\n doGraphiteRequest(options: {\n method?: string;\n url: any;\n requestId?: any;\n withCredentials?: any;\n headers?: any;\n inspect?: any;\n }) {\n if (this.basicAuth || this.withCredentials) {\n options.withCredentials = true;\n }\n if (this.basicAuth) {\n options.headers = options.headers || {};\n options.headers.Authorization = this.basicAuth;\n }\n\n options.url = this.url + options.url;\n options.inspect = { type: 'graphite' };\n\n return getBackendSrv()\n .fetch(options)\n .pipe(\n catchError((err: any) => {\n return throwError(reduceError(err));\n })\n );\n }\n\n buildGraphiteParams(options: any, scopedVars?: ScopedVars): string[] {\n const graphiteOptions = ['from', 'until', 'rawData', 'format', 'maxDataPoints', 'cacheTimeout'];\n const cleanOptions = [],\n targets: any = {};\n let target, targetValue, i;\n const regex = /\\#([A-Z])/g;\n const intervalFormatFixRegex = /'(\\d+)m'/gi;\n let hasTargets = false;\n\n options['format'] = 'json';\n\n function fixIntervalFormat(match: any) {\n return match.replace('m', 'min').replace('M', 'mon');\n }\n\n for (i = 0; i < options.targets.length; i++) {\n target = options.targets[i];\n if (!target.target) {\n continue;\n }\n\n if (!target.refId) {\n target.refId = this._seriesRefLetters[i];\n }\n\n targetValue = this.templateSrv.replace(target.target, scopedVars);\n targetValue = targetValue.replace(intervalFormatFixRegex, fixIntervalFormat);\n targets[target.refId] = targetValue;\n }\n\n function nestedSeriesRegexReplacer(match: any, g1: string | number) {\n return targets[g1] || match;\n }\n\n for (i = 0; i < options.targets.length; i++) {\n target = options.targets[i];\n if (!target.target) {\n continue;\n }\n\n targetValue = targets[target.refId];\n targetValue = targetValue.replace(regex, nestedSeriesRegexReplacer);\n targets[target.refId] = targetValue;\n\n if (!target.hide) {\n hasTargets = true;\n cleanOptions.push('target=' + encodeURIComponent(targetValue));\n }\n }\n\n each(options, (value, key) => {\n if (indexOf(graphiteOptions, key) === -1) {\n return;\n }\n if (value) {\n cleanOptions.push(key + '=' + encodeURIComponent(value));\n }\n });\n\n if (!hasTargets) {\n return [];\n }\n\n return cleanOptions;\n }\n}\n\nfunction supportsTags(version: string): boolean {\n return isVersionGtOrEq(version, '1.1');\n}\n\nfunction supportsFunctionIndex(version: string): boolean {\n return isVersionGtOrEq(version, '1.1');\n}\n\nfunction mapToTags(): OperatorFunction> {\n return pipe(\n map((results: any) => {\n if (results.data) {\n return _map(results.data, (value) => {\n return { text: value };\n });\n } else {\n return [];\n }\n })\n );\n}\n","import { DataSourcePlugin } from '@grafana/data';\n\nimport { GraphiteQueryEditor } from './components/GraphiteQueryEditor';\nimport { GraphiteVariableEditor } from './components/GraphiteVariableEditor';\nimport { MetricTankMetaInspector } from './components/MetricTankMetaInspector';\nimport { ConfigEditor } from './configuration/ConfigEditor';\nimport { GraphiteDatasource } from './datasource';\n\nexport const plugin = new DataSourcePlugin(GraphiteDatasource)\n .setQueryEditor(GraphiteQueryEditor)\n .setConfigEditor(ConfigEditor)\n .setVariableQueryEditor(GraphiteVariableEditor)\n .setMetadataInspector(MetricTankMetaInspector);\n"],"names":["init","timeRangeChanged","queriesChanged","queryChanged","segmentValueChanged","addNewTag","tagChanged","unpause","addFunction","removeFunction","moveFunction","updateFunctionParam","updateQuery","runQuery","toggleEditorMode","actions","unicodeLetterTable","identifierStartTable","i","identifierPartTable","Lexer","expression","list","token","match","id","index","type","char","isUnicodeLetter","code","isHexDigit","str","readUnicodeEscapeSequence","ch1","ch2","ch3","ch4","getIdentifierStart","chr","getIdentifierPart","value","length","bad","isDecimalDigit","isOctalDigit","isIdentifierStart","ch","quote","jump","reduceError","error","newMessage","isGraphiteParserError","e","Parser","curlySegment","curly","parts","node","segment","param","text","currentToken","token1","token2","GraphiteQuery","datasource","target","templateSrv","scopedVars","astNode","err","arr","result","func","innerFunc","newFunc","offset","arrayMove","targets","wrapFunction","metricPath","targetsByRefId","nestedSeriesRefRegex","targetWithNestedQueries","t","regex","refMatches","updated","g1","tagPattern","matches","tag","seriesByTagFuncIndex","newTagParam","renderTagString","tagIndex","excludeIndex","tagExpr","GRAPHITE_TAG_OPERATORS","TAG_PREFIX","parseTarget","state","buildSegments","modifyLastSegment","checkOtherSegmentsIndex","checkOtherSegments","addSelectMetricSegment","fromIndex","currentFromIndex","path","segments","handleMetricsAutoCompleteError","spliceSegments","emptySegments","addSeriesByTagFunc","tagParam","handleTargetChanged","smartlyHandleNewAliasByNode","pause","removeTagPrefix","oldTarget","query","newTarget","handleTagsAutoCompleteError","reducer","action","deps","segmentOrString","segmentIndex","newTag","createStore","onChange","DispatchContext","GraphiteStateContext","useDispatch","useGraphiteState","GraphiteQueryEditorContext","onRunQuery","queries","range","children","setState","needsRefresh","setNeedsRefresh","dispatch","previousRange","usePrevious","GraphiteQueryType","GraphiteType","mapStringsToSelectables","values","mapSegmentsToSelectables","mapFuncDefsToSelectables","funcDefs","categories","funcDef","createEditableParam","paramDef","additional","option","mapFuncInstanceToParams","params","convertToGraphiteQueryObject","AddGraphiteFunction","setValue","styles","getStyles","options","Segment","Button","theme","FunctionDescription","props","FunctionHelpButton","tooltip","Tooltip","Icon","FunctionEditorControls","onMoveLeft","onMoveRight","onRemove","FunctionEditor","renderContent","updatePopperPosition","TooltipContent","FunctionParamEditor","editableParam","onExpandedChange","autofocus","SegmentInput","GraphiteFunctionEditor","mouseOver","setIsMouseOver","expanded","setIsExpanded","p","InlineLabel","FunctionsSection","functions","SegmentSection","GraphiteTextEditor","rawQuery","QueryField","MAX_SUGGESTIONS","getAltSegments","prefix","altSegments","variable","removeTaggedEntry","addAltTagSegments","getAltSegmentsSelectables","getTagOperatorsSelectables","getTags","tagPrefix","tagExpressions","altTags","getTagsSelectables","getTagsAsSegments","tagsAsSegments","val","getTagsAsSegmentsSelectables","getTagValues","valuePrefix","tagKey","altValues","getTagValuesSelectables","tagSegments","s","MetricSegment","metricIndex","loadOptions","debouncedLoadOptions","onSegmentChanged","selectableValue","onSegmentChangedDebounced","SegmentAsync","MetricsSection","PlayButton","onClick","TagEditor","getTagsOptions","inputValue","debouncedGetTagsOptions","getTagValueOptions","debouncedGetTagValueOptions","TagsSection","tags","getTagsAsSegmentsOptions","debouncedGetTagsAsSegments","SeriesSection","sectionContent","GraphiteQueryEditor","GraphiteQueryEditorContent","GRAPHITE_QUERY_VARIABLE_TYPE_OPTIONS","GraphiteVariableEditor","InlineField","Select","Input","toInteger","toBooleanOrTimestamp","getRollupNotice","metaList","meta","archiveIndex","intervalString","parseSchemaRetentions","getRuntimeConsolidationNotice","runtimeNr","spec","vals","MetricTankMetaInspector","key","buckets","rollupNotice","runtimeNotice","normFunc","totalSeconds","acc","bucket","lengthPercent","isActive","data","seriesMetas","series","metaItem","stylesFactory","config","borderColor","background","headerBg","GRAPHITE_VERSIONS","DEFAULT_GRAPHITE_VERSION","MappingsHelp","Alert","MappingsConfiguration","mappings","setMappings","mapping","InlineFieldRow","changeEvent","newMappings","_","fromString","metricNode","matcher","Switch","SHOW_MAPPINGS_HELP_KEY","graphiteVersions","version","graphiteTypes","label","ConfigEditor","onOptionsChange","currentVersion","item","DataSourceHttpSettings","SecureSocksProxySettings","versionPattern","SemVersion","compared","isVersionGtOrEq","a","b","AnnotationEditor","setTarget","setTags","updateValue","onTagsChange","tagsInput","TagsInput","addFuncDef","optionalSeriesRefArgs","isVersionRelatedFunction","obj","graphiteVersion","FuncInstance","metricExp","replaceVariables","parameters","paramType","neverQuotedParams","neverQuotedFunctions","valueInterpolated","strValue","partVal","idx","createFuncInstance","getFuncDef","name","getFuncDefs","funcs","parseFuncDefs","rawDefs","funcName","description","rawParam","migrateLegacyAnnotation","json","prepareAnnotation","resultingTarget","GRAPHITE_TAG_COMPARATORS","convertGlobToRegEx","GraphiteDatasource","instanceSettings","y","frame","supportsTags","graphiteQuery","labels","targetNodes","converted","streams","Observable","subscriber","events","ex","merge","graphOptions","of","httpOptions","map","stats","unit","tagString","expandedQueries","targetAnnotation","lastValueFrom","time","results","date","roundUp","timezone","findQuery","optionalOptions","queryObject","interpolatedQuery","allParams","expressions","useExpand","queryType","requestId","queryReq","f","v","metric","mapToTags","catchError","gfunc","supportsFunctionIndex","fixedData","throwError","graphiteOptions","cleanOptions","targetValue","intervalFormatFixRegex","hasTargets","fixIntervalFormat","nestedSeriesRegexReplacer","pipe"],"sourceRoot":""}