@intentius/chant-lexicon-grafana 0.96.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/dist/build.d.ts +116 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/catalog.d.ts +26 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/codegen/docs-cli.d.ts +3 -0
- package/dist/codegen/docs-cli.d.ts.map +1 -0
- package/dist/codegen/docs.d.ts +8 -0
- package/dist/codegen/docs.d.ts.map +1 -0
- package/dist/codegen/generate-cli.d.ts +3 -0
- package/dist/codegen/generate-cli.d.ts.map +1 -0
- package/dist/codegen/generate.d.ts +21 -0
- package/dist/codegen/generate.d.ts.map +1 -0
- package/dist/codegen/package.d.ts +7 -0
- package/dist/codegen/package.d.ts.map +1 -0
- package/dist/codegen/schema-types.d.ts +41 -0
- package/dist/codegen/schema-types.d.ts.map +1 -0
- package/dist/composites/agent-dashboard.d.ts +70 -0
- package/dist/composites/agent-dashboard.d.ts.map +1 -0
- package/dist/composites/catalog.d.ts +3 -0
- package/dist/composites/catalog.d.ts.map +1 -0
- package/dist/composites/index.d.ts +12 -0
- package/dist/composites/index.d.ts.map +1 -0
- package/dist/composites/red-dashboard.d.ts +58 -0
- package/dist/composites/red-dashboard.d.ts.map +1 -0
- package/dist/composites/shared.d.ts +68 -0
- package/dist/composites/shared.d.ts.map +1 -0
- package/dist/composites/slo-dashboard.d.ts +62 -0
- package/dist/composites/slo-dashboard.d.ts.map +1 -0
- package/dist/dashboard.d.ts +84 -0
- package/dist/dashboard.d.ts.map +1 -0
- package/dist/datasource.d.ts +67 -0
- package/dist/datasource.d.ts.map +1 -0
- package/dist/detect.d.ts +20 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/integrity.json +22 -0
- package/dist/lint/audit-catalog.d.ts +13 -0
- package/dist/lint/audit-catalog.d.ts.map +1 -0
- package/dist/lint/post-synth/graf101.d.ts +8 -0
- package/dist/lint/post-synth/graf101.d.ts.map +1 -0
- package/dist/lint/post-synth/graf102.d.ts +8 -0
- package/dist/lint/post-synth/graf102.d.ts.map +1 -0
- package/dist/lint/post-synth/graf103.d.ts +8 -0
- package/dist/lint/post-synth/graf103.d.ts.map +1 -0
- package/dist/lint/post-synth/graf104.d.ts +8 -0
- package/dist/lint/post-synth/graf104.d.ts.map +1 -0
- package/dist/lint/post-synth/graf105.d.ts +8 -0
- package/dist/lint/post-synth/graf105.d.ts.map +1 -0
- package/dist/lint/post-synth/graf106.d.ts +8 -0
- package/dist/lint/post-synth/graf106.d.ts.map +1 -0
- package/dist/lint/post-synth/graf107.d.ts +8 -0
- package/dist/lint/post-synth/graf107.d.ts.map +1 -0
- package/dist/lint/post-synth/grafana-helpers.d.ts +16 -0
- package/dist/lint/post-synth/grafana-helpers.d.ts.map +1 -0
- package/dist/lint/post-synth/index.d.ts +3 -0
- package/dist/lint/post-synth/index.d.ts.map +1 -0
- package/dist/lint/rules/grafana-ast.d.ts +21 -0
- package/dist/lint/rules/grafana-ast.d.ts.map +1 -0
- package/dist/lint/rules/index.d.ts +6 -0
- package/dist/lint/rules/index.d.ts.map +1 -0
- package/dist/lint/rules/literal-secret.d.ts +12 -0
- package/dist/lint/rules/literal-secret.d.ts.map +1 -0
- package/dist/lint/rules/uid-syntax.d.ts +12 -0
- package/dist/lint/rules/uid-syntax.d.ts.map +1 -0
- package/dist/lsp/completions.d.ts +4 -0
- package/dist/lsp/completions.d.ts.map +1 -0
- package/dist/lsp/hover.d.ts +4 -0
- package/dist/lsp/hover.d.ts.map +1 -0
- package/dist/manifest.json +8 -0
- package/dist/meta.json +107 -0
- package/dist/okf/index.md +39 -0
- package/dist/okf/rules/GRAF001.md +16 -0
- package/dist/okf/rules/GRAF002.md +15 -0
- package/dist/okf/rules/GRAF101.md +15 -0
- package/dist/okf/rules/GRAF102.md +15 -0
- package/dist/okf/rules/GRAF103.md +11 -0
- package/dist/okf/rules/GRAF104.md +15 -0
- package/dist/okf/rules/GRAF105.md +11 -0
- package/dist/okf/rules/GRAF106.md +11 -0
- package/dist/okf/rules/GRAF107.md +11 -0
- package/dist/okf/types/ConstantVariable.md +9 -0
- package/dist/okf/types/CustomVariable.md +9 -0
- package/dist/okf/types/Dashboard.md +14 -0
- package/dist/okf/types/DashboardProvider.md +9 -0
- package/dist/okf/types/Datasource.md +16 -0
- package/dist/okf/types/DatasourceVariable.md +9 -0
- package/dist/okf/types/GaugePanel.md +9 -0
- package/dist/okf/types/HeatmapPanel.md +9 -0
- package/dist/okf/types/IntervalVariable.md +9 -0
- package/dist/okf/types/LogsPanel.md +9 -0
- package/dist/okf/types/LokiQuery.md +9 -0
- package/dist/okf/types/PromQuery.md +9 -0
- package/dist/okf/types/QueryVariable.md +9 -0
- package/dist/okf/types/Row.md +9 -0
- package/dist/okf/types/StatPanel.md +9 -0
- package/dist/okf/types/TablePanel.md +9 -0
- package/dist/okf/types/TempoQuery.md +9 -0
- package/dist/okf/types/TextPanel.md +9 -0
- package/dist/okf/types/TextboxVariable.md +9 -0
- package/dist/okf/types/TimeSeriesPanel.md +9 -0
- package/dist/okf/types/TracesPanel.md +9 -0
- package/dist/package-cli.d.ts +3 -0
- package/dist/package-cli.d.ts.map +1 -0
- package/dist/panels.d.ts +138 -0
- package/dist/panels.d.ts.map +1 -0
- package/dist/pin.d.ts +32 -0
- package/dist/pin.d.ts.map +1 -0
- package/dist/plugin.d.ts +12 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/query.d.ts +81 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/rules/graf101.ts +17 -0
- package/dist/rules/graf102.ts +17 -0
- package/dist/rules/graf103.ts +17 -0
- package/dist/rules/graf104.ts +17 -0
- package/dist/rules/graf105.ts +17 -0
- package/dist/rules/graf106.ts +17 -0
- package/dist/rules/graf107.ts +17 -0
- package/dist/rules/grafana-ast.ts +70 -0
- package/dist/rules/grafana-helpers.ts +68 -0
- package/dist/rules/literal-secret.ts +48 -0
- package/dist/rules/uid-syntax.ts +56 -0
- package/dist/schema/dashboard.gen.d.ts +1231 -0
- package/dist/schema/dashboard.gen.d.ts.map +1 -0
- package/dist/schema/gauge.gen.d.ts +57 -0
- package/dist/schema/gauge.gen.d.ts.map +1 -0
- package/dist/schema/heatmap.gen.d.ts +295 -0
- package/dist/schema/heatmap.gen.d.ts.map +1 -0
- package/dist/schema/index.d.ts +18 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/logs.gen.d.ts +29 -0
- package/dist/schema/logs.gen.d.ts.map +1 -0
- package/dist/schema/loki.gen.d.ts +69 -0
- package/dist/schema/loki.gen.d.ts.map +1 -0
- package/dist/schema/prometheus.gen.d.ts +169 -0
- package/dist/schema/prometheus.gen.d.ts.map +1 -0
- package/dist/schema/stat.gen.d.ts +75 -0
- package/dist/schema/stat.gen.d.ts.map +1 -0
- package/dist/schema/table.gen.d.ts +295 -0
- package/dist/schema/table.gen.d.ts.map +1 -0
- package/dist/schema/tempo.gen.d.ts +136 -0
- package/dist/schema/tempo.gen.d.ts.map +1 -0
- package/dist/schema/text.gen.d.ts +16 -0
- package/dist/schema/text.gen.d.ts.map +1 -0
- package/dist/schema/timeseries.gen.d.ts +179 -0
- package/dist/schema/timeseries.gen.d.ts.map +1 -0
- package/dist/schema-validate.d.ts +20 -0
- package/dist/schema-validate.d.ts.map +1 -0
- package/dist/serializer.d.ts +22 -0
- package/dist/serializer.d.ts.map +1 -0
- package/dist/skill-defs.d.ts +3 -0
- package/dist/skill-defs.d.ts.map +1 -0
- package/dist/skills/chant-grafana-provisioning.md +42 -0
- package/dist/skills/chant-grafana.md +93 -0
- package/dist/spec/fetch-cli.d.ts +3 -0
- package/dist/spec/fetch-cli.d.ts.map +1 -0
- package/dist/spec/schemas.d.ts +25 -0
- package/dist/spec/schemas.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/util.d.ts +17 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/validate-cli.d.ts +3 -0
- package/dist/validate-cli.d.ts.map +1 -0
- package/dist/validate-output.d.ts +42 -0
- package/dist/validate-output.d.ts.map +1 -0
- package/dist/validate.d.ts +12 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/variables.d.ts +100 -0
- package/dist/variables.d.ts.map +1 -0
- package/package.json +79 -0
- package/src/build.test.ts +210 -0
- package/src/build.ts +573 -0
- package/src/catalog.ts +116 -0
- package/src/codegen/docs-cli.ts +4 -0
- package/src/codegen/docs.ts +97 -0
- package/src/codegen/generate-cli.ts +8 -0
- package/src/codegen/generate.ts +83 -0
- package/src/codegen/package.ts +41 -0
- package/src/codegen/schema-types.ts +173 -0
- package/src/composites/agent-dashboard.ts +235 -0
- package/src/composites/catalog.test.ts +37 -0
- package/src/composites/catalog.ts +223 -0
- package/src/composites/composites.test.ts +314 -0
- package/src/composites/index.ts +12 -0
- package/src/composites/red-dashboard.ts +159 -0
- package/src/composites/shared.ts +94 -0
- package/src/composites/slo-dashboard.ts +177 -0
- package/src/dashboard.ts +123 -0
- package/src/datasource.ts +93 -0
- package/src/detect.ts +30 -0
- package/src/generated/lexicon-grafana.json +107 -0
- package/src/import.e2e.test.ts +147 -0
- package/src/import.test.ts +45 -0
- package/src/index.ts +178 -0
- package/src/lint/audit-catalog.ts +87 -0
- package/src/lint/post-synth/graf101.ts +17 -0
- package/src/lint/post-synth/graf102.ts +17 -0
- package/src/lint/post-synth/graf103.ts +17 -0
- package/src/lint/post-synth/graf104.ts +17 -0
- package/src/lint/post-synth/graf105.ts +17 -0
- package/src/lint/post-synth/graf106.ts +17 -0
- package/src/lint/post-synth/graf107.ts +17 -0
- package/src/lint/post-synth/grafana-helpers.ts +68 -0
- package/src/lint/post-synth/index.ts +19 -0
- package/src/lint/post-synth/post-synth.test.ts +231 -0
- package/src/lint/rules/grafana-ast.ts +70 -0
- package/src/lint/rules/index.ts +9 -0
- package/src/lint/rules/literal-secret.ts +48 -0
- package/src/lint/rules/rules.test.ts +70 -0
- package/src/lint/rules/uid-syntax.ts +56 -0
- package/src/lsp/completions.test.ts +31 -0
- package/src/lsp/completions.ts +15 -0
- package/src/lsp/hover.test.ts +25 -0
- package/src/lsp/hover.ts +28 -0
- package/src/package-cli.ts +17 -0
- package/src/panels.ts +275 -0
- package/src/pin.ts +68 -0
- package/src/plugin.test.ts +50 -0
- package/src/plugin.ts +116 -0
- package/src/query.ts +160 -0
- package/src/schema/dashboard.gen.ts +1289 -0
- package/src/schema/gauge.gen.ts +64 -0
- package/src/schema/heatmap.gen.ts +321 -0
- package/src/schema/index.ts +17 -0
- package/src/schema/logs.gen.ts +34 -0
- package/src/schema/loki.gen.ts +77 -0
- package/src/schema/prometheus.gen.ts +181 -0
- package/src/schema/stat.gen.ts +86 -0
- package/src/schema/table.gen.ts +334 -0
- package/src/schema/tempo.gen.ts +146 -0
- package/src/schema/text.gen.ts +22 -0
- package/src/schema/timeseries.gen.ts +208 -0
- package/src/schema-validate.ts +143 -0
- package/src/schema.test.ts +76 -0
- package/src/serializer.test.ts +170 -0
- package/src/serializer.ts +37 -0
- package/src/skill-defs.ts +31 -0
- package/src/skills/chant-grafana-provisioning.md +42 -0
- package/src/skills/chant-grafana.md +93 -0
- package/src/spec/fetch-cli.ts +27 -0
- package/src/spec/schemas/dashboard.jsonschema.json +1901 -0
- package/src/spec/schemas/gauge.jsonschema.json +114 -0
- package/src/spec/schemas/heatmap.jsonschema.json +480 -0
- package/src/spec/schemas/logs.jsonschema.json +94 -0
- package/src/spec/schemas/loki.jsonschema.json +118 -0
- package/src/spec/schemas/prometheus.jsonschema.json +276 -0
- package/src/spec/schemas/stat.jsonschema.json +163 -0
- package/src/spec/schemas/table.jsonschema.json +751 -0
- package/src/spec/schemas/tempo.jsonschema.json +225 -0
- package/src/spec/schemas/text.jsonschema.json +72 -0
- package/src/spec/schemas/timeseries.jsonschema.json +471 -0
- package/src/spec/schemas.ts +56 -0
- package/src/util.ts +43 -0
- package/src/validate-cli.ts +7 -0
- package/src/validate-output.ts +380 -0
- package/src/validate.ts +108 -0
- package/src/variables.ts +161 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tempo.gen.d.ts","sourceRoot":"","sources":["../../src/schema/tempo.gen.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACpC;;OAEG;IACH,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,GAAG,iBAAiB,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAEvH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,eAAe,GAAG,YAAY,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1H;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type TextMode = "html" | "markdown" | "code";
|
|
2
|
+
export type CodeLanguage = "json" | "yaml" | "xml" | "typescript" | "sql" | "go" | "markdown" | "html" | "plaintext";
|
|
3
|
+
export interface CodeOptions {
|
|
4
|
+
/**
|
|
5
|
+
* The language passed to monaco code editor
|
|
6
|
+
*/
|
|
7
|
+
language: CodeLanguage;
|
|
8
|
+
showLineNumbers: boolean;
|
|
9
|
+
showMiniMap: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface Options {
|
|
12
|
+
mode: TextMode;
|
|
13
|
+
code?: CodeOptions;
|
|
14
|
+
content: string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=text.gen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.gen.d.ts","sourceRoot":"","sources":["../../src/schema/text.gen.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,KAAK,GAAG,IAAI,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAErH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
export interface Options {
|
|
2
|
+
timezone?: TimeZone[];
|
|
3
|
+
legend: VizLegendOptions;
|
|
4
|
+
tooltip: VizTooltipOptions;
|
|
5
|
+
orientation?: VizOrientation;
|
|
6
|
+
}
|
|
7
|
+
export type FieldConfig = GraphFieldConfig;
|
|
8
|
+
/**
|
|
9
|
+
* A specific timezone from https://en.wikipedia.org/wiki/Tz_database
|
|
10
|
+
*/
|
|
11
|
+
export type TimeZone = string;
|
|
12
|
+
/**
|
|
13
|
+
* TODO docs
|
|
14
|
+
*/
|
|
15
|
+
export interface VizLegendOptions {
|
|
16
|
+
displayMode: LegendDisplayMode;
|
|
17
|
+
placement: LegendPlacement;
|
|
18
|
+
showLegend: boolean;
|
|
19
|
+
asTable?: boolean;
|
|
20
|
+
isVisible?: boolean;
|
|
21
|
+
sortBy?: string;
|
|
22
|
+
sortDesc?: boolean;
|
|
23
|
+
width?: number;
|
|
24
|
+
calcs: string[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* TODO docs
|
|
28
|
+
*/
|
|
29
|
+
export interface VizTooltipOptions {
|
|
30
|
+
mode: TooltipDisplayMode;
|
|
31
|
+
sort: SortOrder;
|
|
32
|
+
maxWidth?: number;
|
|
33
|
+
maxHeight?: number;
|
|
34
|
+
hideZeros?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* TODO docs
|
|
38
|
+
*/
|
|
39
|
+
export type VizOrientation = "auto" | "vertical" | "horizontal";
|
|
40
|
+
/**
|
|
41
|
+
* TODO docs
|
|
42
|
+
*/
|
|
43
|
+
export interface GraphFieldConfig {
|
|
44
|
+
drawStyle?: GraphDrawStyle;
|
|
45
|
+
gradientMode?: GraphGradientMode;
|
|
46
|
+
thresholdsStyle?: GraphThresholdsStyleConfig;
|
|
47
|
+
transform?: GraphTransform;
|
|
48
|
+
lineColor?: string;
|
|
49
|
+
lineWidth?: number;
|
|
50
|
+
lineInterpolation?: LineInterpolation;
|
|
51
|
+
lineStyle?: LineStyle;
|
|
52
|
+
fillColor?: string;
|
|
53
|
+
fillOpacity?: number;
|
|
54
|
+
showPoints?: VisibilityMode;
|
|
55
|
+
pointSize?: number;
|
|
56
|
+
pointColor?: string;
|
|
57
|
+
axisPlacement?: AxisPlacement;
|
|
58
|
+
axisColorMode?: AxisColorMode;
|
|
59
|
+
axisLabel?: string;
|
|
60
|
+
axisWidth?: number;
|
|
61
|
+
axisSoftMin?: number;
|
|
62
|
+
axisSoftMax?: number;
|
|
63
|
+
axisGridShow?: boolean;
|
|
64
|
+
scaleDistribution?: ScaleDistributionConfig;
|
|
65
|
+
axisCenteredZero?: boolean;
|
|
66
|
+
barAlignment?: BarAlignment;
|
|
67
|
+
barWidthFactor?: number;
|
|
68
|
+
stacking?: StackingConfig;
|
|
69
|
+
hideFrom?: HideSeriesConfig;
|
|
70
|
+
insertNulls?: boolean | number;
|
|
71
|
+
/**
|
|
72
|
+
* Indicate if null values should be treated as gaps or connected.
|
|
73
|
+
* When the value is a number, it represents the maximum delta in the
|
|
74
|
+
* X axis that should be considered connected. For timeseries, this is milliseconds
|
|
75
|
+
*/
|
|
76
|
+
spanNulls?: boolean | number;
|
|
77
|
+
fillBelowTo?: string;
|
|
78
|
+
pointSymbol?: string;
|
|
79
|
+
axisBorderShow?: boolean;
|
|
80
|
+
barMaxWidth?: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* TODO docs
|
|
84
|
+
* Note: "hidden" needs to remain as an option for plugins compatibility
|
|
85
|
+
*/
|
|
86
|
+
export type LegendDisplayMode = "list" | "table" | "hidden";
|
|
87
|
+
/**
|
|
88
|
+
* TODO docs
|
|
89
|
+
*/
|
|
90
|
+
export type LegendPlacement = "bottom" | "right";
|
|
91
|
+
/**
|
|
92
|
+
* TODO docs
|
|
93
|
+
*/
|
|
94
|
+
export type TooltipDisplayMode = "single" | "multi" | "none";
|
|
95
|
+
/**
|
|
96
|
+
* TODO docs
|
|
97
|
+
*/
|
|
98
|
+
export type SortOrder = "asc" | "desc" | "none";
|
|
99
|
+
/**
|
|
100
|
+
* TODO docs
|
|
101
|
+
*/
|
|
102
|
+
export type GraphDrawStyle = "line" | "bars" | "points";
|
|
103
|
+
/**
|
|
104
|
+
* TODO docs
|
|
105
|
+
*/
|
|
106
|
+
export type GraphGradientMode = "none" | "opacity" | "hue" | "scheme";
|
|
107
|
+
/**
|
|
108
|
+
* TODO docs
|
|
109
|
+
*/
|
|
110
|
+
export interface GraphThresholdsStyleConfig {
|
|
111
|
+
mode: GraphThresholdsStyleMode;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* TODO docs
|
|
115
|
+
*/
|
|
116
|
+
export type GraphTransform = "constant" | "negative-Y";
|
|
117
|
+
/**
|
|
118
|
+
* TODO docs
|
|
119
|
+
*/
|
|
120
|
+
export type LineInterpolation = "linear" | "smooth" | "stepBefore" | "stepAfter";
|
|
121
|
+
/**
|
|
122
|
+
* TODO docs
|
|
123
|
+
*/
|
|
124
|
+
export interface LineStyle {
|
|
125
|
+
fill?: "solid" | "dash" | "dot" | "square";
|
|
126
|
+
dash?: number[];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* TODO docs
|
|
130
|
+
*/
|
|
131
|
+
export type VisibilityMode = "auto" | "never" | "always";
|
|
132
|
+
/**
|
|
133
|
+
* TODO docs
|
|
134
|
+
*/
|
|
135
|
+
export type AxisPlacement = "auto" | "top" | "right" | "bottom" | "left" | "hidden";
|
|
136
|
+
/**
|
|
137
|
+
* TODO docs
|
|
138
|
+
*/
|
|
139
|
+
export type AxisColorMode = "text" | "series";
|
|
140
|
+
/**
|
|
141
|
+
* TODO docs
|
|
142
|
+
*/
|
|
143
|
+
export interface ScaleDistributionConfig {
|
|
144
|
+
type: ScaleDistribution;
|
|
145
|
+
log?: number;
|
|
146
|
+
linearThreshold?: number;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* TODO docs
|
|
150
|
+
*/
|
|
151
|
+
export type BarAlignment = -1 | 0 | 1;
|
|
152
|
+
/**
|
|
153
|
+
* TODO docs
|
|
154
|
+
*/
|
|
155
|
+
export interface StackingConfig {
|
|
156
|
+
mode?: StackingMode;
|
|
157
|
+
group?: string;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* TODO docs
|
|
161
|
+
*/
|
|
162
|
+
export interface HideSeriesConfig {
|
|
163
|
+
tooltip: boolean;
|
|
164
|
+
legend: boolean;
|
|
165
|
+
viz: boolean;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* TODO docs
|
|
169
|
+
*/
|
|
170
|
+
export type GraphThresholdsStyleMode = "off" | "line" | "dashed" | "area" | "line+area" | "dashed+area" | "series";
|
|
171
|
+
/**
|
|
172
|
+
* TODO docs
|
|
173
|
+
*/
|
|
174
|
+
export type ScaleDistribution = "linear" | "log" | "ordinal" | "symlog";
|
|
175
|
+
/**
|
|
176
|
+
* TODO docs
|
|
177
|
+
*/
|
|
178
|
+
export type StackingMode = "none" | "normal" | "percent";
|
|
179
|
+
//# sourceMappingURL=timeseries.gen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeseries.gen.d.ts","sourceRoot":"","sources":["../../src/schema/timeseries.gen.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate built Grafana JSON against the vendored schemas at
|
|
3
|
+
* `GRAFANA_SCHEMA_PIN`, offline.
|
|
4
|
+
*
|
|
5
|
+
* The dashboard is checked against the dashboard schema as it stands. Panel
|
|
6
|
+
* options, `fieldConfig.defaults.custom` and each query are checked against
|
|
7
|
+
* their plugin's schema with every `required` list removed, because Grafana
|
|
8
|
+
* fills in options a panel leaves out: what still fails is a key the schema
|
|
9
|
+
* doesn't have or a value it doesn't allow.
|
|
10
|
+
*/
|
|
11
|
+
export interface SchemaProblem {
|
|
12
|
+
/** JSON pointer into the dashboard. */
|
|
13
|
+
path: string;
|
|
14
|
+
message: string;
|
|
15
|
+
}
|
|
16
|
+
type Json = Record<string, unknown>;
|
|
17
|
+
/** Everything in one dashboard that the pinned schemas reject. */
|
|
18
|
+
export declare function validateDashboardSchema(dashboard: Json): SchemaProblem[];
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=schema-validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validate.d.ts","sourceRoot":"","sources":["../src/schema-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAiED,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAcpC,kEAAkE;AAClE,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,IAAI,GAAG,aAAa,EAAE,CAyCxE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Grafana serializer.
|
|
3
|
+
*
|
|
4
|
+
* Emits Grafana's own files, as `SerializerResult.files` keyed by path
|
|
5
|
+
* relative to the output directory:
|
|
6
|
+
*
|
|
7
|
+
* - `dashboards/[<folder>/]<uid>.json`: one per dashboard, the JSON Grafana
|
|
8
|
+
* imports as it is (UI import, the HTTP API, or file provisioning).
|
|
9
|
+
* - `provisioning/datasources/chant.yaml`: every declared datasource.
|
|
10
|
+
* - `provisioning/dashboards/chant.yaml`: the provider that loads the
|
|
11
|
+
* dashboard files, a default one unless a `DashboardProvider` is declared.
|
|
12
|
+
*
|
|
13
|
+
* Mount `provisioning/` at `/etc/grafana/provisioning` and `dashboards/` at
|
|
14
|
+
* the provider's path (`/var/lib/grafana/dashboards` by default).
|
|
15
|
+
*
|
|
16
|
+
* The primary output is a small JSON index of what was built. Grafana's
|
|
17
|
+
* files have no metadata channel chant could use without changing what
|
|
18
|
+
* Grafana imports, so no ownership marker is stamped.
|
|
19
|
+
*/
|
|
20
|
+
import type { Serializer } from "@intentius/chant/serializer";
|
|
21
|
+
export declare const grafanaSerializer: Serializer;
|
|
22
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../src/serializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,6BAA6B,CAAC;AAIhF,eAAO,MAAM,iBAAiB,EAAE,UAW/B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-defs.d.ts","sourceRoot":"","sources":["../src/skill-defs.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,eAAO,MAAM,aAAa,qDA2BxB,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill: chant-grafana-provisioning
|
|
3
|
+
description: Load chant-built Grafana dashboards and datasources into a running Grafana through its provisioning directories, in Docker or Kubernetes
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Provisioning chant-built dashboards into Grafana
|
|
8
|
+
|
|
9
|
+
`chant build src --lexicon grafana -o dist/grafana/index.json` writes, next to the index:
|
|
10
|
+
|
|
11
|
+
| Path | What Grafana does with it |
|
|
12
|
+
|---|---|
|
|
13
|
+
| `provisioning/datasources/chant.yaml` | creates or updates every declared `Datasource` |
|
|
14
|
+
| `provisioning/dashboards/chant.yaml` | a file provider pointing at the dashboards directory |
|
|
15
|
+
| `dashboards/<uid>.json`, `dashboards/<folder>/<uid>.json` | one dashboard each; the subdirectory becomes the folder |
|
|
16
|
+
|
|
17
|
+
## Docker
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
docker run -p 3000:3000 \
|
|
21
|
+
-v "$PWD/dist/grafana/provisioning:/etc/grafana/provisioning:ro" \
|
|
22
|
+
-v "$PWD/dist/grafana/dashboards:/var/lib/grafana/dashboards:ro" \
|
|
23
|
+
grafana/grafana:12.4.11
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Kubernetes
|
|
27
|
+
|
|
28
|
+
Put the two provisioning files in one ConfigMap mounted at `/etc/grafana/provisioning/datasources` and `/etc/grafana/provisioning/dashboards` (a `subPath` each, or two ConfigMaps), and the dashboard JSON in another mounted at `/var/lib/grafana/dashboards`. `grafanaFiles(entities)` returns every file by path, so a k8s composite can build those ConfigMaps from the same declarations without a second build.
|
|
29
|
+
|
|
30
|
+
## Changing where dashboards live
|
|
31
|
+
|
|
32
|
+
Declare a `DashboardProvider` to change the mount path, pin a folder, or allow UI edits:
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
export const provider = new DashboardProvider({ name: "team", path: "/dashboards", allowUiUpdates: true });
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
With no provider declared, chant writes one named `chant` that reads `/var/lib/grafana/dashboards` and maps subdirectories to folders.
|
|
39
|
+
|
|
40
|
+
## Checking before Grafana does
|
|
41
|
+
|
|
42
|
+
`chant lint` and `chant build` run GRAF101-GRAF107 on the output, including a check against Grafana's dashboard schema at the pinned version. To check against a real Grafana, the lexicon's `import.test.ts` boots `grafana/grafana` with Docker, provisions the example and reads each dashboard back over the HTTP API.
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
skill: chant-grafana
|
|
3
|
+
description: Declare Grafana dashboards, panels, typed Prometheus/Tempo/Loki queries and datasources as chant entities, and build dashboard JSON Grafana imports as it is
|
|
4
|
+
user-invocable: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Grafana dashboards with chant
|
|
8
|
+
|
|
9
|
+
The grafana lexicon (`@intentius/chant-lexicon-grafana`) types what a dashboard shows: datasources, dashboards, rows, panels, queries and variables. Grafana server settings, users and plugins are out of scope. `chant build` writes one JSON file per dashboard plus Grafana's provisioning files.
|
|
10
|
+
|
|
11
|
+
## Project setup
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
// chant.config.ts
|
|
15
|
+
export default { lexicons: ["grafana"] };
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Datasources, declared once
|
|
19
|
+
|
|
20
|
+
```ts
|
|
21
|
+
import { Datasource } from "@intentius/chant-lexicon-grafana";
|
|
22
|
+
|
|
23
|
+
const prometheus = new Datasource({ name: "Prometheus", type: "prometheus", url: "http://prometheus:9090", isDefault: true });
|
|
24
|
+
const tempo = new Datasource({ name: "Tempo", type: "tempo", url: "http://tempo:3200" });
|
|
25
|
+
|
|
26
|
+
export { prometheus, tempo };
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
The uid defaults to the name as a uid (`prometheus`, `tempo`). Secrets go in `secureJsonData` as `"$__env{NAME}"` or `"$__file{/path}"`, never literally (GRAF002). A declared `Datasource` inside `jsonData` is written as its uid, which is how a Tempo datasource links to Loki or Prometheus.
|
|
30
|
+
|
|
31
|
+
## Queries
|
|
32
|
+
|
|
33
|
+
`PromQuery` (PromQL in `expr`), `TempoQuery` (TraceQL in `query`) and `LokiQuery` (LogQL in `expr`). Fields are typed from Grafana's own query schemas. `datasource` only accepts a datasource of the query's plugin type, so a PromQL query can't be pointed at Tempo.
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
const requestRate = new PromQuery({
|
|
37
|
+
expr: 'sum by (service) (rate(http_server_request_duration_seconds_count{service="$service"}[$__rate_interval]))',
|
|
38
|
+
legendFormat: "{{service}}",
|
|
39
|
+
});
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Panels and dashboards
|
|
43
|
+
|
|
44
|
+
Panel classes: `TimeSeriesPanel`, `StatPanel`, `GaugePanel`, `TablePanel`, `LogsPanel`, `TracesPanel`, `HeatmapPanel`, `TextPanel`, plus `Row`. `options` and `fieldConfig.defaults.custom` are typed from each panel's schema, and every option is optional because Grafana fills in the rest.
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
const rate = new TimeSeriesPanel({ title: "Request rate", datasource: prometheus, targets: [requestRate] });
|
|
48
|
+
const traces = new TablePanel({ title: "Slow traces", datasource: tempo, targets: [slowTraces] });
|
|
49
|
+
const service = new QueryVariable({ name: "service", datasource: prometheus, query: "label_values(up, service)" });
|
|
50
|
+
|
|
51
|
+
export const overview = new Dashboard({
|
|
52
|
+
title: "Service overview",
|
|
53
|
+
variables: [service],
|
|
54
|
+
panels: [rate, traces],
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Leave `gridPos` out and panels are placed left to right, wrapping at 24 columns; give `x` and `y` to place one exactly. `Row({ title, panels, collapsed })` starts a full-width row. Dashboard uids default to the export name as a uid (`overview`).
|
|
59
|
+
|
|
60
|
+
chant's lint wants flat declarations: extract nested objects (`time`, `options`) to named consts, keep at most eight declarations per file, and export entities with `export { a, b }`.
|
|
61
|
+
|
|
62
|
+
## Dashboards built from other declarations
|
|
63
|
+
|
|
64
|
+
Three composites build a whole dashboard from what another lexicon declares, reading metric names at build time so a rename at the source moves the queries:
|
|
65
|
+
|
|
66
|
+
```ts
|
|
67
|
+
import { Datasource, RedDashboard, SloDashboard, AgentDashboard } from "@intentius/chant-lexicon-grafana";
|
|
68
|
+
import { spans, genai } from "./collector"; // an otel SpanMetricsConnector and genAiComponents(...)
|
|
69
|
+
import { checkout } from "./slo"; // a prometheus Slo(...)
|
|
70
|
+
|
|
71
|
+
const services = RedDashboard({ spanMetrics: spans, datasource: prometheus }); // rate, errors, p50/p95/p99 per service
|
|
72
|
+
const checkoutSlo = SloDashboard({ slo: checkout, datasource: prometheus }); // SLI, budget left, burn rate per alert window
|
|
73
|
+
const agents = AgentDashboard({ genAi: genai, datasource: prometheus }); // per model and tool, tokens per model
|
|
74
|
+
|
|
75
|
+
export { services, checkoutSlo, agents };
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Pass the `prometheus` exporter as `exporter` to `RedDashboard` when its `namespace` changes the names. `datasource` may be a `{ type: "prometheus", uid }` ref to a datasource declared elsewhere. Never hand-write the span-metric or SLO series names in a query next to these; use `spanMetricsNames()` (otel), `sloMetrics()` (prometheus) or `genAiMetrics()` (otel), or the composites' `redQueries`, `sloQueries` and `agentQueries`.
|
|
79
|
+
|
|
80
|
+
## Rules
|
|
81
|
+
|
|
82
|
+
- GRAF101: every panel, query and query variable names a declared datasource. GRAF102: of the right type.
|
|
83
|
+
- GRAF103: every `$name`/`${name}` in a query, title or repeat is a declared variable (`$__*` are Grafana's own).
|
|
84
|
+
- GRAF104: unique dashboard uids, datasource uids and names, panel ids, variable names and refIds.
|
|
85
|
+
- GRAF105: panels fit the 24-column grid and don't overlap.
|
|
86
|
+
- GRAF106: uids of 1-40 letters, digits, `-`, `_`; dashboards have titles.
|
|
87
|
+
- GRAF107: the dashboard matches Grafana's schema at the pinned version.
|
|
88
|
+
|
|
89
|
+
GRAF101 and GRAF102 compare against the datasources in the same build root, so keep datasources and dashboards in one `chant build` (chant #1939).
|
|
90
|
+
|
|
91
|
+
## Other plugins
|
|
92
|
+
|
|
93
|
+
`definePanel<Options, Custom>()({ type, className, defaultSize })` adds a panel plugin chant doesn't ship, and `defineQuery<Model>()({ datasourceType, className })` a datasource's query class. Both serialize and lint like the built-ins.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-cli.d.ts","sourceRoot":"","sources":["../../src/spec/fetch-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the vendored Grafana schemas (`src/spec/schemas/*.jsonschema.json`) and check
|
|
3
|
+
* them against the digests in `GRAFANA_SCHEMA_PIN`.
|
|
4
|
+
*/
|
|
5
|
+
import { type SchemaName } from "../pin.js";
|
|
6
|
+
/**
|
|
7
|
+
* Where the vendored files live: beside this module, under `src/`, so they
|
|
8
|
+
* ship with the source the package runs from and GRAF107 can read them.
|
|
9
|
+
* A function, not a module-scope constant, so edge bundles that import the
|
|
10
|
+
* lexicon never evaluate a filesystem path at load.
|
|
11
|
+
*/
|
|
12
|
+
export declare function schemasDir(): string;
|
|
13
|
+
export declare function schemaPath(name: SchemaName): string;
|
|
14
|
+
export declare function sha256(text: string | Buffer): string;
|
|
15
|
+
/** The raw bytes of one vendored schema. */
|
|
16
|
+
export declare function readSchemaText(name: SchemaName): string;
|
|
17
|
+
/** One vendored schema, parsed (cached per process). */
|
|
18
|
+
export declare function loadSchema(name: SchemaName): Record<string, unknown>;
|
|
19
|
+
/** Vendored files whose digest does not match the pin, with what was found. */
|
|
20
|
+
export declare function digestMismatches(): Array<{
|
|
21
|
+
name: SchemaName;
|
|
22
|
+
expected: string;
|
|
23
|
+
actual: string;
|
|
24
|
+
}>;
|
|
25
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/spec/schemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE3E;;;;;GAKG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEnD;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEpD;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEvD;AAID,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOpE;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAQhG"}
|
package/dist/util.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Small helpers shared by the entity modules and the builder. */
|
|
2
|
+
/** Every field optional, all the way down; arrays keep their element type partial too. */
|
|
3
|
+
export type DeepPartial<T> = T extends (infer U)[] ? DeepPartial<U>[] : T extends object ? {
|
|
4
|
+
[K in keyof T]?: DeepPartial<T[K]>;
|
|
5
|
+
} : T;
|
|
6
|
+
/** Grafana's uid alphabet: letters, digits, `-` and `_`, at most 40 characters. */
|
|
7
|
+
export declare const UID_PATTERN: RegExp;
|
|
8
|
+
export declare function isValidUid(uid: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* A uid from free text (an export name or a datasource name): camelCase and
|
|
11
|
+
* spaces become `-`, anything outside the uid alphabet is dropped, and the
|
|
12
|
+
* result is cut to 40 characters.
|
|
13
|
+
*/
|
|
14
|
+
export declare function slugUid(text: string): string;
|
|
15
|
+
/** Copy `value` with every `undefined` property dropped, recursively; keeps key order. */
|
|
16
|
+
export declare function compact<T>(value: T): T;
|
|
17
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAElE,0FAA0F;AAC1F,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC9C,WAAW,CAAC,CAAC,CAAC,EAAE,GAChB,CAAC,SAAS,MAAM,GACd;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACtC,CAAC,CAAC;AAER,mFAAmF;AACnF,eAAO,MAAM,WAAW,QAA0B,CAAC;AAEnD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ5C;AAED,0FAA0F;AAC1F,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAUtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-cli.d.ts","sourceRoot":"","sources":["../src/validate-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The checks behind GRAF101-GRAF107, as plain functions over built Grafana
|
|
3
|
+
* output: dashboard JSON documents and provisioned datasources. The
|
|
4
|
+
* post-synth checks run them over a build; anything else holding the same
|
|
5
|
+
* JSON (a test, another lexicon embedding dashboards) can call them directly.
|
|
6
|
+
*
|
|
7
|
+
* Checks that join a dashboard against datasources (GRAF101, GRAF102) only
|
|
8
|
+
* see the datasources passed in. In a build that is the build root being
|
|
9
|
+
* built (chant #1939): with no datasource declared in it they report
|
|
10
|
+
* nothing, and a datasource declared in another build root looks undeclared.
|
|
11
|
+
*/
|
|
12
|
+
import type { ProvisionedDatasource } from "./build.js";
|
|
13
|
+
export type GrafanaIssueCode = "GRAF101" | "GRAF102" | "GRAF103" | "GRAF104" | "GRAF105" | "GRAF106" | "GRAF107";
|
|
14
|
+
export interface GrafanaIssue {
|
|
15
|
+
code: GrafanaIssueCode;
|
|
16
|
+
severity: "error" | "warning";
|
|
17
|
+
message: string;
|
|
18
|
+
/** The dashboard uid or datasource name the issue is about. */
|
|
19
|
+
entity?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DashboardDoc {
|
|
22
|
+
/** Where it came from, e.g. its output file. */
|
|
23
|
+
source?: string;
|
|
24
|
+
json: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface GrafanaArtifacts {
|
|
27
|
+
dashboards: DashboardDoc[];
|
|
28
|
+
datasources: ProvisionedDatasource[];
|
|
29
|
+
}
|
|
30
|
+
/** Every variable name referenced in a string. */
|
|
31
|
+
export declare function variableReferences(text: string): string[];
|
|
32
|
+
export declare function checkDatasourceRefs(a: GrafanaArtifacts): GrafanaIssue[];
|
|
33
|
+
export declare function checkVariables(a: GrafanaArtifacts): GrafanaIssue[];
|
|
34
|
+
export declare function checkDuplicates(a: GrafanaArtifacts): GrafanaIssue[];
|
|
35
|
+
export declare function checkGrid(a: GrafanaArtifacts): GrafanaIssue[];
|
|
36
|
+
export declare function checkIdentity(a: GrafanaArtifacts): GrafanaIssue[];
|
|
37
|
+
export declare function checkSchema(a: GrafanaArtifacts): GrafanaIssue[];
|
|
38
|
+
/** The issues one check finds. */
|
|
39
|
+
export declare function issuesFor(code: GrafanaIssueCode, a: GrafanaArtifacts): GrafanaIssue[];
|
|
40
|
+
/** Every issue every check finds, in code order. */
|
|
41
|
+
export declare function validateGrafanaOutput(a: GrafanaArtifacts): GrafanaIssue[];
|
|
42
|
+
//# sourceMappingURL=validate-output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-output.d.ts","sourceRoot":"","sources":["../src/validate-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAOrD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAEjH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,WAAW,EAAE,qBAAqB,EAAE,CAAC;CACtC;AA2CD,kDAAkD;AAClD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAIzD;AAoCD,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CA0DvE;AAID,wBAAgB,cAAc,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAkClE;AAaD,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAyBnE;AAsBD,wBAAgB,SAAS,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAiC7D;AAID,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CA2BjE;AAID,wBAAgB,WAAW,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAa/D;AAYD,kCAAkC;AAClC,wBAAgB,SAAS,CAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAErF;AAED,oDAAoD;AACpD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,gBAAgB,GAAG,YAAY,EAAE,CAEzE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate the grafana lexicon's own artifacts: the vendored schemas match
|
|
3
|
+
* their pinned digests, the committed schema types match what generate would
|
|
4
|
+
* write, every required class is in the registry, and every built-in panel
|
|
5
|
+
* renders to a dashboard the pinned schema accepts.
|
|
6
|
+
*/
|
|
7
|
+
import type { ValidateResult } from "@intentius/chant/codegen/validate";
|
|
8
|
+
export type { ValidateCheck, ValidateResult } from "@intentius/chant/codegen/validate";
|
|
9
|
+
/** Every entity class the package must keep exporting. */
|
|
10
|
+
export declare const REQUIRED_NAMES: string[];
|
|
11
|
+
export declare function validate(): Promise<ValidateResult>;
|
|
12
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,mCAAmC,CAAC;AASvF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEvF,0DAA0D;AAC1D,eAAO,MAAM,cAAc,UAsB1B,CAAC;AAIF,wBAAsB,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC,CA2DxD"}
|