D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
share
/
grafana
/
public
/
app
/
plugins
/
datasource
/
cloudwatch
/
language
/
dynamic-labels
/
Filename :
language.ts
back
Copy
import type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api'; import { config } from '@grafana/runtime'; // Dynamic labels: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph-dynamic-labels.html export const DYNAMIC_LABEL_PATTERNS = [ '${DATAPOINT_COUNT}', '${FIRST}', '${FIRST_LAST_RANGE}', '${FIRST_LAST_TIME_RANGE}', '${FIRST_TIME}', '${FIRST_TIME_RELATIVE}', '${LABEL}', '${LAST}', '${LAST_TIME}', '${LAST_TIME_RELATIVE}', '${MAX}', '${MAX_TIME}', '${MAX_TIME_RELATIVE}', '${MIN}', '${MIN_MAX_RANGE}', '${MIN_MAX_TIME_RANGE}', '${MIN_TIME}', '${MIN_TIME_RELATIVE}', "${PROP('AccountId')}", "${PROP('MetricName')}", "${PROP('Namespace')}", "${PROP('Period')}", "${PROP('Region')}", "${PROP('Stat')}", '${SUM}', ...(config.featureToggles.cloudWatchCrossAccountQuerying ? ["${PROP('AccountLabel')}"] : []), ]; export const language: monacoType.languages.IMonarchLanguage = { id: 'dynamicLabels', ignoreCase: false, tokenizer: { root: [ { include: '@whitespace' }, { include: '@builtInFunctions' }, { include: '@string' }, [/\$\{PROP\('Dim.[a-zA-Z0-9-_]?.*'\)\}+/, 'predefined'], //custom handling for dimension patterns ], builtInFunctions: [[DYNAMIC_LABEL_PATTERNS.map(escapeRegExp).join('|'), 'predefined']], whitespace: [[/\s+/, 'white']], string: [], }, }; export const conf: monacoType.languages.LanguageConfiguration = {}; function escapeRegExp(string: string) { return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string }