@intentius/chant-lexicon-grafana 0.99.0 → 0.100.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 +12 -6
- package/dist/annotations.d.ts +61 -0
- package/dist/annotations.d.ts.map +1 -0
- package/dist/api/apply.d.ts +8 -4
- package/dist/api/apply.d.ts.map +1 -1
- package/dist/api/fake-grafana.d.ts +2 -0
- package/dist/api/fake-grafana.d.ts.map +1 -1
- package/dist/api/folders.d.ts +53 -17
- package/dist/api/folders.d.ts.map +1 -1
- package/dist/build.d.ts +26 -5
- 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/generate.d.ts +7 -1
- package/dist/codegen/generate.d.ts.map +1 -1
- package/dist/composites/shared.d.ts +4 -3
- package/dist/composites/shared.d.ts.map +1 -1
- package/dist/dashboard.d.ts +42 -14
- package/dist/dashboard.d.ts.map +1 -1
- package/dist/datasource-refs.d.ts +9 -5
- package/dist/datasource-refs.d.ts.map +1 -1
- package/dist/datasource-settings.d.ts +834 -0
- package/dist/datasource-settings.d.ts.map +1 -0
- package/dist/datasource.d.ts +53 -11
- package/dist/datasource.d.ts.map +1 -1
- package/dist/deep-observe-hooks.d.ts +1 -1
- package/dist/deep-observe-hooks.d.ts.map +1 -1
- package/dist/deep-observe.d.ts +9 -4
- package/dist/deep-observe.d.ts.map +1 -1
- package/dist/describe-resources.d.ts +1 -0
- package/dist/describe-resources.d.ts.map +1 -1
- package/dist/detect.d.ts +4 -2
- package/dist/detect.d.ts.map +1 -1
- package/dist/folder.d.ts +68 -0
- package/dist/folder.d.ts.map +1 -0
- package/dist/import/generator.d.ts.map +1 -1
- package/dist/import/mappings.d.ts +12 -6
- package/dist/import/mappings.d.ts.map +1 -1
- package/dist/import/model.d.ts +7 -0
- package/dist/import/model.d.ts.map +1 -1
- package/dist/import/normalize.d.ts.map +1 -1
- package/dist/import/parser.d.ts +16 -1
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/import/testdata/fixtures.d.ts +6 -0
- package/dist/import/testdata/fixtures.d.ts.map +1 -1
- package/dist/import/v2.d.ts +4 -3
- package/dist/import/v2.d.ts.map +1 -1
- package/dist/index.d.ts +11 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/init-templates.d.ts +27 -0
- package/dist/init-templates.d.ts.map +1 -0
- package/dist/integrity.json +11 -9
- package/dist/lint/audit-catalog.d.ts +1 -1
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/post-synth/graf101.d.ts +1 -1
- package/dist/lint/post-synth/graf104.d.ts +2 -2
- package/dist/lint/post-synth/graf106.d.ts +2 -2
- package/dist/lint/post-synth/graf110.d.ts +8 -0
- package/dist/lint/post-synth/graf110.d.ts.map +1 -0
- 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/manifest.json +1 -1
- package/dist/meta.json +70 -0
- package/dist/okf/index.md +18 -3
- package/dist/okf/rules/GRAF101.md +2 -2
- package/dist/okf/rules/GRAF104.md +2 -2
- package/dist/okf/rules/GRAF106.md +2 -2
- package/dist/okf/rules/GRAF110.md +11 -0
- package/dist/okf/types/AdhocVariable.md +9 -0
- package/dist/okf/types/AzureMonitorQuery.md +9 -0
- package/dist/okf/types/BigQueryQuery.md +9 -0
- package/dist/okf/types/CloudMonitoringQuery.md +9 -0
- package/dist/okf/types/CloudWatchQuery.md +9 -0
- package/dist/okf/types/Dashboard.md +1 -1
- package/dist/okf/types/Datasource.md +1 -1
- package/dist/okf/types/DatasourceProvisioning.md +9 -0
- package/dist/okf/types/ElasticsearchQuery.md +9 -0
- package/dist/okf/types/ExternalDatasource.md +1 -1
- package/dist/okf/types/Folder.md +9 -0
- package/dist/okf/types/GroupByVariable.md +9 -0
- package/dist/okf/types/MSSQLQuery.md +9 -0
- package/dist/okf/types/MySQLQuery.md +9 -0
- package/dist/okf/types/PostgresQuery.md +9 -0
- package/dist/okf/types/PyroscopeQuery.md +9 -0
- package/dist/okf/types/SwitchVariable.md +9 -0
- package/dist/op/activities/grafana-apply.d.ts +11 -0
- package/dist/op/activities/grafana-apply.d.ts.map +1 -1
- package/dist/op/activities/index.d.ts +1 -1
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/ownership.d.ts +11 -0
- package/dist/ownership.d.ts.map +1 -1
- package/dist/pin.d.ts +1 -1
- package/dist/pin.d.ts.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/promql-check.d.ts.map +1 -1
- package/dist/query-models.d.ts +95 -0
- package/dist/query-models.d.ts.map +1 -0
- package/dist/query.d.ts +107 -10
- package/dist/query.d.ts.map +1 -1
- package/dist/rules/graf101.ts +2 -2
- package/dist/rules/graf104.ts +3 -3
- package/dist/rules/graf106.ts +3 -3
- package/dist/rules/graf110.ts +17 -0
- package/dist/rules/grafana-helpers.ts +13 -3
- package/dist/schema/azuremonitor.gen.d.ts +354 -0
- package/dist/schema/azuremonitor.gen.d.ts.map +1 -0
- package/dist/schema/bigquery.gen.d.ts +93 -0
- package/dist/schema/bigquery.gen.d.ts.map +1 -0
- package/dist/schema/cloudwatch.gen.d.ts +394 -0
- package/dist/schema/cloudwatch.gen.d.ts.map +1 -0
- package/dist/schema/elasticsearch.gen.d.ts +444 -0
- package/dist/schema/elasticsearch.gen.d.ts.map +1 -0
- package/dist/schema/googlecloudmonitoring.gen.d.ts +312 -0
- package/dist/schema/googlecloudmonitoring.gen.d.ts.map +1 -0
- package/dist/schema/grafanapyroscope.gen.d.ts +60 -0
- package/dist/schema/grafanapyroscope.gen.d.ts.map +1 -0
- package/dist/schema/index.d.ts +6 -0
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/table.gen.d.ts +13 -0
- package/dist/schema/table.gen.d.ts.map +1 -1
- package/dist/schema-validate.d.ts +9 -0
- package/dist/schema-validate.d.ts.map +1 -1
- package/dist/skill-defs.d.ts.map +1 -1
- package/dist/skills/chant-grafana-operations.md +108 -0
- package/dist/skills/chant-grafana.md +5 -4
- package/dist/spec/schemas.d.ts +9 -7
- package/dist/spec/schemas.d.ts.map +1 -1
- package/dist/spec/schemas.gen.d.ts +3 -0
- package/dist/spec/schemas.gen.d.ts.map +1 -0
- package/dist/validate-alerting.d.ts.map +1 -1
- package/dist/validate-output.d.ts +15 -2
- package/dist/validate-output.d.ts.map +1 -1
- package/dist/validate.d.ts.map +1 -1
- package/dist/validation.d.ts +14 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/variables.d.ts +102 -5
- package/dist/variables.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/annotations.ts +84 -0
- package/src/api/apply.test.ts +19 -1
- package/src/api/apply.ts +18 -8
- package/src/api/fake-grafana.ts +6 -2
- package/src/api/folders.ts +106 -32
- package/src/build.test.ts +142 -6
- package/src/build.ts +126 -24
- package/src/catalog.ts +20 -2
- package/src/codegen/docs.ts +13 -6
- package/src/codegen/generate.ts +27 -1
- package/src/composites/shared.ts +3 -2
- package/src/dashboard.ts +59 -14
- package/src/datasource-refs.ts +30 -6
- package/src/datasource-settings.test.ts +106 -0
- package/src/datasource-settings.ts +941 -0
- package/src/datasource.ts +71 -11
- package/src/deep-observe-hooks.ts +16 -1
- package/src/deep-observe.test.ts +47 -1
- package/src/deep-observe.ts +36 -13
- package/src/describe-resources.test.ts +16 -0
- package/src/describe-resources.ts +36 -1
- package/src/detect.ts +3 -3
- package/src/folder.ts +118 -0
- package/src/generated/lexicon-grafana.json +70 -0
- package/src/import/generated-types.e2e.test.ts +15 -3
- package/src/import/generator.ts +2 -1
- package/src/import/mappings.ts +98 -26
- package/src/import/model.ts +7 -0
- package/src/import/normalize.ts +32 -3
- package/src/import/parser.test.ts +97 -21
- package/src/import/parser.ts +169 -18
- package/src/import/roundtrip.test.ts +104 -9
- package/src/import/testdata/fixtures.ts +8 -0
- package/src/import/v2.ts +4 -3
- package/src/index.ts +122 -13
- package/src/init-templates.test.ts +74 -0
- package/src/init-templates.ts +349 -0
- package/src/lint/audit-catalog.ts +9 -1
- package/src/lint/post-synth/graf101.ts +2 -2
- package/src/lint/post-synth/graf104.ts +3 -3
- package/src/lint/post-synth/graf106.ts +3 -3
- package/src/lint/post-synth/graf110.ts +17 -0
- package/src/lint/post-synth/grafana-helpers.ts +13 -3
- package/src/lint/post-synth/index.ts +2 -0
- package/src/lint/post-synth/post-synth.test.ts +99 -2
- package/src/load-cost.test.ts +35 -0
- package/src/op/activities/grafana-apply.e2e.test.ts +14 -5
- package/src/op/activities/grafana-apply.test.ts +16 -2
- package/src/op/activities/grafana-apply.ts +29 -3
- package/src/op/activities/index.ts +1 -1
- package/src/ownership.ts +19 -0
- package/src/panels.test.ts +3 -1
- package/src/pin.ts +12 -0
- package/src/plugin.test.ts +9 -2
- package/src/plugin.ts +9 -0
- package/src/promql-check.ts +5 -1
- package/src/query-models.ts +94 -0
- package/src/query.test.ts +166 -0
- package/src/query.ts +177 -12
- package/src/schema/azuremonitor.gen.ts +381 -0
- package/src/schema/bigquery.gen.ts +110 -0
- package/src/schema/cloudwatch.gen.ts +423 -0
- package/src/schema/elasticsearch.gen.ts +508 -0
- package/src/schema/googlecloudmonitoring.gen.ts +330 -0
- package/src/schema/grafanapyroscope.gen.ts +66 -0
- package/src/schema/index.ts +6 -0
- package/src/schema/table.gen.ts +14 -0
- package/src/schema-validate.ts +58 -7
- package/src/skill-defs.ts +17 -0
- package/src/skills/chant-grafana-operations.md +108 -0
- package/src/skills/chant-grafana.md +5 -4
- package/src/spec/overlay/table.overlay.json +19 -0
- package/src/spec/schemas/azuremonitor.jsonschema.json +679 -0
- package/src/spec/schemas/bigquery.jsonschema.json +290 -0
- package/src/spec/schemas/cloudwatch.jsonschema.json +721 -0
- package/src/spec/schemas/elasticsearch.jsonschema.json +1695 -0
- package/src/spec/schemas/googlecloudmonitoring.jsonschema.json +488 -0
- package/src/spec/schemas/grafanapyroscope.jsonschema.json +93 -0
- package/src/spec/schemas.gen.ts +40 -0
- package/src/spec/schemas.ts +9 -7
- package/src/validate-alerting.ts +4 -2
- package/src/validate-output.ts +96 -4
- package/src/validate.ts +14 -0
- package/src/validation.ts +27 -0
- package/src/variables.ts +113 -6
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed `jsonData` and `secureJsonData` (#2951): the types reject what the
|
|
3
|
+
* plugin does not read, a link to another datasource takes only a plugin
|
|
4
|
+
* type Grafana offers there, and the build writes a linked datasource as
|
|
5
|
+
* its uid. The `@ts-expect-error` lines are checked by scripts/typecheck.ts.
|
|
6
|
+
*/
|
|
7
|
+
import { describe, expect, test } from "vitest";
|
|
8
|
+
import { load } from "js-yaml";
|
|
9
|
+
import type { Declarable } from "@intentius/chant/declarable";
|
|
10
|
+
import { Datasource, ExternalDatasource } from "./datasource";
|
|
11
|
+
import { buildGrafana, DATASOURCES_FILE } from "./build";
|
|
12
|
+
import { JSONDATA_LINKS, type DatasourceJsonDataTypes } from "./datasource-settings";
|
|
13
|
+
import { registeredQueries } from "./query";
|
|
14
|
+
|
|
15
|
+
const tempo = new Datasource({ name: "Tempo", type: "tempo", url: "http://tempo:3200" });
|
|
16
|
+
const loki = new Datasource({
|
|
17
|
+
name: "Loki",
|
|
18
|
+
type: "loki",
|
|
19
|
+
jsonData: { maxLines: "1000", derivedFields: [{ name: "traceID", matcherRegex: "traceID=(\\w+)", datasourceUid: tempo }] },
|
|
20
|
+
});
|
|
21
|
+
const pyroscope = new ExternalDatasource({ type: "grafana-pyroscope-datasource", uid: "pyro" });
|
|
22
|
+
const prometheus = new Datasource({
|
|
23
|
+
name: "Prometheus",
|
|
24
|
+
type: "prometheus",
|
|
25
|
+
jsonData: {
|
|
26
|
+
httpMethod: "POST",
|
|
27
|
+
prometheusType: "Mimir",
|
|
28
|
+
timeout: 60,
|
|
29
|
+
httpHeaderName1: "X-Scope-OrgID",
|
|
30
|
+
exemplarTraceIdDestinations: [{ name: "trace_id", datasourceUid: tempo }],
|
|
31
|
+
},
|
|
32
|
+
secureJsonData: { basicAuthPassword: "$__env{PROM_PASSWORD}", httpHeaderValue1: "$__env{TENANT}" },
|
|
33
|
+
});
|
|
34
|
+
const tempoLinked = new Datasource({
|
|
35
|
+
name: "Tempo linked",
|
|
36
|
+
type: "tempo",
|
|
37
|
+
jsonData: {
|
|
38
|
+
tracesToLogsV2: { datasourceUid: loki, customQuery: false, filterByTraceID: true },
|
|
39
|
+
tracesToMetrics: { datasourceUid: prometheus, queries: [{ name: "Rate", query: "sum(rate(x[5m]))" }] },
|
|
40
|
+
tracesToProfiles: { datasourceUid: pyroscope, profileTypeId: "process_cpu:cpu:nanoseconds:cpu:nanoseconds" },
|
|
41
|
+
serviceMap: { datasourceUid: prometheus },
|
|
42
|
+
nodeGraph: { enabled: true },
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
describe("typed datasource settings", () => {
|
|
47
|
+
test("a linked datasource is written as its uid", () => {
|
|
48
|
+
const built = buildGrafana(new Map<string, Declarable>([["tempo", tempo], ["loki", loki], ["prometheus", prometheus], ["tempoLinked", tempoLinked], ["pyroscope", pyroscope]]));
|
|
49
|
+
const yaml = load(built.files[DATASOURCES_FILE]) as { datasources: Array<{ name: string; jsonData?: Record<string, unknown> }> };
|
|
50
|
+
const by = (name: string) => yaml.datasources.find((d) => d.name === name)!.jsonData;
|
|
51
|
+
expect(by("Prometheus")?.exemplarTraceIdDestinations).toEqual([{ name: "trace_id", datasourceUid: "tempo" }]);
|
|
52
|
+
expect(by("Loki")?.derivedFields).toEqual([{ name: "traceID", matcherRegex: "traceID=(\\w+)", datasourceUid: "tempo" }]);
|
|
53
|
+
expect(by("Tempo linked")).toMatchObject({
|
|
54
|
+
tracesToLogsV2: { datasourceUid: "loki" },
|
|
55
|
+
tracesToMetrics: { datasourceUid: "prometheus" },
|
|
56
|
+
tracesToProfiles: { datasourceUid: "pyro" },
|
|
57
|
+
serviceMap: { datasourceUid: "prometheus" },
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
test("the types reject keys and links the plugin does not take", () => {
|
|
62
|
+
// @ts-expect-error an exemplar links to a tracing datasource, not to Loki
|
|
63
|
+
new Datasource({ name: "P1", type: "prometheus", jsonData: { exemplarTraceIdDestinations: [{ name: "t", datasourceUid: loki }] } });
|
|
64
|
+
// @ts-expect-error traces to logs does not go to a Prometheus
|
|
65
|
+
new Datasource({ name: "T1", type: "tempo", jsonData: { tracesToLogsV2: { datasourceUid: prometheus } } });
|
|
66
|
+
// @ts-expect-error a key Prometheus does not read
|
|
67
|
+
new Datasource({ name: "P2", type: "prometheus", jsonData: { derivedFields: [] } });
|
|
68
|
+
// @ts-expect-error prometheusType is one of four
|
|
69
|
+
new Datasource({ name: "P3", type: "prometheus", jsonData: { prometheusType: "VictoriaMetrics" } });
|
|
70
|
+
// @ts-expect-error a secure key Postgres does not read
|
|
71
|
+
new Datasource({ name: "PG", type: "grafana-postgresql-datasource", secureJsonData: { apiKey: "$__env{K}" } });
|
|
72
|
+
// @ts-expect-error MSSQL's encrypt is a string
|
|
73
|
+
new Datasource({ name: "MS", type: "mssql", jsonData: { encrypt: true } });
|
|
74
|
+
// A uid string is always accepted, and a plugin chant does not type takes any settings.
|
|
75
|
+
new Datasource({ name: "P4", type: "prometheus", jsonData: { exemplarTraceIdDestinations: [{ name: "t", datasourceUid: "xray" }] } });
|
|
76
|
+
new Datasource({ name: "I", type: "influxdb", jsonData: { dbName: "site" }, secureJsonData: { token: "$__env{T}" } });
|
|
77
|
+
new Datasource({ name: "PGold", type: "postgres", jsonData: { sslmode: "disable", database: "grafana" } });
|
|
78
|
+
expect(true).toBe(true);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
test("every plugin with a query class has typed settings, and every link names typed plugins it can hold", () => {
|
|
82
|
+
const typed: Record<keyof DatasourceJsonDataTypes, true> = {
|
|
83
|
+
prometheus: true,
|
|
84
|
+
loki: true,
|
|
85
|
+
tempo: true,
|
|
86
|
+
elasticsearch: true,
|
|
87
|
+
cloudwatch: true,
|
|
88
|
+
"grafana-azure-monitor-datasource": true,
|
|
89
|
+
stackdriver: true,
|
|
90
|
+
"grafana-bigquery-datasource": true,
|
|
91
|
+
"grafana-pyroscope-datasource": true,
|
|
92
|
+
"grafana-postgresql-datasource": true,
|
|
93
|
+
postgres: true,
|
|
94
|
+
mysql: true,
|
|
95
|
+
mssql: true,
|
|
96
|
+
};
|
|
97
|
+
const withClass = registeredQueries()
|
|
98
|
+
.filter((d) => d.builtin)
|
|
99
|
+
.flatMap((d) => [d.datasourceType, ...(d.aliases ?? [])]);
|
|
100
|
+
expect(withClass.sort()).toEqual(Object.keys(typed).sort());
|
|
101
|
+
for (const link of JSONDATA_LINKS) {
|
|
102
|
+
expect(link.path.at(-1)).toMatch(/Uid$/);
|
|
103
|
+
expect(link.targets.length).toBeGreaterThan(0);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
});
|