@intentius/chant-lexicon-grafana 0.97.0 → 0.99.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 +15 -5
- package/dist/actions/grafana.d.ts +24 -0
- package/dist/actions/grafana.d.ts.map +1 -0
- package/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/alerting-build.d.ts +128 -0
- package/dist/alerting-build.d.ts.map +1 -0
- package/dist/alerting.d.ts +273 -0
- package/dist/alerting.d.ts.map +1 -0
- package/dist/api/apply.d.ts +156 -0
- package/dist/api/apply.d.ts.map +1 -0
- package/dist/api/bind.d.ts +32 -0
- package/dist/api/bind.d.ts.map +1 -0
- package/dist/api/client.d.ts +76 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/converge.d.ts +33 -0
- package/dist/api/converge.d.ts.map +1 -0
- package/dist/api/dashboards.d.ts +102 -0
- package/dist/api/dashboards.d.ts.map +1 -0
- package/dist/api/datasources.d.ts +26 -0
- package/dist/api/datasources.d.ts.map +1 -0
- package/dist/api/fake-grafana-writes.d.ts +41 -0
- package/dist/api/fake-grafana-writes.d.ts.map +1 -0
- package/dist/api/fake-grafana.d.ts +61 -0
- package/dist/api/fake-grafana.d.ts.map +1 -0
- package/dist/api/folders.d.ts +110 -0
- package/dist/api/folders.d.ts.map +1 -0
- package/dist/api/library-panels.d.ts +52 -0
- package/dist/api/library-panels.d.ts.map +1 -0
- package/dist/build.d.ts +30 -2
- package/dist/build.d.ts.map +1 -1
- package/dist/catalog.d.ts +1 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/codegen/docs.d.ts.map +1 -1
- package/dist/codegen/schema-types.d.ts +3 -3
- package/dist/codegen/schema-types.d.ts.map +1 -1
- package/dist/composites/agent-dashboard.d.ts.map +1 -1
- package/dist/composites/catalog.d.ts.map +1 -1
- package/dist/composites/index.d.ts +4 -2
- package/dist/composites/index.d.ts.map +1 -1
- package/dist/composites/red-dashboard.d.ts +21 -2
- package/dist/composites/red-dashboard.d.ts.map +1 -1
- package/dist/composites/shared.d.ts +7 -0
- package/dist/composites/shared.d.ts.map +1 -1
- package/dist/composites/slo-alert-rules.d.ts +92 -0
- package/dist/composites/slo-alert-rules.d.ts.map +1 -0
- package/dist/config.d.ts +111 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/contact-point-secrets.d.ts +17 -0
- package/dist/contact-point-secrets.d.ts.map +1 -0
- package/dist/dashboard.d.ts +16 -2
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/datasource-refs.d.ts +95 -0
- package/dist/datasource-refs.d.ts.map +1 -0
- package/dist/datasource.d.ts +29 -0
- package/dist/datasource.d.ts.map +1 -1
- package/dist/deep-observe-hooks.d.ts +64 -0
- package/dist/deep-observe-hooks.d.ts.map +1 -0
- package/dist/deep-observe.d.ts +42 -0
- package/dist/deep-observe.d.ts.map +1 -0
- package/dist/describe-resources.d.ts +49 -0
- package/dist/describe-resources.d.ts.map +1 -0
- package/dist/detect.d.ts +28 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/export-resources.d.ts +38 -0
- package/dist/export-resources.d.ts.map +1 -0
- package/dist/import/alerting.d.ts +40 -0
- package/dist/import/alerting.d.ts.map +1 -0
- package/dist/import/edits.d.ts +47 -0
- package/dist/import/edits.d.ts.map +1 -0
- package/dist/import/embedded.d.ts +14 -0
- package/dist/import/embedded.d.ts.map +1 -0
- package/dist/import/generator.d.ts +60 -0
- package/dist/import/generator.d.ts.map +1 -0
- package/dist/import/live-export.d.ts +108 -0
- package/dist/import/live-export.d.ts.map +1 -0
- package/dist/import/mappings.d.ts +83 -0
- package/dist/import/mappings.d.ts.map +1 -0
- package/dist/import/model.d.ts +98 -0
- package/dist/import/model.d.ts.map +1 -0
- package/dist/import/normalize-alerting.d.ts +26 -0
- package/dist/import/normalize-alerting.d.ts.map +1 -0
- package/dist/import/normalize.d.ts +74 -0
- package/dist/import/normalize.d.ts.map +1 -0
- package/dist/import/parser.d.ts +110 -0
- package/dist/import/parser.d.ts.map +1 -0
- package/dist/import/report.d.ts +26 -0
- package/dist/import/report.d.ts.map +1 -0
- package/dist/import/testdata/fixtures.d.ts +35 -0
- package/dist/import/testdata/fixtures.d.ts.map +1 -0
- package/dist/import/v2.d.ts +72 -0
- package/dist/import/v2.d.ts.map +1 -0
- package/dist/index.d.ts +26 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/integrity.json +18 -10
- package/dist/k8s.d.ts +107 -0
- package/dist/k8s.d.ts.map +1 -0
- package/dist/lint/audit-catalog.d.ts +2 -1
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/post-synth/graf101.d.ts +2 -2
- package/dist/lint/post-synth/graf102.d.ts +1 -1
- package/dist/lint/post-synth/graf107.d.ts +1 -1
- package/dist/lint/post-synth/graf108.d.ts +8 -0
- package/dist/lint/post-synth/graf108.d.ts.map +1 -0
- package/dist/lint/post-synth/graf109.d.ts +8 -0
- package/dist/lint/post-synth/graf109.d.ts.map +1 -0
- package/dist/lint/post-synth/graf111.d.ts +8 -0
- package/dist/lint/post-synth/graf111.d.ts.map +1 -0
- package/dist/lint/post-synth/graf112.d.ts +8 -0
- package/dist/lint/post-synth/graf112.d.ts.map +1 -0
- package/dist/lint/post-synth/graf113.d.ts +8 -0
- package/dist/lint/post-synth/graf113.d.ts.map +1 -0
- package/dist/lint/post-synth/graf114.d.ts +8 -0
- package/dist/lint/post-synth/graf114.d.ts.map +1 -0
- package/dist/lint/post-synth/graf115.d.ts +8 -0
- package/dist/lint/post-synth/graf115.d.ts.map +1 -0
- package/dist/lint/post-synth/grafana-helpers.d.ts +7 -5
- package/dist/lint/post-synth/grafana-helpers.d.ts.map +1 -1
- package/dist/lint/post-synth/index.d.ts.map +1 -1
- package/dist/lint/rules/literal-secret.d.ts +7 -3
- package/dist/lint/rules/literal-secret.d.ts.map +1 -1
- package/dist/lsp/hover.d.ts.map +1 -1
- package/dist/manifest.json +1 -1
- package/dist/members.d.ts +27 -0
- package/dist/members.d.ts.map +1 -0
- package/dist/meta.json +135 -0
- package/dist/okf/index.md +36 -2
- package/dist/okf/rules/GRAF002.md +3 -2
- package/dist/okf/rules/GRAF101.md +3 -2
- package/dist/okf/rules/GRAF102.md +1 -0
- package/dist/okf/rules/GRAF108.md +11 -0
- package/dist/okf/rules/GRAF109.md +15 -0
- package/dist/okf/rules/GRAF111.md +11 -0
- package/dist/okf/rules/GRAF112.md +16 -0
- package/dist/okf/rules/GRAF113.md +16 -0
- package/dist/okf/rules/GRAF114.md +11 -0
- package/dist/okf/rules/GRAF115.md +11 -0
- package/dist/okf/types/AlertListPanel.md +9 -0
- package/dist/okf/types/AlertQuery.md +9 -0
- package/dist/okf/types/AlertRule.md +9 -0
- package/dist/okf/types/AlertRuleGroup.md +9 -0
- package/dist/okf/types/BarChartPanel.md +9 -0
- package/dist/okf/types/BarGaugePanel.md +9 -0
- package/dist/okf/types/CanvasPanel.md +9 -0
- package/dist/okf/types/ClassicConditionsExpression.md +9 -0
- package/dist/okf/types/ContactPoint.md +14 -0
- package/dist/okf/types/Dashboard.md +1 -0
- package/dist/okf/types/Datasource.md +3 -2
- package/dist/okf/types/ExternalDatasource.md +15 -0
- package/dist/okf/types/FlameGraphPanel.md +9 -0
- package/dist/okf/types/GeomapPanel.md +9 -0
- package/dist/okf/types/HistogramPanel.md +9 -0
- package/dist/okf/types/MathExpression.md +9 -0
- package/dist/okf/types/MuteTiming.md +13 -0
- package/dist/okf/types/NodeGraphPanel.md +9 -0
- package/dist/okf/types/NotificationPolicy.md +9 -0
- package/dist/okf/types/NotificationTemplate.md +9 -0
- package/dist/okf/types/PieChartPanel.md +9 -0
- package/dist/okf/types/ReduceExpression.md +9 -0
- package/dist/okf/types/ResampleExpression.md +9 -0
- package/dist/okf/types/SqlExpression.md +9 -0
- package/dist/okf/types/StateTimelinePanel.md +9 -0
- package/dist/okf/types/StatusHistoryPanel.md +9 -0
- package/dist/okf/types/ThresholdExpression.md +9 -0
- package/dist/okf/types/TrendPanel.md +9 -0
- package/dist/okf/types/XYChartPanel.md +9 -0
- package/dist/op/activities/grafana-apply.d.ts +75 -0
- package/dist/op/activities/grafana-apply.d.ts.map +1 -0
- package/dist/op/activities/index.d.ts +9 -0
- package/dist/op/activities/index.d.ts.map +1 -0
- package/dist/op/builders.d.ts +24 -0
- package/dist/op/builders.d.ts.map +1 -0
- package/dist/ownership.d.ts +67 -0
- package/dist/ownership.d.ts.map +1 -0
- package/dist/panel-options.d.ts +65 -0
- package/dist/panel-options.d.ts.map +1 -0
- package/dist/panels.d.ts +46 -9
- package/dist/panels.d.ts.map +1 -1
- package/dist/pin.d.ts +29 -7
- package/dist/pin.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/promql-check.d.ts +51 -0
- package/dist/promql-check.d.ts.map +1 -0
- package/dist/query.d.ts +9 -8
- package/dist/query.d.ts.map +1 -1
- package/dist/rules/graf101.ts +3 -3
- package/dist/rules/graf102.ts +1 -1
- package/dist/rules/graf107.ts +1 -1
- package/dist/rules/graf108.ts +17 -0
- package/dist/rules/graf109.ts +17 -0
- package/dist/rules/graf111.ts +17 -0
- package/dist/rules/graf112.ts +17 -0
- package/dist/rules/graf113.ts +17 -0
- package/dist/rules/graf114.ts +17 -0
- package/dist/rules/graf115.ts +17 -0
- package/dist/rules/grafana-helpers.ts +15 -8
- package/dist/rules/literal-secret.ts +60 -6
- package/dist/schema/barchart.gen.d.ts +198 -0
- package/dist/schema/barchart.gen.d.ts.map +1 -0
- package/dist/schema/bargauge.gen.d.ts +97 -0
- package/dist/schema/bargauge.gen.d.ts.map +1 -0
- package/dist/schema/canvas.gen.d.ts +152 -0
- package/dist/schema/canvas.gen.d.ts.map +1 -0
- package/dist/schema/dashboard.gen.d.ts +196 -21
- package/dist/schema/dashboard.gen.d.ts.map +1 -1
- package/dist/schema/expr.gen.d.ts +606 -0
- package/dist/schema/expr.gen.d.ts.map +1 -0
- package/dist/schema/gauge.gen.d.ts.map +1 -1
- package/dist/schema/geomap.gen.d.ts +100 -0
- package/dist/schema/geomap.gen.d.ts.map +1 -0
- package/dist/schema/heatmap.gen.d.ts.map +1 -1
- package/dist/schema/histogram.gen.d.ts +132 -0
- package/dist/schema/histogram.gen.d.ts.map +1 -0
- package/dist/schema/index.d.ts +12 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/logs.gen.d.ts +1 -0
- package/dist/schema/logs.gen.d.ts.map +1 -1
- package/dist/schema/loki.gen.d.ts.map +1 -1
- package/dist/schema/nodegraph.gen.d.ts +49 -0
- package/dist/schema/nodegraph.gen.d.ts.map +1 -0
- package/dist/schema/piechart.gen.d.ts +127 -0
- package/dist/schema/piechart.gen.d.ts.map +1 -0
- package/dist/schema/prometheus.gen.d.ts.map +1 -1
- package/dist/schema/stat.gen.d.ts.map +1 -1
- package/dist/schema/statetimeline.gen.d.ts +124 -0
- package/dist/schema/statetimeline.gen.d.ts.map +1 -0
- package/dist/schema/statushistory.gen.d.ts +114 -0
- package/dist/schema/statushistory.gen.d.ts.map +1 -0
- package/dist/schema/table.gen.d.ts +22 -3
- package/dist/schema/table.gen.d.ts.map +1 -1
- package/dist/schema/tempo.gen.d.ts.map +1 -1
- package/dist/schema/text.gen.d.ts.map +1 -1
- package/dist/schema/timeseries.gen.d.ts +5 -1
- package/dist/schema/timeseries.gen.d.ts.map +1 -1
- package/dist/schema/trend.gen.d.ts +180 -0
- package/dist/schema/trend.gen.d.ts.map +1 -0
- package/dist/schema/xychart.gen.d.ts +145 -0
- package/dist/schema/xychart.gen.d.ts.map +1 -0
- package/dist/schema-validate.d.ts +30 -4
- package/dist/schema-validate.d.ts.map +1 -1
- package/dist/serializer.d.ts +11 -3
- package/dist/serializer.d.ts.map +1 -1
- package/dist/skill-defs.d.ts.map +1 -1
- package/dist/skills/chant-grafana-alerting.md +49 -0
- package/dist/skills/chant-grafana-provisioning.md +3 -3
- package/dist/skills/chant-grafana.md +12 -6
- package/dist/spec/fetch-units-cli.d.ts +3 -0
- package/dist/spec/fetch-units-cli.d.ts.map +1 -0
- package/dist/spec/overlay.d.ts +43 -0
- package/dist/spec/overlay.d.ts.map +1 -0
- package/dist/spec/schemas.d.ts +13 -7
- package/dist/spec/schemas.d.ts.map +1 -1
- package/dist/spec/units.d.ts +35 -0
- package/dist/spec/units.d.ts.map +1 -0
- package/dist/spec/units.gen.d.ts +2 -0
- package/dist/spec/units.gen.d.ts.map +1 -0
- package/dist/transformations.d.ts +459 -0
- package/dist/transformations.d.ts.map +1 -0
- package/dist/util.d.ts +6 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/validate-alerting.d.ts +65 -0
- package/dist/validate-alerting.d.ts.map +1 -0
- package/dist/validate-output.d.ts +49 -9
- package/dist/validate-output.d.ts.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/variables.d.ts +7 -2
- package/dist/variables.d.ts.map +1 -1
- package/package.json +12 -4
- package/src/actions/actions.test.ts +24 -0
- package/src/actions/grafana.ts +40 -0
- package/src/actions/index.ts +1 -0
- package/src/alerting-build.ts +376 -0
- package/src/alerting.e2e.test.ts +212 -0
- package/src/alerting.test.ts +272 -0
- package/src/alerting.ts +435 -0
- package/src/api/apply.test.ts +238 -0
- package/src/api/apply.ts +384 -0
- package/src/api/bind.ts +58 -0
- package/src/api/client.ts +148 -0
- package/src/api/converge.ts +63 -0
- package/src/api/dashboards.ts +247 -0
- package/src/api/datasources.ts +33 -0
- package/src/api/fake-grafana-writes.ts +201 -0
- package/src/api/fake-grafana.ts +186 -0
- package/src/api/folders.ts +265 -0
- package/src/api/library-panels.ts +101 -0
- package/src/build.test.ts +210 -5
- package/src/build.ts +180 -43
- package/src/catalog.ts +86 -2
- package/src/codegen/docs.ts +42 -9
- package/src/codegen/schema-types.ts +16 -6
- package/src/composites/agent-dashboard.ts +6 -3
- package/src/composites/catalog.test.ts +2 -2
- package/src/composites/catalog.ts +82 -0
- package/src/composites/composites.test.ts +73 -9
- package/src/composites/index.ts +4 -2
- package/src/composites/queries.e2e.test.ts +374 -0
- package/src/composites/red-dashboard.ts +83 -12
- package/src/composites/shared.ts +11 -0
- package/src/composites/slo-alert-rules.ts +149 -0
- package/src/config.test.ts +61 -0
- package/src/config.ts +138 -0
- package/src/contact-point-secrets.ts +63 -0
- package/src/dashboard.ts +16 -2
- package/src/datasource-refs.test.ts +56 -0
- package/src/datasource-refs.ts +189 -0
- package/src/datasource.ts +52 -0
- package/src/deep-observe-hooks.ts +252 -0
- package/src/deep-observe.test.ts +265 -0
- package/src/deep-observe.ts +164 -0
- package/src/describe-resources.test.ts +255 -0
- package/src/describe-resources.ts +209 -0
- package/src/detect.ts +79 -2
- package/src/export-resources.test.ts +129 -0
- package/src/export-resources.ts +84 -0
- package/src/generated/lexicon-grafana.json +135 -0
- package/src/import/alerting-roundtrip.test.ts +161 -0
- package/src/import/alerting.ts +500 -0
- package/src/import/edits.ts +95 -0
- package/src/import/embedded.test.ts +45 -0
- package/src/import/embedded.ts +47 -0
- package/src/import/generated-types.e2e.test.ts +118 -0
- package/src/import/generator.test.ts +210 -0
- package/src/import/generator.ts +462 -0
- package/src/import/live-export.ts +264 -0
- package/src/import/mappings.ts +264 -0
- package/src/import/model.ts +110 -0
- package/src/import/normalize-alerting.ts +101 -0
- package/src/import/normalize.test.ts +117 -0
- package/src/import/normalize.ts +364 -0
- package/src/import/parser.test.ts +440 -0
- package/src/import/parser.ts +1236 -0
- package/src/import/report.ts +62 -0
- package/src/import/roundtrip.test.ts +468 -0
- package/src/import/testdata/fixtures.ts +129 -0
- package/src/import/v2.test.ts +292 -0
- package/src/import/v2.ts +803 -0
- package/src/import.e2e.test.ts +31 -84
- package/src/import.test.ts +9 -3
- package/src/index.ts +190 -5
- package/src/k8s.test.ts +98 -0
- package/src/k8s.ts +197 -0
- package/src/lint/audit-catalog.ts +60 -3
- package/src/lint/core-lint.test.ts +43 -0
- package/src/lint/post-synth/graf101.ts +3 -3
- package/src/lint/post-synth/graf102.ts +1 -1
- package/src/lint/post-synth/graf107.ts +1 -1
- package/src/lint/post-synth/graf108.ts +17 -0
- package/src/lint/post-synth/graf109.ts +17 -0
- package/src/lint/post-synth/graf111.ts +17 -0
- package/src/lint/post-synth/graf112.ts +17 -0
- package/src/lint/post-synth/graf113.ts +17 -0
- package/src/lint/post-synth/graf114.ts +17 -0
- package/src/lint/post-synth/graf115.ts +17 -0
- package/src/lint/post-synth/grafana-helpers.ts +15 -8
- package/src/lint/post-synth/index.ts +14 -0
- package/src/lint/post-synth/post-synth.test.ts +235 -11
- package/src/lint/rules/literal-secret.ts +60 -6
- package/src/lint/rules/rules.test.ts +27 -0
- package/src/lsp/completions.test.ts +5 -0
- package/src/lsp/hover.test.ts +7 -0
- package/src/lsp/hover.ts +8 -1
- package/src/members.ts +68 -0
- package/src/observe.e2e.test.ts +255 -0
- package/src/op/activities/grafana-apply.e2e.test.ts +175 -0
- package/src/op/activities/grafana-apply.test.ts +229 -0
- package/src/op/activities/grafana-apply.ts +171 -0
- package/src/op/activities/index.ts +8 -0
- package/src/op/builders.test.ts +40 -0
- package/src/op/builders.ts +34 -0
- package/src/ownership.ts +103 -0
- package/src/panel-options.ts +66 -0
- package/src/panels.test.ts +51 -0
- package/src/panels.ts +148 -10
- package/src/pin.ts +57 -6
- package/src/plugin.test.ts +5 -2
- package/src/plugin.ts +66 -0
- package/src/promql-check.test.ts +108 -0
- package/src/promql-check.ts +189 -0
- package/src/query.ts +13 -8
- package/src/schema/barchart.gen.ts +221 -0
- package/src/schema/bargauge.gen.ts +111 -0
- package/src/schema/canvas.gen.ts +176 -0
- package/src/schema/dashboard.gen.ts +206 -22
- package/src/schema/expr.gen.ts +618 -0
- package/src/schema/gauge.gen.ts +2 -1
- package/src/schema/geomap.gen.ts +112 -0
- package/src/schema/heatmap.gen.ts +2 -1
- package/src/schema/histogram.gen.ts +151 -0
- package/src/schema/index.ts +12 -0
- package/src/schema/logs.gen.ts +3 -1
- package/src/schema/loki.gen.ts +2 -1
- package/src/schema/nodegraph.gen.ts +58 -0
- package/src/schema/piechart.gen.ts +146 -0
- package/src/schema/prometheus.gen.ts +2 -1
- package/src/schema/stat.gen.ts +2 -1
- package/src/schema/statetimeline.gen.ts +143 -0
- package/src/schema/statushistory.gen.ts +132 -0
- package/src/schema/table.gen.ts +27 -4
- package/src/schema/tempo.gen.ts +2 -1
- package/src/schema/text.gen.ts +2 -1
- package/src/schema/timeseries.gen.ts +7 -2
- package/src/schema/trend.gen.ts +208 -0
- package/src/schema/xychart.gen.ts +167 -0
- package/src/schema-overlay.test.ts +282 -0
- package/src/schema-validate.ts +141 -50
- package/src/schema.test.ts +4 -2
- package/src/serializer.test.ts +13 -1
- package/src/serializer.ts +11 -3
- package/src/skill-defs.ts +17 -0
- package/src/skills/chant-grafana-alerting.md +49 -0
- package/src/skills/chant-grafana-provisioning.md +3 -3
- package/src/skills/chant-grafana.md +12 -6
- package/src/spec/fetch-cli.ts +3 -3
- package/src/spec/fetch-units-cli.ts +37 -0
- package/src/spec/overlay/canvas.overlay.json +142 -0
- package/src/spec/overlay/dashboard.overlay.json +378 -0
- package/src/spec/overlay/expr.overlay.json +14 -0
- package/src/spec/overlay/geomap.overlay.json +35 -0
- package/src/spec/overlay/logs.overlay.json +14 -0
- package/src/spec/overlay/nodegraph.overlay.json +31 -0
- package/src/spec/overlay/piechart.overlay.json +17 -0
- package/src/spec/overlay/table.overlay.json +84 -0
- package/src/spec/overlay/timeseries.overlay.json +21 -0
- package/src/spec/overlay/trend.overlay.json +17 -0
- package/src/spec/overlay/xychart.overlay.json +16 -0
- package/src/spec/overlay.ts +105 -0
- package/src/spec/schemas/barchart.jsonschema.json +419 -0
- package/src/spec/schemas/bargauge.jsonschema.json +224 -0
- package/src/spec/schemas/canvas.jsonschema.json +356 -0
- package/src/spec/schemas/dashboardv2.jsonschema.json +3387 -0
- package/src/spec/schemas/expr.jsonschema.json +987 -0
- package/src/spec/schemas/geomap.jsonschema.json +220 -0
- package/src/spec/schemas/histogram.jsonschema.json +308 -0
- package/src/spec/schemas/nodegraph.jsonschema.json +77 -0
- package/src/spec/schemas/piechart.jsonschema.json +275 -0
- package/src/spec/schemas/statetimeline.jsonschema.json +324 -0
- package/src/spec/schemas/statushistory.jsonschema.json +292 -0
- package/src/spec/schemas/trend.jsonschema.json +449 -0
- package/src/spec/schemas/xychart.jsonschema.json +428 -0
- package/src/spec/schemas.ts +22 -10
- package/src/spec/units.gen.ts +281 -0
- package/src/spec/units.ts +77 -0
- package/src/transformations.test.ts +65 -0
- package/src/transformations.ts +574 -0
- package/src/util.ts +8 -0
- package/src/validate-alerting.test.ts +255 -0
- package/src/validate-alerting.ts +428 -0
- package/src/validate-output.ts +332 -101
- package/src/validate.ts +14 -0
- package/src/variables.ts +7 -2
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
// Generated by `just fetch-units` (src/spec/fetch-units-cli.ts). Do not edit.
|
|
2
|
+
// Source: https://github.com/grafana/grafana/blob/v13.2.2/packages/grafana-data/src/valueFormats/categories.ts
|
|
3
|
+
// Commit 3db12332b66497c31f8ad2a5fb0eb0fe0ca05a7e, sha256 5ce5651bfb5bfee2d3134fa1a664e9568a4a19689479e5d9bae643f068f3bfcb.
|
|
4
|
+
// The ids Grafana's getValueFormat() indexes, plus the legacy aliases it resolves (valueFormats.ts).
|
|
5
|
+
|
|
6
|
+
export const GRAFANA_UNIT_IDS: readonly string[] = [
|
|
7
|
+
"none",
|
|
8
|
+
"string",
|
|
9
|
+
"short",
|
|
10
|
+
"sishort",
|
|
11
|
+
"percent",
|
|
12
|
+
"percentunit",
|
|
13
|
+
"humidity",
|
|
14
|
+
"dB",
|
|
15
|
+
"candela",
|
|
16
|
+
"hex0x",
|
|
17
|
+
"hex",
|
|
18
|
+
"sci",
|
|
19
|
+
"locale",
|
|
20
|
+
"pixel",
|
|
21
|
+
"accMS2",
|
|
22
|
+
"accFS2",
|
|
23
|
+
"accG",
|
|
24
|
+
"degree",
|
|
25
|
+
"radian",
|
|
26
|
+
"grad",
|
|
27
|
+
"arcmin",
|
|
28
|
+
"arcsec",
|
|
29
|
+
"areaM2",
|
|
30
|
+
"areaF2",
|
|
31
|
+
"areaMI2",
|
|
32
|
+
"acres",
|
|
33
|
+
"hectares",
|
|
34
|
+
"flops",
|
|
35
|
+
"mflops",
|
|
36
|
+
"gflops",
|
|
37
|
+
"tflops",
|
|
38
|
+
"pflops",
|
|
39
|
+
"eflops",
|
|
40
|
+
"zflops",
|
|
41
|
+
"yflops",
|
|
42
|
+
"ppm",
|
|
43
|
+
"conppb",
|
|
44
|
+
"conngm3",
|
|
45
|
+
"conngNm3",
|
|
46
|
+
"conμgm3",
|
|
47
|
+
"conμgNm3",
|
|
48
|
+
"conmgm3",
|
|
49
|
+
"conmgNm3",
|
|
50
|
+
"congm3",
|
|
51
|
+
"congNm3",
|
|
52
|
+
"conmgdL",
|
|
53
|
+
"conmmolL",
|
|
54
|
+
"currencyUSD",
|
|
55
|
+
"currencyGBP",
|
|
56
|
+
"currencyEUR",
|
|
57
|
+
"currencyJPY",
|
|
58
|
+
"currencyRUB",
|
|
59
|
+
"currencyUAH",
|
|
60
|
+
"currencyBRL",
|
|
61
|
+
"currencyDKK",
|
|
62
|
+
"currencyISK",
|
|
63
|
+
"currencyNOK",
|
|
64
|
+
"currencySEK",
|
|
65
|
+
"currencyCZK",
|
|
66
|
+
"currencyCHF",
|
|
67
|
+
"currencyPLN",
|
|
68
|
+
"currencyBTC",
|
|
69
|
+
"currencymBTC",
|
|
70
|
+
"currencyμBTC",
|
|
71
|
+
"currencyZAR",
|
|
72
|
+
"currencyINR",
|
|
73
|
+
"currencyKRW",
|
|
74
|
+
"currencyIDR",
|
|
75
|
+
"currencyPHP",
|
|
76
|
+
"currencyVND",
|
|
77
|
+
"currencyTRY",
|
|
78
|
+
"currencyMYR",
|
|
79
|
+
"currencyXPF",
|
|
80
|
+
"currencyBGN",
|
|
81
|
+
"currencyPYG",
|
|
82
|
+
"currencyUYU",
|
|
83
|
+
"currencyILS",
|
|
84
|
+
"bytes",
|
|
85
|
+
"decbytes",
|
|
86
|
+
"bits",
|
|
87
|
+
"decbits",
|
|
88
|
+
"kbytes",
|
|
89
|
+
"deckbytes",
|
|
90
|
+
"mbytes",
|
|
91
|
+
"decmbytes",
|
|
92
|
+
"gbytes",
|
|
93
|
+
"decgbytes",
|
|
94
|
+
"tbytes",
|
|
95
|
+
"dectbytes",
|
|
96
|
+
"pbytes",
|
|
97
|
+
"decpbytes",
|
|
98
|
+
"pps",
|
|
99
|
+
"binBps",
|
|
100
|
+
"Bps",
|
|
101
|
+
"binbps",
|
|
102
|
+
"bps",
|
|
103
|
+
"KiBs",
|
|
104
|
+
"Kibits",
|
|
105
|
+
"KBs",
|
|
106
|
+
"Kbits",
|
|
107
|
+
"MiBs",
|
|
108
|
+
"Mibits",
|
|
109
|
+
"MBs",
|
|
110
|
+
"Mbits",
|
|
111
|
+
"GiBs",
|
|
112
|
+
"Gibits",
|
|
113
|
+
"GBs",
|
|
114
|
+
"Gbits",
|
|
115
|
+
"TiBs",
|
|
116
|
+
"Tibits",
|
|
117
|
+
"TBs",
|
|
118
|
+
"Tbits",
|
|
119
|
+
"PiBs",
|
|
120
|
+
"Pibits",
|
|
121
|
+
"PBs",
|
|
122
|
+
"Pbits",
|
|
123
|
+
"dateTimeAsIso",
|
|
124
|
+
"dateTimeAsIsoNoDateIfToday",
|
|
125
|
+
"dateTimeAsUS",
|
|
126
|
+
"dateTimeAsUSNoDateIfToday",
|
|
127
|
+
"dateTimeAsLocal",
|
|
128
|
+
"dateTimeAsLocalNoDateIfToday",
|
|
129
|
+
"dateTimeAsSystem",
|
|
130
|
+
"dateTimeFromNow",
|
|
131
|
+
"watt",
|
|
132
|
+
"kwatt",
|
|
133
|
+
"megwatt",
|
|
134
|
+
"gwatt",
|
|
135
|
+
"mwatt",
|
|
136
|
+
"Wm2",
|
|
137
|
+
"voltamp",
|
|
138
|
+
"kvoltamp",
|
|
139
|
+
"voltampreact",
|
|
140
|
+
"kvoltampreact",
|
|
141
|
+
"watth",
|
|
142
|
+
"watthperkg",
|
|
143
|
+
"kwatth",
|
|
144
|
+
"kwattm",
|
|
145
|
+
"mwatth",
|
|
146
|
+
"amph",
|
|
147
|
+
"kamph",
|
|
148
|
+
"mamph",
|
|
149
|
+
"joule",
|
|
150
|
+
"ev",
|
|
151
|
+
"amp",
|
|
152
|
+
"kamp",
|
|
153
|
+
"mamp",
|
|
154
|
+
"volt",
|
|
155
|
+
"kvolt",
|
|
156
|
+
"mvolt",
|
|
157
|
+
"dBm",
|
|
158
|
+
"mohm",
|
|
159
|
+
"ohm",
|
|
160
|
+
"kohm",
|
|
161
|
+
"Mohm",
|
|
162
|
+
"farad",
|
|
163
|
+
"µfarad",
|
|
164
|
+
"nfarad",
|
|
165
|
+
"pfarad",
|
|
166
|
+
"ffarad",
|
|
167
|
+
"henry",
|
|
168
|
+
"mhenry",
|
|
169
|
+
"µhenry",
|
|
170
|
+
"lumens",
|
|
171
|
+
"flowgpm",
|
|
172
|
+
"flowcms",
|
|
173
|
+
"flowcfs",
|
|
174
|
+
"flowcfm",
|
|
175
|
+
"litreh",
|
|
176
|
+
"flowlpm",
|
|
177
|
+
"flowmlpm",
|
|
178
|
+
"lux",
|
|
179
|
+
"forceNm",
|
|
180
|
+
"forcekNm",
|
|
181
|
+
"forceN",
|
|
182
|
+
"forcekN",
|
|
183
|
+
"Hs",
|
|
184
|
+
"KHs",
|
|
185
|
+
"MHs",
|
|
186
|
+
"GHs",
|
|
187
|
+
"THs",
|
|
188
|
+
"PHs",
|
|
189
|
+
"EHs",
|
|
190
|
+
"massmg",
|
|
191
|
+
"massg",
|
|
192
|
+
"masslb",
|
|
193
|
+
"masskg",
|
|
194
|
+
"masst",
|
|
195
|
+
"lengthmm",
|
|
196
|
+
"lengthcm",
|
|
197
|
+
"lengthin",
|
|
198
|
+
"lengthft",
|
|
199
|
+
"lengthm",
|
|
200
|
+
"lengthkm",
|
|
201
|
+
"lengthmi",
|
|
202
|
+
"pressurembar",
|
|
203
|
+
"pressurebar",
|
|
204
|
+
"pressurekbar",
|
|
205
|
+
"pressurepa",
|
|
206
|
+
"pressurehpa",
|
|
207
|
+
"pressurekpa",
|
|
208
|
+
"pressurehg",
|
|
209
|
+
"pressurepsi",
|
|
210
|
+
"radbq",
|
|
211
|
+
"radci",
|
|
212
|
+
"radgy",
|
|
213
|
+
"radrad",
|
|
214
|
+
"radsv",
|
|
215
|
+
"radmsv",
|
|
216
|
+
"radusv",
|
|
217
|
+
"radrem",
|
|
218
|
+
"radexpckg",
|
|
219
|
+
"radr",
|
|
220
|
+
"radsvh",
|
|
221
|
+
"radmsvh",
|
|
222
|
+
"radusvh",
|
|
223
|
+
"rotrpm",
|
|
224
|
+
"rothz",
|
|
225
|
+
"rotkhz",
|
|
226
|
+
"rotmhz",
|
|
227
|
+
"rotghz",
|
|
228
|
+
"rotrads",
|
|
229
|
+
"rotdegs",
|
|
230
|
+
"celsius",
|
|
231
|
+
"fahrenheit",
|
|
232
|
+
"kelvin",
|
|
233
|
+
"hertz",
|
|
234
|
+
"ns",
|
|
235
|
+
"µs",
|
|
236
|
+
"ms",
|
|
237
|
+
"s",
|
|
238
|
+
"m",
|
|
239
|
+
"h",
|
|
240
|
+
"d",
|
|
241
|
+
"dtdurationms",
|
|
242
|
+
"dtdurations",
|
|
243
|
+
"dthms",
|
|
244
|
+
"dtdhms",
|
|
245
|
+
"timeticks",
|
|
246
|
+
"clockms",
|
|
247
|
+
"clocks",
|
|
248
|
+
"cps",
|
|
249
|
+
"ops",
|
|
250
|
+
"reqps",
|
|
251
|
+
"rps",
|
|
252
|
+
"wps",
|
|
253
|
+
"iops",
|
|
254
|
+
"eps",
|
|
255
|
+
"mps",
|
|
256
|
+
"recps",
|
|
257
|
+
"rowsps",
|
|
258
|
+
"cpm",
|
|
259
|
+
"opm",
|
|
260
|
+
"reqpm",
|
|
261
|
+
"rpm",
|
|
262
|
+
"wpm",
|
|
263
|
+
"epm",
|
|
264
|
+
"mpm",
|
|
265
|
+
"recpm",
|
|
266
|
+
"rowspm",
|
|
267
|
+
"velocityms",
|
|
268
|
+
"velocitykmh",
|
|
269
|
+
"velocitymph",
|
|
270
|
+
"velocityknot",
|
|
271
|
+
"mlitre",
|
|
272
|
+
"litre",
|
|
273
|
+
"m3",
|
|
274
|
+
"Nm3",
|
|
275
|
+
"dm3",
|
|
276
|
+
"gallons",
|
|
277
|
+
"bool",
|
|
278
|
+
"bool_yes_no",
|
|
279
|
+
"bool_on_off",
|
|
280
|
+
"farenheit",
|
|
281
|
+
];
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The units Grafana knows, for GRAF115.
|
|
3
|
+
*
|
|
4
|
+
* A field's `unit` is a free string in the dashboard schema. Grafana looks it
|
|
5
|
+
* up in its value-format registry (`getValueFormat()` in
|
|
6
|
+
* `packages/grafana-data/src/valueFormats/valueFormats.ts`): a registered id
|
|
7
|
+
* formats the value, `<kind>:<arg>` builds a custom unit, and anything else is
|
|
8
|
+
* shown after the value as a literal suffix. So `"byte"` renders `5 byte`
|
|
9
|
+
* where `"bytes"` would render `5 B`, and nothing complains.
|
|
10
|
+
*
|
|
11
|
+
* The ids in `units.gen.ts` are taken from the registry at
|
|
12
|
+
* `GRAFANA_UNITS_SOURCE` by `just fetch-units`.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { GRAFANA_UNIT_IDS } from "./units.gen";
|
|
16
|
+
|
|
17
|
+
export const GRAFANA_UNITS_SOURCE = Object.freeze({
|
|
18
|
+
repo: "grafana/grafana",
|
|
19
|
+
ref: "v13.2.2",
|
|
20
|
+
commit: "3db12332b66497c31f8ad2a5fb0eb0fe0ca05a7e",
|
|
21
|
+
path: "packages/grafana-data/src/valueFormats/categories.ts",
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
/** Old ids `buildFormats()` in valueFormats.ts still resolves (v13.2.2). */
|
|
25
|
+
export const LEGACY_UNIT_ALIASES: readonly string[] = ["farenheit"];
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The `<kind>:` prefixes `getValueFormat()` turns into a custom unit
|
|
29
|
+
* (v13.2.2): `prefix:$`, `suffix: req`, `time:YYYY-MM-DD`, `si:mF`,
|
|
30
|
+
* `count:reqs`, `currency:€` (or `currency:financial:€[:suffix]`) and
|
|
31
|
+
* `bool:yes/no`.
|
|
32
|
+
*/
|
|
33
|
+
export const CUSTOM_UNIT_KINDS: readonly string[] = ["prefix", "suffix", "time", "si", "count", "currency", "bool"];
|
|
34
|
+
|
|
35
|
+
const KNOWN = new Set(GRAFANA_UNIT_IDS);
|
|
36
|
+
|
|
37
|
+
export { GRAFANA_UNIT_IDS };
|
|
38
|
+
|
|
39
|
+
/** Whether Grafana formats `unit` as a unit rather than showing it as a literal suffix. An empty unit means none. */
|
|
40
|
+
export function isGrafanaUnit(unit: string): boolean {
|
|
41
|
+
if (unit === "" || KNOWN.has(unit)) return true;
|
|
42
|
+
const colon = unit.indexOf(":");
|
|
43
|
+
return colon > 0 && CUSTOM_UNIT_KINDS.includes(unit.slice(0, colon));
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function distance(a: string, b: string): number {
|
|
47
|
+
const row = Array.from({ length: b.length + 1 }, (_, j) => j);
|
|
48
|
+
for (let i = 1; i <= a.length; i++) {
|
|
49
|
+
let prev = row[0];
|
|
50
|
+
row[0] = i;
|
|
51
|
+
for (let j = 1; j <= b.length; j++) {
|
|
52
|
+
const next = row[j];
|
|
53
|
+
row[j] = Math.min(row[j] + 1, row[j - 1] + 1, prev + (a[i - 1] === b[j - 1] ? 0 : 1));
|
|
54
|
+
prev = next;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return row[b.length];
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** The registered id `unit` most likely meant: same letters in another case, or one or two edits away. */
|
|
61
|
+
export function closestGrafanaUnit(unit: string): string | undefined {
|
|
62
|
+
const lower = unit.toLowerCase();
|
|
63
|
+
const sameCase = GRAFANA_UNIT_IDS.filter((id) => id.toLowerCase() === lower);
|
|
64
|
+
if (sameCase.length === 1) return sameCase[0];
|
|
65
|
+
if (unit.length < 3) return undefined;
|
|
66
|
+
let best: string | undefined;
|
|
67
|
+
let bestDistance = Math.min(2, Math.floor(unit.length / 3));
|
|
68
|
+
for (const id of GRAFANA_UNIT_IDS) {
|
|
69
|
+
if (LEGACY_UNIT_ALIASES.includes(id)) continue;
|
|
70
|
+
const d = distance(lower, id.toLowerCase());
|
|
71
|
+
if (d < bestDistance || (d === bestDistance && best === undefined)) {
|
|
72
|
+
best = id;
|
|
73
|
+
bestDistance = d;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return best;
|
|
77
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { TRANSFORMATION_IDS, customTransformation, transformation, untypedTransformationReason, type Transformation } from "./transformations";
|
|
3
|
+
import { TablePanel } from "./panels";
|
|
4
|
+
import { Dashboard } from "./dashboard";
|
|
5
|
+
import { dashboardJson } from "./build";
|
|
6
|
+
|
|
7
|
+
describe("transformation types", () => {
|
|
8
|
+
test("cover every transformer Grafana v13.2.2 registers (DataTransformerID less the unregistered append)", () => {
|
|
9
|
+
// packages/grafana-data/src/transformations/transformers/ids.ts at v13.2.2.
|
|
10
|
+
const ids =
|
|
11
|
+
"reduce order organize rename calculateField seriesToColumns seriesToRows merge concatenate labelsToFields filterFields " +
|
|
12
|
+
"filterFieldsByName filterFrames filterByRefId renameByRegex filterByValue noop ensureColumns groupBy sortBy histogram " +
|
|
13
|
+
"configFromData rowsToFields prepareTimeSeries convertFieldType convertFrameType fieldLookup heatmap spatial joinByField " +
|
|
14
|
+
"joinByLabels extractFields groupingToMatrix limit partitionByValues timeSeriesTable transpose formatTime formatString " +
|
|
15
|
+
"regression smoothing groupToNestedTable";
|
|
16
|
+
expect([...TRANSFORMATION_IDS].sort()).toEqual(ids.split(" ").sort());
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("typed transformations, the helper and the escape hatch serialize as Grafana stores them", () => {
|
|
20
|
+
const transformations: Transformation[] = [
|
|
21
|
+
{ id: "organize", options: { excludeByName: { Time: true }, renameByName: { Value: "Requests" } } },
|
|
22
|
+
transformation("reduce", { reducers: ["max", "p95"], mode: "reduceFields" }, { disabled: true }),
|
|
23
|
+
transformation("merge"),
|
|
24
|
+
customTransformation("my-plugin-transformer", { level: 3 }, { topic: "annotations" }),
|
|
25
|
+
];
|
|
26
|
+
const d = new Dashboard({ title: "T", uid: "t", panels: [new TablePanel({ title: "p", transformations })] });
|
|
27
|
+
const panel = (JSON.parse(dashboardJson(d)) as { panels: Array<{ transformations: unknown }> }).panels[0];
|
|
28
|
+
expect(panel.transformations).toEqual([
|
|
29
|
+
{ id: "organize", options: { excludeByName: { Time: true }, renameByName: { Value: "Requests" } } },
|
|
30
|
+
{ id: "reduce", options: { reducers: ["max", "p95"], mode: "reduceFields" }, disabled: true },
|
|
31
|
+
{ id: "merge", options: {} },
|
|
32
|
+
{ id: "my-plugin-transformer", options: { level: 3 }, topic: "annotations" },
|
|
33
|
+
]);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("the types reject an unknown id, an unknown option and a bad enum value", () => {
|
|
37
|
+
const bad: Transformation[] = [
|
|
38
|
+
// @ts-expect-error: not a transformer Grafana registers; customTransformation() takes one
|
|
39
|
+
{ id: "my-plugin-transformer", options: {} },
|
|
40
|
+
// @ts-expect-error: organize has excludeByName, not excludeByname
|
|
41
|
+
{ id: "organize", options: { excludeByname: {} } },
|
|
42
|
+
// @ts-expect-error: not a ReducerID
|
|
43
|
+
{ id: "reduce", options: { reducers: ["maximum"] } },
|
|
44
|
+
];
|
|
45
|
+
// @ts-expect-error: sortBy takes `sort`, not `fields`; the helper checks against the one transformer
|
|
46
|
+
transformation("sortBy", { fields: {} });
|
|
47
|
+
expect(bad).toHaveLength(3);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
describe("untypedTransformationReason, which the importer uses", () => {
|
|
52
|
+
test("is undefined for what the types hold", () => {
|
|
53
|
+
expect(untypedTransformationReason({ id: "organize", options: { excludeByName: {}, indexByName: {} }, disabled: false })).toBeUndefined();
|
|
54
|
+
expect(untypedTransformationReason({ id: "merge", options: {} })).toBeUndefined();
|
|
55
|
+
expect(untypedTransformationReason({ id: "timeSeriesTable", options: { A: { stat: "mean" } } })).toBeUndefined();
|
|
56
|
+
expect(untypedTransformationReason({ id: "limit" })).toBeUndefined();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("names what they don't", () => {
|
|
60
|
+
expect(untypedTransformationReason({ id: "grafana-plugin-x", options: {} })).toBe('"grafana-plugin-x" is not a transformer Grafana v13.2.2 registers');
|
|
61
|
+
expect(untypedTransformationReason({ id: "sortBy", options: { fields: {}, sort: [] } })).toBe('the sortBy transformer takes no option "fields"');
|
|
62
|
+
expect(untypedTransformationReason({ id: "merge", options: {}, name: "x" })).toBe('it has "name" beside its id and options');
|
|
63
|
+
expect(untypedTransformationReason({ id: "reduce", options: [] })).toBe("its options are not an object");
|
|
64
|
+
});
|
|
65
|
+
});
|