@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.
Files changed (451) hide show
  1. package/README.md +15 -5
  2. package/dist/actions/grafana.d.ts +24 -0
  3. package/dist/actions/grafana.d.ts.map +1 -0
  4. package/dist/actions/index.d.ts +2 -0
  5. package/dist/actions/index.d.ts.map +1 -0
  6. package/dist/alerting-build.d.ts +128 -0
  7. package/dist/alerting-build.d.ts.map +1 -0
  8. package/dist/alerting.d.ts +273 -0
  9. package/dist/alerting.d.ts.map +1 -0
  10. package/dist/api/apply.d.ts +156 -0
  11. package/dist/api/apply.d.ts.map +1 -0
  12. package/dist/api/bind.d.ts +32 -0
  13. package/dist/api/bind.d.ts.map +1 -0
  14. package/dist/api/client.d.ts +76 -0
  15. package/dist/api/client.d.ts.map +1 -0
  16. package/dist/api/converge.d.ts +33 -0
  17. package/dist/api/converge.d.ts.map +1 -0
  18. package/dist/api/dashboards.d.ts +102 -0
  19. package/dist/api/dashboards.d.ts.map +1 -0
  20. package/dist/api/datasources.d.ts +26 -0
  21. package/dist/api/datasources.d.ts.map +1 -0
  22. package/dist/api/fake-grafana-writes.d.ts +41 -0
  23. package/dist/api/fake-grafana-writes.d.ts.map +1 -0
  24. package/dist/api/fake-grafana.d.ts +61 -0
  25. package/dist/api/fake-grafana.d.ts.map +1 -0
  26. package/dist/api/folders.d.ts +110 -0
  27. package/dist/api/folders.d.ts.map +1 -0
  28. package/dist/api/library-panels.d.ts +52 -0
  29. package/dist/api/library-panels.d.ts.map +1 -0
  30. package/dist/build.d.ts +30 -2
  31. package/dist/build.d.ts.map +1 -1
  32. package/dist/catalog.d.ts +1 -1
  33. package/dist/catalog.d.ts.map +1 -1
  34. package/dist/codegen/docs.d.ts.map +1 -1
  35. package/dist/codegen/schema-types.d.ts +3 -3
  36. package/dist/codegen/schema-types.d.ts.map +1 -1
  37. package/dist/composites/agent-dashboard.d.ts.map +1 -1
  38. package/dist/composites/catalog.d.ts.map +1 -1
  39. package/dist/composites/index.d.ts +4 -2
  40. package/dist/composites/index.d.ts.map +1 -1
  41. package/dist/composites/red-dashboard.d.ts +21 -2
  42. package/dist/composites/red-dashboard.d.ts.map +1 -1
  43. package/dist/composites/shared.d.ts +7 -0
  44. package/dist/composites/shared.d.ts.map +1 -1
  45. package/dist/composites/slo-alert-rules.d.ts +92 -0
  46. package/dist/composites/slo-alert-rules.d.ts.map +1 -0
  47. package/dist/config.d.ts +111 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/contact-point-secrets.d.ts +17 -0
  50. package/dist/contact-point-secrets.d.ts.map +1 -0
  51. package/dist/dashboard.d.ts +16 -2
  52. package/dist/dashboard.d.ts.map +1 -1
  53. package/dist/datasource-refs.d.ts +95 -0
  54. package/dist/datasource-refs.d.ts.map +1 -0
  55. package/dist/datasource.d.ts +29 -0
  56. package/dist/datasource.d.ts.map +1 -1
  57. package/dist/deep-observe-hooks.d.ts +64 -0
  58. package/dist/deep-observe-hooks.d.ts.map +1 -0
  59. package/dist/deep-observe.d.ts +42 -0
  60. package/dist/deep-observe.d.ts.map +1 -0
  61. package/dist/describe-resources.d.ts +49 -0
  62. package/dist/describe-resources.d.ts.map +1 -0
  63. package/dist/detect.d.ts +28 -1
  64. package/dist/detect.d.ts.map +1 -1
  65. package/dist/export-resources.d.ts +38 -0
  66. package/dist/export-resources.d.ts.map +1 -0
  67. package/dist/import/alerting.d.ts +40 -0
  68. package/dist/import/alerting.d.ts.map +1 -0
  69. package/dist/import/edits.d.ts +47 -0
  70. package/dist/import/edits.d.ts.map +1 -0
  71. package/dist/import/embedded.d.ts +14 -0
  72. package/dist/import/embedded.d.ts.map +1 -0
  73. package/dist/import/generator.d.ts +60 -0
  74. package/dist/import/generator.d.ts.map +1 -0
  75. package/dist/import/live-export.d.ts +108 -0
  76. package/dist/import/live-export.d.ts.map +1 -0
  77. package/dist/import/mappings.d.ts +83 -0
  78. package/dist/import/mappings.d.ts.map +1 -0
  79. package/dist/import/model.d.ts +98 -0
  80. package/dist/import/model.d.ts.map +1 -0
  81. package/dist/import/normalize-alerting.d.ts +26 -0
  82. package/dist/import/normalize-alerting.d.ts.map +1 -0
  83. package/dist/import/normalize.d.ts +74 -0
  84. package/dist/import/normalize.d.ts.map +1 -0
  85. package/dist/import/parser.d.ts +110 -0
  86. package/dist/import/parser.d.ts.map +1 -0
  87. package/dist/import/report.d.ts +26 -0
  88. package/dist/import/report.d.ts.map +1 -0
  89. package/dist/import/testdata/fixtures.d.ts +35 -0
  90. package/dist/import/testdata/fixtures.d.ts.map +1 -0
  91. package/dist/import/v2.d.ts +72 -0
  92. package/dist/import/v2.d.ts.map +1 -0
  93. package/dist/index.d.ts +26 -9
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/integrity.json +18 -10
  96. package/dist/k8s.d.ts +107 -0
  97. package/dist/k8s.d.ts.map +1 -0
  98. package/dist/lint/audit-catalog.d.ts +2 -1
  99. package/dist/lint/audit-catalog.d.ts.map +1 -1
  100. package/dist/lint/post-synth/graf101.d.ts +2 -2
  101. package/dist/lint/post-synth/graf102.d.ts +1 -1
  102. package/dist/lint/post-synth/graf107.d.ts +1 -1
  103. package/dist/lint/post-synth/graf108.d.ts +8 -0
  104. package/dist/lint/post-synth/graf108.d.ts.map +1 -0
  105. package/dist/lint/post-synth/graf109.d.ts +8 -0
  106. package/dist/lint/post-synth/graf109.d.ts.map +1 -0
  107. package/dist/lint/post-synth/graf111.d.ts +8 -0
  108. package/dist/lint/post-synth/graf111.d.ts.map +1 -0
  109. package/dist/lint/post-synth/graf112.d.ts +8 -0
  110. package/dist/lint/post-synth/graf112.d.ts.map +1 -0
  111. package/dist/lint/post-synth/graf113.d.ts +8 -0
  112. package/dist/lint/post-synth/graf113.d.ts.map +1 -0
  113. package/dist/lint/post-synth/graf114.d.ts +8 -0
  114. package/dist/lint/post-synth/graf114.d.ts.map +1 -0
  115. package/dist/lint/post-synth/graf115.d.ts +8 -0
  116. package/dist/lint/post-synth/graf115.d.ts.map +1 -0
  117. package/dist/lint/post-synth/grafana-helpers.d.ts +7 -5
  118. package/dist/lint/post-synth/grafana-helpers.d.ts.map +1 -1
  119. package/dist/lint/post-synth/index.d.ts.map +1 -1
  120. package/dist/lint/rules/literal-secret.d.ts +7 -3
  121. package/dist/lint/rules/literal-secret.d.ts.map +1 -1
  122. package/dist/lsp/hover.d.ts.map +1 -1
  123. package/dist/manifest.json +1 -1
  124. package/dist/members.d.ts +27 -0
  125. package/dist/members.d.ts.map +1 -0
  126. package/dist/meta.json +135 -0
  127. package/dist/okf/index.md +36 -2
  128. package/dist/okf/rules/GRAF002.md +3 -2
  129. package/dist/okf/rules/GRAF101.md +3 -2
  130. package/dist/okf/rules/GRAF102.md +1 -0
  131. package/dist/okf/rules/GRAF108.md +11 -0
  132. package/dist/okf/rules/GRAF109.md +15 -0
  133. package/dist/okf/rules/GRAF111.md +11 -0
  134. package/dist/okf/rules/GRAF112.md +16 -0
  135. package/dist/okf/rules/GRAF113.md +16 -0
  136. package/dist/okf/rules/GRAF114.md +11 -0
  137. package/dist/okf/rules/GRAF115.md +11 -0
  138. package/dist/okf/types/AlertListPanel.md +9 -0
  139. package/dist/okf/types/AlertQuery.md +9 -0
  140. package/dist/okf/types/AlertRule.md +9 -0
  141. package/dist/okf/types/AlertRuleGroup.md +9 -0
  142. package/dist/okf/types/BarChartPanel.md +9 -0
  143. package/dist/okf/types/BarGaugePanel.md +9 -0
  144. package/dist/okf/types/CanvasPanel.md +9 -0
  145. package/dist/okf/types/ClassicConditionsExpression.md +9 -0
  146. package/dist/okf/types/ContactPoint.md +14 -0
  147. package/dist/okf/types/Dashboard.md +1 -0
  148. package/dist/okf/types/Datasource.md +3 -2
  149. package/dist/okf/types/ExternalDatasource.md +15 -0
  150. package/dist/okf/types/FlameGraphPanel.md +9 -0
  151. package/dist/okf/types/GeomapPanel.md +9 -0
  152. package/dist/okf/types/HistogramPanel.md +9 -0
  153. package/dist/okf/types/MathExpression.md +9 -0
  154. package/dist/okf/types/MuteTiming.md +13 -0
  155. package/dist/okf/types/NodeGraphPanel.md +9 -0
  156. package/dist/okf/types/NotificationPolicy.md +9 -0
  157. package/dist/okf/types/NotificationTemplate.md +9 -0
  158. package/dist/okf/types/PieChartPanel.md +9 -0
  159. package/dist/okf/types/ReduceExpression.md +9 -0
  160. package/dist/okf/types/ResampleExpression.md +9 -0
  161. package/dist/okf/types/SqlExpression.md +9 -0
  162. package/dist/okf/types/StateTimelinePanel.md +9 -0
  163. package/dist/okf/types/StatusHistoryPanel.md +9 -0
  164. package/dist/okf/types/ThresholdExpression.md +9 -0
  165. package/dist/okf/types/TrendPanel.md +9 -0
  166. package/dist/okf/types/XYChartPanel.md +9 -0
  167. package/dist/op/activities/grafana-apply.d.ts +75 -0
  168. package/dist/op/activities/grafana-apply.d.ts.map +1 -0
  169. package/dist/op/activities/index.d.ts +9 -0
  170. package/dist/op/activities/index.d.ts.map +1 -0
  171. package/dist/op/builders.d.ts +24 -0
  172. package/dist/op/builders.d.ts.map +1 -0
  173. package/dist/ownership.d.ts +67 -0
  174. package/dist/ownership.d.ts.map +1 -0
  175. package/dist/panel-options.d.ts +65 -0
  176. package/dist/panel-options.d.ts.map +1 -0
  177. package/dist/panels.d.ts +46 -9
  178. package/dist/panels.d.ts.map +1 -1
  179. package/dist/pin.d.ts +29 -7
  180. package/dist/pin.d.ts.map +1 -1
  181. package/dist/plugin.d.ts.map +1 -1
  182. package/dist/promql-check.d.ts +51 -0
  183. package/dist/promql-check.d.ts.map +1 -0
  184. package/dist/query.d.ts +9 -8
  185. package/dist/query.d.ts.map +1 -1
  186. package/dist/rules/graf101.ts +3 -3
  187. package/dist/rules/graf102.ts +1 -1
  188. package/dist/rules/graf107.ts +1 -1
  189. package/dist/rules/graf108.ts +17 -0
  190. package/dist/rules/graf109.ts +17 -0
  191. package/dist/rules/graf111.ts +17 -0
  192. package/dist/rules/graf112.ts +17 -0
  193. package/dist/rules/graf113.ts +17 -0
  194. package/dist/rules/graf114.ts +17 -0
  195. package/dist/rules/graf115.ts +17 -0
  196. package/dist/rules/grafana-helpers.ts +15 -8
  197. package/dist/rules/literal-secret.ts +60 -6
  198. package/dist/schema/barchart.gen.d.ts +198 -0
  199. package/dist/schema/barchart.gen.d.ts.map +1 -0
  200. package/dist/schema/bargauge.gen.d.ts +97 -0
  201. package/dist/schema/bargauge.gen.d.ts.map +1 -0
  202. package/dist/schema/canvas.gen.d.ts +152 -0
  203. package/dist/schema/canvas.gen.d.ts.map +1 -0
  204. package/dist/schema/dashboard.gen.d.ts +196 -21
  205. package/dist/schema/dashboard.gen.d.ts.map +1 -1
  206. package/dist/schema/expr.gen.d.ts +606 -0
  207. package/dist/schema/expr.gen.d.ts.map +1 -0
  208. package/dist/schema/gauge.gen.d.ts.map +1 -1
  209. package/dist/schema/geomap.gen.d.ts +100 -0
  210. package/dist/schema/geomap.gen.d.ts.map +1 -0
  211. package/dist/schema/heatmap.gen.d.ts.map +1 -1
  212. package/dist/schema/histogram.gen.d.ts +132 -0
  213. package/dist/schema/histogram.gen.d.ts.map +1 -0
  214. package/dist/schema/index.d.ts +12 -0
  215. package/dist/schema/index.d.ts.map +1 -1
  216. package/dist/schema/logs.gen.d.ts +1 -0
  217. package/dist/schema/logs.gen.d.ts.map +1 -1
  218. package/dist/schema/loki.gen.d.ts.map +1 -1
  219. package/dist/schema/nodegraph.gen.d.ts +49 -0
  220. package/dist/schema/nodegraph.gen.d.ts.map +1 -0
  221. package/dist/schema/piechart.gen.d.ts +127 -0
  222. package/dist/schema/piechart.gen.d.ts.map +1 -0
  223. package/dist/schema/prometheus.gen.d.ts.map +1 -1
  224. package/dist/schema/stat.gen.d.ts.map +1 -1
  225. package/dist/schema/statetimeline.gen.d.ts +124 -0
  226. package/dist/schema/statetimeline.gen.d.ts.map +1 -0
  227. package/dist/schema/statushistory.gen.d.ts +114 -0
  228. package/dist/schema/statushistory.gen.d.ts.map +1 -0
  229. package/dist/schema/table.gen.d.ts +22 -3
  230. package/dist/schema/table.gen.d.ts.map +1 -1
  231. package/dist/schema/tempo.gen.d.ts.map +1 -1
  232. package/dist/schema/text.gen.d.ts.map +1 -1
  233. package/dist/schema/timeseries.gen.d.ts +5 -1
  234. package/dist/schema/timeseries.gen.d.ts.map +1 -1
  235. package/dist/schema/trend.gen.d.ts +180 -0
  236. package/dist/schema/trend.gen.d.ts.map +1 -0
  237. package/dist/schema/xychart.gen.d.ts +145 -0
  238. package/dist/schema/xychart.gen.d.ts.map +1 -0
  239. package/dist/schema-validate.d.ts +30 -4
  240. package/dist/schema-validate.d.ts.map +1 -1
  241. package/dist/serializer.d.ts +11 -3
  242. package/dist/serializer.d.ts.map +1 -1
  243. package/dist/skill-defs.d.ts.map +1 -1
  244. package/dist/skills/chant-grafana-alerting.md +49 -0
  245. package/dist/skills/chant-grafana-provisioning.md +3 -3
  246. package/dist/skills/chant-grafana.md +12 -6
  247. package/dist/spec/fetch-units-cli.d.ts +3 -0
  248. package/dist/spec/fetch-units-cli.d.ts.map +1 -0
  249. package/dist/spec/overlay.d.ts +43 -0
  250. package/dist/spec/overlay.d.ts.map +1 -0
  251. package/dist/spec/schemas.d.ts +13 -7
  252. package/dist/spec/schemas.d.ts.map +1 -1
  253. package/dist/spec/units.d.ts +35 -0
  254. package/dist/spec/units.d.ts.map +1 -0
  255. package/dist/spec/units.gen.d.ts +2 -0
  256. package/dist/spec/units.gen.d.ts.map +1 -0
  257. package/dist/transformations.d.ts +459 -0
  258. package/dist/transformations.d.ts.map +1 -0
  259. package/dist/util.d.ts +6 -0
  260. package/dist/util.d.ts.map +1 -1
  261. package/dist/validate-alerting.d.ts +65 -0
  262. package/dist/validate-alerting.d.ts.map +1 -0
  263. package/dist/validate-output.d.ts +49 -9
  264. package/dist/validate-output.d.ts.map +1 -1
  265. package/dist/validate.d.ts.map +1 -1
  266. package/dist/variables.d.ts +7 -2
  267. package/dist/variables.d.ts.map +1 -1
  268. package/package.json +12 -4
  269. package/src/actions/actions.test.ts +24 -0
  270. package/src/actions/grafana.ts +40 -0
  271. package/src/actions/index.ts +1 -0
  272. package/src/alerting-build.ts +376 -0
  273. package/src/alerting.e2e.test.ts +212 -0
  274. package/src/alerting.test.ts +272 -0
  275. package/src/alerting.ts +435 -0
  276. package/src/api/apply.test.ts +238 -0
  277. package/src/api/apply.ts +384 -0
  278. package/src/api/bind.ts +58 -0
  279. package/src/api/client.ts +148 -0
  280. package/src/api/converge.ts +63 -0
  281. package/src/api/dashboards.ts +247 -0
  282. package/src/api/datasources.ts +33 -0
  283. package/src/api/fake-grafana-writes.ts +201 -0
  284. package/src/api/fake-grafana.ts +186 -0
  285. package/src/api/folders.ts +265 -0
  286. package/src/api/library-panels.ts +101 -0
  287. package/src/build.test.ts +210 -5
  288. package/src/build.ts +180 -43
  289. package/src/catalog.ts +86 -2
  290. package/src/codegen/docs.ts +42 -9
  291. package/src/codegen/schema-types.ts +16 -6
  292. package/src/composites/agent-dashboard.ts +6 -3
  293. package/src/composites/catalog.test.ts +2 -2
  294. package/src/composites/catalog.ts +82 -0
  295. package/src/composites/composites.test.ts +73 -9
  296. package/src/composites/index.ts +4 -2
  297. package/src/composites/queries.e2e.test.ts +374 -0
  298. package/src/composites/red-dashboard.ts +83 -12
  299. package/src/composites/shared.ts +11 -0
  300. package/src/composites/slo-alert-rules.ts +149 -0
  301. package/src/config.test.ts +61 -0
  302. package/src/config.ts +138 -0
  303. package/src/contact-point-secrets.ts +63 -0
  304. package/src/dashboard.ts +16 -2
  305. package/src/datasource-refs.test.ts +56 -0
  306. package/src/datasource-refs.ts +189 -0
  307. package/src/datasource.ts +52 -0
  308. package/src/deep-observe-hooks.ts +252 -0
  309. package/src/deep-observe.test.ts +265 -0
  310. package/src/deep-observe.ts +164 -0
  311. package/src/describe-resources.test.ts +255 -0
  312. package/src/describe-resources.ts +209 -0
  313. package/src/detect.ts +79 -2
  314. package/src/export-resources.test.ts +129 -0
  315. package/src/export-resources.ts +84 -0
  316. package/src/generated/lexicon-grafana.json +135 -0
  317. package/src/import/alerting-roundtrip.test.ts +161 -0
  318. package/src/import/alerting.ts +500 -0
  319. package/src/import/edits.ts +95 -0
  320. package/src/import/embedded.test.ts +45 -0
  321. package/src/import/embedded.ts +47 -0
  322. package/src/import/generated-types.e2e.test.ts +118 -0
  323. package/src/import/generator.test.ts +210 -0
  324. package/src/import/generator.ts +462 -0
  325. package/src/import/live-export.ts +264 -0
  326. package/src/import/mappings.ts +264 -0
  327. package/src/import/model.ts +110 -0
  328. package/src/import/normalize-alerting.ts +101 -0
  329. package/src/import/normalize.test.ts +117 -0
  330. package/src/import/normalize.ts +364 -0
  331. package/src/import/parser.test.ts +440 -0
  332. package/src/import/parser.ts +1236 -0
  333. package/src/import/report.ts +62 -0
  334. package/src/import/roundtrip.test.ts +468 -0
  335. package/src/import/testdata/fixtures.ts +129 -0
  336. package/src/import/v2.test.ts +292 -0
  337. package/src/import/v2.ts +803 -0
  338. package/src/import.e2e.test.ts +31 -84
  339. package/src/import.test.ts +9 -3
  340. package/src/index.ts +190 -5
  341. package/src/k8s.test.ts +98 -0
  342. package/src/k8s.ts +197 -0
  343. package/src/lint/audit-catalog.ts +60 -3
  344. package/src/lint/core-lint.test.ts +43 -0
  345. package/src/lint/post-synth/graf101.ts +3 -3
  346. package/src/lint/post-synth/graf102.ts +1 -1
  347. package/src/lint/post-synth/graf107.ts +1 -1
  348. package/src/lint/post-synth/graf108.ts +17 -0
  349. package/src/lint/post-synth/graf109.ts +17 -0
  350. package/src/lint/post-synth/graf111.ts +17 -0
  351. package/src/lint/post-synth/graf112.ts +17 -0
  352. package/src/lint/post-synth/graf113.ts +17 -0
  353. package/src/lint/post-synth/graf114.ts +17 -0
  354. package/src/lint/post-synth/graf115.ts +17 -0
  355. package/src/lint/post-synth/grafana-helpers.ts +15 -8
  356. package/src/lint/post-synth/index.ts +14 -0
  357. package/src/lint/post-synth/post-synth.test.ts +235 -11
  358. package/src/lint/rules/literal-secret.ts +60 -6
  359. package/src/lint/rules/rules.test.ts +27 -0
  360. package/src/lsp/completions.test.ts +5 -0
  361. package/src/lsp/hover.test.ts +7 -0
  362. package/src/lsp/hover.ts +8 -1
  363. package/src/members.ts +68 -0
  364. package/src/observe.e2e.test.ts +255 -0
  365. package/src/op/activities/grafana-apply.e2e.test.ts +175 -0
  366. package/src/op/activities/grafana-apply.test.ts +229 -0
  367. package/src/op/activities/grafana-apply.ts +171 -0
  368. package/src/op/activities/index.ts +8 -0
  369. package/src/op/builders.test.ts +40 -0
  370. package/src/op/builders.ts +34 -0
  371. package/src/ownership.ts +103 -0
  372. package/src/panel-options.ts +66 -0
  373. package/src/panels.test.ts +51 -0
  374. package/src/panels.ts +148 -10
  375. package/src/pin.ts +57 -6
  376. package/src/plugin.test.ts +5 -2
  377. package/src/plugin.ts +66 -0
  378. package/src/promql-check.test.ts +108 -0
  379. package/src/promql-check.ts +189 -0
  380. package/src/query.ts +13 -8
  381. package/src/schema/barchart.gen.ts +221 -0
  382. package/src/schema/bargauge.gen.ts +111 -0
  383. package/src/schema/canvas.gen.ts +176 -0
  384. package/src/schema/dashboard.gen.ts +206 -22
  385. package/src/schema/expr.gen.ts +618 -0
  386. package/src/schema/gauge.gen.ts +2 -1
  387. package/src/schema/geomap.gen.ts +112 -0
  388. package/src/schema/heatmap.gen.ts +2 -1
  389. package/src/schema/histogram.gen.ts +151 -0
  390. package/src/schema/index.ts +12 -0
  391. package/src/schema/logs.gen.ts +3 -1
  392. package/src/schema/loki.gen.ts +2 -1
  393. package/src/schema/nodegraph.gen.ts +58 -0
  394. package/src/schema/piechart.gen.ts +146 -0
  395. package/src/schema/prometheus.gen.ts +2 -1
  396. package/src/schema/stat.gen.ts +2 -1
  397. package/src/schema/statetimeline.gen.ts +143 -0
  398. package/src/schema/statushistory.gen.ts +132 -0
  399. package/src/schema/table.gen.ts +27 -4
  400. package/src/schema/tempo.gen.ts +2 -1
  401. package/src/schema/text.gen.ts +2 -1
  402. package/src/schema/timeseries.gen.ts +7 -2
  403. package/src/schema/trend.gen.ts +208 -0
  404. package/src/schema/xychart.gen.ts +167 -0
  405. package/src/schema-overlay.test.ts +282 -0
  406. package/src/schema-validate.ts +141 -50
  407. package/src/schema.test.ts +4 -2
  408. package/src/serializer.test.ts +13 -1
  409. package/src/serializer.ts +11 -3
  410. package/src/skill-defs.ts +17 -0
  411. package/src/skills/chant-grafana-alerting.md +49 -0
  412. package/src/skills/chant-grafana-provisioning.md +3 -3
  413. package/src/skills/chant-grafana.md +12 -6
  414. package/src/spec/fetch-cli.ts +3 -3
  415. package/src/spec/fetch-units-cli.ts +37 -0
  416. package/src/spec/overlay/canvas.overlay.json +142 -0
  417. package/src/spec/overlay/dashboard.overlay.json +378 -0
  418. package/src/spec/overlay/expr.overlay.json +14 -0
  419. package/src/spec/overlay/geomap.overlay.json +35 -0
  420. package/src/spec/overlay/logs.overlay.json +14 -0
  421. package/src/spec/overlay/nodegraph.overlay.json +31 -0
  422. package/src/spec/overlay/piechart.overlay.json +17 -0
  423. package/src/spec/overlay/table.overlay.json +84 -0
  424. package/src/spec/overlay/timeseries.overlay.json +21 -0
  425. package/src/spec/overlay/trend.overlay.json +17 -0
  426. package/src/spec/overlay/xychart.overlay.json +16 -0
  427. package/src/spec/overlay.ts +105 -0
  428. package/src/spec/schemas/barchart.jsonschema.json +419 -0
  429. package/src/spec/schemas/bargauge.jsonschema.json +224 -0
  430. package/src/spec/schemas/canvas.jsonschema.json +356 -0
  431. package/src/spec/schemas/dashboardv2.jsonschema.json +3387 -0
  432. package/src/spec/schemas/expr.jsonschema.json +987 -0
  433. package/src/spec/schemas/geomap.jsonschema.json +220 -0
  434. package/src/spec/schemas/histogram.jsonschema.json +308 -0
  435. package/src/spec/schemas/nodegraph.jsonschema.json +77 -0
  436. package/src/spec/schemas/piechart.jsonschema.json +275 -0
  437. package/src/spec/schemas/statetimeline.jsonschema.json +324 -0
  438. package/src/spec/schemas/statushistory.jsonschema.json +292 -0
  439. package/src/spec/schemas/trend.jsonschema.json +449 -0
  440. package/src/spec/schemas/xychart.jsonschema.json +428 -0
  441. package/src/spec/schemas.ts +22 -10
  442. package/src/spec/units.gen.ts +281 -0
  443. package/src/spec/units.ts +77 -0
  444. package/src/transformations.test.ts +65 -0
  445. package/src/transformations.ts +574 -0
  446. package/src/util.ts +8 -0
  447. package/src/validate-alerting.test.ts +255 -0
  448. package/src/validate-alerting.ts +428 -0
  449. package/src/validate-output.ts +332 -101
  450. package/src/validate.ts +14 -0
  451. package/src/variables.ts +7 -2
@@ -0,0 +1,459 @@
1
+ /**
2
+ * Panel transformations, typed per transformer.
3
+ *
4
+ * The dashboard schema types a transformation as `{ id: string; options:
5
+ * {} }`: foundation-sdk v0.0.20 has no schema for any transformer's options.
6
+ * The option types below are transcribed from the transformers Grafana
7
+ * v13.2.2 registers (tag v13.2.2, commit
8
+ * 3db12332b66497c31f8ad2a5fb0eb0fe0ca05a7e):
9
+ *
10
+ * - `packages/grafana-data/src/transformations/transformers/<id>.ts` for the
11
+ * standard transformers, `transformers/ids.ts` for their ids;
12
+ * - `public/app/features/transformers/**` for the ones the app registers
13
+ * (heatmap, extractFields, configFromData, rowsToFields, joinByLabels,
14
+ * partitionByValues, prepareTimeSeries, timeSeriesTable, regression,
15
+ * smoothing, spatial, fieldLookup);
16
+ * - enums from `fieldReducer.ts` (ReducerID), `utils/binaryOperators.ts`,
17
+ * `utils/unaryOperators.ts`, `types/dataFrame.ts` (FieldType,
18
+ * EnumFieldConfig), `types/data.ts` (NullValueMode),
19
+ * `types/transformations.ts` (SpecialValue),
20
+ * `transformers/joinShared.ts` (JoinMode) and
21
+ * `matchers/nameMatcher.ts` (RegexpOrNamesMatcherOptions).
22
+ *
23
+ * Every top-level option is optional: Grafana spreads each transformer's
24
+ * `defaultOptions` under the stored options before it runs
25
+ * (`transformDataFrame`), so a dashboard stores only what was set. Nested
26
+ * objects keep Grafana's required fields.
27
+ *
28
+ * A transformation whose id Grafana doesn't register (a plugin's), or whose
29
+ * options this file doesn't know, goes through `customTransformation()`.
30
+ */
31
+ import type { MatcherConfig } from "./schema/dashboard.gen.js";
32
+ import type { HeatmapCalculationOptions } from "./schema/heatmap.gen.js";
33
+ import type { FrameGeometrySource } from "./schema/geomap.gen.js";
34
+ /** `ReducerID` in `fieldReducer.ts`. */
35
+ export type ReducerId = "sum" | "max" | "min" | "logmin" | "mean" | "variance" | "stdDev" | "last" | "median" | "first" | "count" | "countAll" | "range" | "diff" | "diffperc" | "delta" | "step" | "firstNotNull" | "lastNotNull" | "changeCount" | "distinctCount" | "allIsZero" | "allIsNull" | "allValues" | "uniqueValues" | `p${Percentile}`;
36
+ type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9";
37
+ type NonZeroDigit = Exclude<Digit, "0">;
38
+ /** p1 to p99. */
39
+ type Percentile = NonZeroDigit | `${NonZeroDigit}${Digit}`;
40
+ /** `FieldType` in `types/dataFrame.ts`. */
41
+ export type FieldTypeId = "time" | "number" | "string" | "boolean" | "trace" | "geo" | "enum" | "other" | "frame" | "nestedFrames";
42
+ /** `SpecialValue` in `types/transformations.ts`. */
43
+ export type SpecialValue = "true" | "false" | "null" | "empty" | "zero";
44
+ /** `NullValueMode` in `types/data.ts`. */
45
+ export type NullValueMode = "null" | "connected" | "null as zero";
46
+ /** `RegexpOrNamesMatcherOptions` in `matchers/nameMatcher.ts`. */
47
+ export interface RegexpOrNamesMatcherOptions {
48
+ pattern?: string;
49
+ names?: string[];
50
+ variable?: string;
51
+ }
52
+ /** `calculateField.ts`. */
53
+ export interface CalculateFieldOptions {
54
+ timeSeries?: boolean;
55
+ mode?: "reduceRow" | "cumulativeFunctions" | "windowFunctions" | "binary" | "unary" | "index";
56
+ reduce?: {
57
+ include?: string[];
58
+ reducer: ReducerId;
59
+ nullValueMode?: NullValueMode;
60
+ };
61
+ window?: {
62
+ field?: string;
63
+ reducer: ReducerId;
64
+ windowSize?: number;
65
+ windowSizeMode?: "percentage" | "fixed";
66
+ windowAlignment?: "trailing" | "centered";
67
+ };
68
+ cumulative?: {
69
+ field?: string;
70
+ reducer: ReducerId;
71
+ };
72
+ binary?: {
73
+ left: CalculateFieldBinaryValue;
74
+ operator: "+" | "-" | "/" | "*";
75
+ right: CalculateFieldBinaryValue;
76
+ };
77
+ unary?: {
78
+ operator: "abs" | "exp" | "ln" | "round" | "floor" | "ceil" | "percent";
79
+ fieldName: string;
80
+ };
81
+ index?: {
82
+ asPercentile: boolean;
83
+ };
84
+ replaceFields?: boolean;
85
+ alias?: string;
86
+ }
87
+ /**
88
+ * One side of a binary calculation. Grafana 10.3 and later store
89
+ * `{ fixed }` or `{ matcher: { id: "byName", options } }`; older
90
+ * dashboards store the field name or number as a plain string, which
91
+ * Grafana still reads.
92
+ */
93
+ export type CalculateFieldBinaryValue = string | {
94
+ fixed?: string;
95
+ matcher?: {
96
+ id?: string;
97
+ options?: string;
98
+ };
99
+ };
100
+ /** `concat.ts`. */
101
+ export interface ConcatenateOptions {
102
+ frameNameMode?: "drop" | "field" | "label";
103
+ frameNameLabel?: string;
104
+ }
105
+ /** `convertFieldType.ts`. */
106
+ export interface ConvertFieldTypeOptions {
107
+ conversions?: Array<{
108
+ targetField?: string;
109
+ destinationType?: FieldTypeId;
110
+ dateFormat?: string;
111
+ joinWith?: string;
112
+ timezone?: string;
113
+ enumConfig?: {
114
+ text?: string[];
115
+ color?: string[];
116
+ icon?: string[];
117
+ description?: string[];
118
+ };
119
+ }>;
120
+ }
121
+ /** `convertFrameType.ts`. */
122
+ export interface ConvertFrameTypeOptions {
123
+ targetType?: "exemplar" | "timeRegion" | "annotation";
124
+ }
125
+ /** `filter.ts` (filterFields and filterFrames). */
126
+ export interface FilterOptions {
127
+ include?: MatcherConfig;
128
+ exclude?: MatcherConfig;
129
+ }
130
+ /** `filterByName.ts`. */
131
+ export interface FilterFieldsByNameOptions {
132
+ include?: RegexpOrNamesMatcherOptions;
133
+ exclude?: RegexpOrNamesMatcherOptions;
134
+ byVariable?: boolean;
135
+ }
136
+ /** `filterByRefId.ts`. */
137
+ export interface FilterByRefIdOptions {
138
+ include?: string;
139
+ exclude?: string;
140
+ }
141
+ /** `filterByValue.ts`. `config` is a value matcher: `{ id: "greater", options: { value: 10 } }`. */
142
+ export interface FilterByValueOptions {
143
+ filters?: Array<{
144
+ fieldName: string;
145
+ config: MatcherConfig;
146
+ }>;
147
+ type?: "exclude" | "include";
148
+ match?: "all" | "any";
149
+ }
150
+ /** `formatString.ts`. */
151
+ export interface FormatStringOptions {
152
+ stringField?: string;
153
+ substringStart?: number;
154
+ substringEnd?: number;
155
+ outputFormat?: "Upper Case" | "Lower Case" | "Sentence Case" | "Title Case" | "Pascal Case" | "Camel Case" | "Snake Case" | "Kebab Case" | "Trim" | "Substring";
156
+ }
157
+ /** `formatTime.ts`. `useTimezone` is in its `defaultOptions`. */
158
+ export interface FormatTimeOptions {
159
+ timeField?: string;
160
+ outputFormat?: string;
161
+ timezone?: string;
162
+ useTimezone?: boolean;
163
+ }
164
+ /** `groupBy.ts`, per field. */
165
+ export interface GroupByFieldOptions {
166
+ aggregations: ReducerId[];
167
+ operation: "aggregate" | "groupby" | null;
168
+ }
169
+ /** `groupBy.ts`. */
170
+ export interface GroupByOptions {
171
+ fields?: Record<string, GroupByFieldOptions>;
172
+ }
173
+ /** `groupToNestedTable.ts`: per-field options, or (V2) matcher rules. */
174
+ export interface GroupToNestedTableOptions {
175
+ showSubframeHeaders?: boolean;
176
+ expandAllRows?: boolean;
177
+ fields?: Record<string, GroupByFieldOptions>;
178
+ rules?: Array<{
179
+ matcher: MatcherConfig;
180
+ operation: "aggregate" | "groupby" | null;
181
+ aggregations: ReducerId[];
182
+ keepNestedField?: boolean;
183
+ }>;
184
+ }
185
+ /** `groupingToMatrix.ts`. */
186
+ export interface GroupingToMatrixOptions {
187
+ columnField?: string;
188
+ rowField?: string;
189
+ valueField?: string;
190
+ emptyValue?: SpecialValue;
191
+ }
192
+ /** `histogram.ts`. The editor stores sizes and offsets as numbers or strings. */
193
+ export interface HistogramOptions {
194
+ bucketCount?: number;
195
+ bucketSize?: number | string;
196
+ bucketOffset?: number | string;
197
+ combine?: boolean;
198
+ }
199
+ /** `joinByField.ts` (and the deprecated `seriesToColumns`). */
200
+ export interface JoinByFieldOptions {
201
+ byField?: string;
202
+ mode?: "outer" | "inner" | "outerTabular";
203
+ }
204
+ /** `labelsToFields.ts`. */
205
+ export interface LabelsToFieldsOptions {
206
+ mode?: "columns" | "rows";
207
+ keepLabels?: string[];
208
+ valueLabel?: string;
209
+ }
210
+ /** `limit.ts`. A string is a variable reference. */
211
+ export interface LimitOptions {
212
+ limitField?: number | string;
213
+ }
214
+ /** `order.ts`. */
215
+ export interface OrderOptions {
216
+ indexByName?: Record<string, number>;
217
+ orderByMode?: "manual" | "auto";
218
+ orderBy?: Array<{
219
+ type: "name" | "label";
220
+ name?: string;
221
+ desc?: boolean;
222
+ }>;
223
+ }
224
+ /** `rename.ts`. */
225
+ export interface RenameOptions {
226
+ renameByName?: Record<string, string>;
227
+ }
228
+ /** `organize.ts`: order, rename and exclude in one. */
229
+ export interface OrganizeOptions extends OrderOptions, RenameOptions {
230
+ excludeByName?: Record<string, boolean>;
231
+ includeByName?: Record<string, boolean>;
232
+ }
233
+ /** `reduce.ts`. `fields` limits which fields are reduced. */
234
+ export interface ReduceOptions {
235
+ reducers?: ReducerId[];
236
+ fields?: MatcherConfig;
237
+ mode?: "seriesToRows" | "reduceFields";
238
+ includeTimeField?: boolean;
239
+ labelsToFields?: boolean;
240
+ }
241
+ /** `renameByRegex.ts`. */
242
+ export interface RenameByRegexOptions {
243
+ regex?: string;
244
+ renamePattern?: string;
245
+ }
246
+ /** `sortBy.ts`. Grafana uses only the first entry. */
247
+ export interface SortByOptions {
248
+ sort?: Array<{
249
+ field: string;
250
+ desc?: boolean;
251
+ index?: number;
252
+ }>;
253
+ }
254
+ /** `transpose.ts`. */
255
+ export interface TransposeOptions {
256
+ firstFieldName?: string;
257
+ restFieldsName?: string;
258
+ emptyValue?: SpecialValue;
259
+ }
260
+ /** A transformer that takes no options (merge, noop, seriesToRows, ensureColumns). */
261
+ export type NoOptions = Record<string, never>;
262
+ /** `fieldToConfigMapping/fieldToConfigMapping.ts`. */
263
+ export interface FieldToConfigMapping {
264
+ fieldName: string;
265
+ reducerId?: ReducerId;
266
+ handlerKey: string | null;
267
+ handlerArguments?: {
268
+ threshold?: {
269
+ color?: string;
270
+ };
271
+ };
272
+ }
273
+ /** `configFromQuery/configFromQuery.ts`. */
274
+ export interface ConfigFromDataOptions {
275
+ configRefId?: string;
276
+ mappings?: FieldToConfigMapping[];
277
+ applyTo?: MatcherConfig;
278
+ }
279
+ /** `extractFields/types.ts`. */
280
+ export interface ExtractFieldsOptions {
281
+ source?: string;
282
+ jsonPaths?: Array<{
283
+ path: string;
284
+ alias?: string;
285
+ }>;
286
+ delimiter?: string;
287
+ regExp?: string;
288
+ format?: "json" | "kvp" | "auto" | "regexp" | "delimiter";
289
+ replace?: boolean;
290
+ keepTime?: boolean;
291
+ }
292
+ /** `lookupGazetteer/fieldLookup.ts`. */
293
+ export interface FieldLookupOptions {
294
+ lookupField?: string;
295
+ gazetteer?: string;
296
+ }
297
+ /** `calculateHeatmap/heatmap.ts`: the heatmap panel's calculation options, plus `keepOriginalData`. */
298
+ export interface HeatmapTransformOptions extends HeatmapCalculationOptions {
299
+ keepOriginalData?: boolean;
300
+ }
301
+ /** `joinByLabels/joinByLabels.ts`. */
302
+ export interface JoinByLabelsOptions {
303
+ value?: string;
304
+ join?: string[];
305
+ }
306
+ /** `partitionByValues/partitionByValues.ts`. */
307
+ export interface PartitionByValuesOptions {
308
+ fields?: string[];
309
+ naming?: {
310
+ asLabels?: boolean;
311
+ append?: boolean;
312
+ withNames?: boolean;
313
+ separator1?: string;
314
+ separator2?: string;
315
+ };
316
+ keepFields?: boolean;
317
+ }
318
+ /** `prepareTimeSeries/prepareTimeSeries.ts`. */
319
+ export interface PrepareTimeSeriesOptions {
320
+ format?: "wide" | "long" | "multi" | "many";
321
+ }
322
+ /** `regression/regression.ts`. */
323
+ export interface RegressionOptions {
324
+ modelType?: "linear" | "polynomial";
325
+ degree?: number;
326
+ xFieldName?: string;
327
+ yFieldName?: string;
328
+ predictionCount?: number;
329
+ }
330
+ /** `rowsToFields/rowsToFields.ts`. */
331
+ export interface RowsToFieldsOptions {
332
+ nameField?: string;
333
+ valueField?: string;
334
+ mappings?: FieldToConfigMapping[];
335
+ }
336
+ /** `smoothing/smoothing.ts`. */
337
+ export interface SmoothingOptions {
338
+ resolution?: number;
339
+ }
340
+ /** `spatial/models.gen.ts`. */
341
+ export interface SpatialOptions {
342
+ action?: "prepare" | "calculate" | "modify";
343
+ source?: FrameGeometrySource;
344
+ calculate?: {
345
+ calc?: "heading" | "distance" | "area";
346
+ field?: string;
347
+ };
348
+ modify?: {
349
+ op: "asLine" | "lineBuilder";
350
+ target?: FrameGeometrySource;
351
+ };
352
+ }
353
+ /** `timeSeriesTable/timeSeriesTableTransformer.ts`: per query refId. */
354
+ export type TimeSeriesTableOptions = Record<string, {
355
+ stat?: ReducerId;
356
+ timeField?: string;
357
+ inlineStat?: boolean;
358
+ }>;
359
+ /** Every transformer Grafana v13.2.2 registers, by the id a dashboard stores, and its options. */
360
+ export interface TransformationOptionsById {
361
+ calculateField: CalculateFieldOptions;
362
+ concatenate: ConcatenateOptions;
363
+ configFromData: ConfigFromDataOptions;
364
+ convertFieldType: ConvertFieldTypeOptions;
365
+ convertFrameType: ConvertFrameTypeOptions;
366
+ ensureColumns: NoOptions;
367
+ extractFields: ExtractFieldsOptions;
368
+ fieldLookup: FieldLookupOptions;
369
+ filterByRefId: FilterByRefIdOptions;
370
+ filterByValue: FilterByValueOptions;
371
+ filterFields: FilterOptions;
372
+ filterFieldsByName: FilterFieldsByNameOptions;
373
+ filterFrames: FilterOptions;
374
+ formatString: FormatStringOptions;
375
+ formatTime: FormatTimeOptions;
376
+ groupBy: GroupByOptions;
377
+ groupToNestedTable: GroupToNestedTableOptions;
378
+ groupingToMatrix: GroupingToMatrixOptions;
379
+ heatmap: HeatmapTransformOptions;
380
+ histogram: HistogramOptions;
381
+ joinByField: JoinByFieldOptions;
382
+ joinByLabels: JoinByLabelsOptions;
383
+ labelsToFields: LabelsToFieldsOptions;
384
+ limit: LimitOptions;
385
+ merge: NoOptions;
386
+ noop: NoOptions;
387
+ order: OrderOptions;
388
+ organize: OrganizeOptions;
389
+ partitionByValues: PartitionByValuesOptions;
390
+ prepareTimeSeries: PrepareTimeSeriesOptions;
391
+ reduce: ReduceOptions;
392
+ regression: RegressionOptions;
393
+ rename: RenameOptions;
394
+ renameByRegex: RenameByRegexOptions;
395
+ rowsToFields: RowsToFieldsOptions;
396
+ /** Deprecated in Grafana for `joinByField`, which takes the same options. */
397
+ seriesToColumns: JoinByFieldOptions;
398
+ seriesToRows: NoOptions;
399
+ smoothing: SmoothingOptions;
400
+ sortBy: SortByOptions;
401
+ spatial: SpatialOptions;
402
+ timeSeriesTable: TimeSeriesTableOptions;
403
+ transpose: TransposeOptions;
404
+ }
405
+ export type TransformationId = keyof TransformationOptionsById;
406
+ /** The fields every transformation has besides its id and options (`DataTransformerConfig`). */
407
+ export interface TransformationCommon {
408
+ /** A disabled transformation is skipped. */
409
+ disabled?: boolean;
410
+ /** Apply it only to the frames this matcher selects. */
411
+ filter?: MatcherConfig;
412
+ /** Where its input frames come from. */
413
+ topic?: "series" | "annotations" | "alertStates";
414
+ }
415
+ /** A transformation Grafana registers, with its options typed. */
416
+ export type KnownTransformation = {
417
+ [K in TransformationId]: TransformationCommon & {
418
+ id: K;
419
+ options?: TransformationOptionsById[K];
420
+ };
421
+ }[TransformationId];
422
+ declare const custom: unique symbol;
423
+ /** A transformation built by `customTransformation()`: any id, untyped options. */
424
+ export interface CustomTransformation extends TransformationCommon {
425
+ id: string;
426
+ options: Record<string, unknown>;
427
+ /** Type-only: a plain object literal can't pose as one, so a typo in a known id or option is still an error. */
428
+ readonly [custom]: true;
429
+ }
430
+ /** What a panel's `transformations` takes. */
431
+ export type Transformation = KnownTransformation | CustomTransformation;
432
+ /**
433
+ * A transformation Grafana registers, typed by its id:
434
+ *
435
+ * ```ts
436
+ * transformation("organize", { excludeByName: { Time: true }, renameByName: { Value: "Requests" } })
437
+ * ```
438
+ *
439
+ * The same as writing `{ id: "organize", options: { ... } }` in `transformations`.
440
+ */
441
+ export declare function transformation<K extends TransformationId>(id: K, options?: TransformationOptionsById[K], common?: TransformationCommon): Extract<KnownTransformation, {
442
+ id: K;
443
+ }>;
444
+ /**
445
+ * A transformation with any id and options, for a plugin's transformer, or
446
+ * options newer than the ones typed here. Written to the dashboard as given,
447
+ * with any other keys in `common` beside them.
448
+ */
449
+ export declare function customTransformation(id: string, options?: Record<string, unknown>, common?: TransformationCommon & Record<string, unknown>): CustomTransformation;
450
+ export declare const TRANSFORMATION_IDS: readonly TransformationId[];
451
+ /**
452
+ * Why a transformation as stored can't be written as a typed one, or
453
+ * undefined when it can: an id Grafana doesn't register, a key beside
454
+ * `options` the config doesn't have, or an option key its transformer
455
+ * doesn't take.
456
+ */
457
+ export declare function untypedTransformationReason(t: Record<string, unknown>): string | undefined;
458
+ export {};
459
+ //# sourceMappingURL=transformations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformations.d.ts","sourceRoot":"","sources":["../src/transformations.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -3,6 +3,12 @@
3
3
  export type DeepPartial<T> = T extends (infer U)[] ? DeepPartial<U>[] : T extends object ? {
4
4
  [K in keyof T]?: DeepPartial<T[K]>;
5
5
  } : T;
6
+ /**
7
+ * The props a declaration class takes: `PropsOf<typeof TimeSeriesPanel>["options"]`
8
+ * types a const that is passed as a panel's `options`. The TypeScript
9
+ * `chant import` writes annotates its lifted consts this way.
10
+ */
11
+ export type PropsOf<C extends abstract new (props: any) => unknown> = NonNullable<ConstructorParameters<C>[0]>;
6
12
  /** Grafana's uid alphabet: letters, digits, `-` and `_`, at most 40 characters. */
7
13
  export declare const UID_PATTERN: RegExp;
8
14
  export declare function isValidUid(uid: string): boolean;
@@ -1 +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"}
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;;;;GAIG;AAEH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS,QAAQ,MAAM,KAAK,EAAE,GAAG,KAAK,OAAO,IAAI,WAAW,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE/G,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,65 @@
1
+ /**
2
+ * The checks behind GRAF111-GRAF114, and the alert-rule half of GRAF108, as
3
+ * plain functions over alerting provisioning files (parsed). The
4
+ * post-synth checks run them over a build's output; a test or another
5
+ * lexicon holding the same YAML can call them directly.
6
+ *
7
+ * - GRAF111: a rule's queries and expressions fit together: its condition,
8
+ * each expression's inputs and a recording rule's `record.from` name a
9
+ * refId of the rule, refIds are unique, and each expression model is
10
+ * valid for the pinned `expr` schema.
11
+ * - GRAF112: each query's datasource is one the build knows (provisioned or
12
+ * `ExternalDatasource`), and of the type the query model says.
13
+ * - GRAF113: the policy tree and rules route to contact points and mute
14
+ * timings the build declares, and their matchers parse.
15
+ * - GRAF114: uids, names, titles and intervals Grafana accepts, and nothing
16
+ * declared twice (a duplicate stops Grafana provisioning every alerting
17
+ * file at startup).
18
+ *
19
+ * Like GRAF101, a reference check only reports an error when the build
20
+ * declares things of that kind; with none declared it warns once that it
21
+ * cannot check, since the thing may already exist in Grafana.
22
+ */
23
+ import type { KnownDatasource } from "./datasource-refs.js";
24
+ type Json = Record<string, unknown>;
25
+ /** One alerting provisioning file, parsed, and where it came from. */
26
+ export interface AlertingDoc {
27
+ source?: string;
28
+ json: Json;
29
+ }
30
+ export type AlertingIssueCode = "GRAF108" | "GRAF111" | "GRAF112" | "GRAF113" | "GRAF114";
31
+ export interface AlertingIssue {
32
+ code: AlertingIssueCode;
33
+ severity: "error" | "warning";
34
+ message: string;
35
+ /** The rule uid, contact point or group the issue is about. */
36
+ entity?: string;
37
+ }
38
+ /** Contact point names Grafana has without provisioning: the default email contact point. */
39
+ export declare const BUILTIN_CONTACT_POINTS: ReadonlySet<string>;
40
+ export interface RuleInfo {
41
+ rule: Json;
42
+ group: Json;
43
+ /** `rule "<title>" (uid <uid>)`. */
44
+ where: string;
45
+ }
46
+ /** Every rule of every group across the files. */
47
+ export declare function alertRules(docs: readonly AlertingDoc[]): RuleInfo[];
48
+ /** The refIds an expression reads. */
49
+ export declare function expressionInputs(model: Json): string[];
50
+ export declare function checkRuleQueries(docs: readonly AlertingDoc[]): AlertingIssue[];
51
+ export declare function checkRuleDatasources(docs: readonly AlertingDoc[], known: ReadonlyMap<string, KnownDatasource>): AlertingIssue[];
52
+ /** Every PromQL expression an alert rule sends to Prometheus, and where it is written. */
53
+ export declare function alertRulePromql(docs: readonly AlertingDoc[], known: ReadonlyMap<string, KnownDatasource>): Array<{
54
+ where: string;
55
+ expr: string;
56
+ entity: string;
57
+ }>;
58
+ /** GRAF108 over alert rules: the PromQL of each query that reaches Prometheus parses. */
59
+ export declare function checkRulePromql(docs: readonly AlertingDoc[], known: ReadonlyMap<string, KnownDatasource>): AlertingIssue[];
60
+ export declare function checkNotificationRefs(docs: readonly AlertingDoc[]): AlertingIssue[];
61
+ /** Grafana's scheduler ticks every 10 seconds; a group's interval must be a positive multiple of it. */
62
+ export declare const BASE_INTERVAL_SECONDS = 10;
63
+ export declare function checkAlertingIdentity(docs: readonly AlertingDoc[]): AlertingIssue[];
64
+ export {};
65
+ //# sourceMappingURL=validate-alerting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-alerting.d.ts","sourceRoot":"","sources":["../src/validate-alerting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKzD,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpC,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAAsC,CAAC;AAe9F,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,IAAI,CAAC;IACZ,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,kDAAkD;AAClD,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,QAAQ,EAAE,CAUnE;AAYD,sCAAsC;AACtC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,CAwBtD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,aAAa,EAAE,CA0C9E;AAaD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,aAAa,EAAE,CA6C/H;AAED,0FAA0F;AAC1F,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAajK;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,aAAa,EAAE,CAO1H;AAqBD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,aAAa,EAAE,CAiEnF;AAaD,wGAAwG;AACxG,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAIxC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,GAAG,aAAa,EAAE,CA2EnF"}
@@ -1,16 +1,22 @@
1
1
  /**
2
- * The checks behind GRAF101-GRAF107, as plain functions over built Grafana
3
- * output: dashboard JSON documents and provisioned datasources. The
2
+ * The checks behind GRAF101-GRAF109, GRAF111-GRAF114 and GRAF115, as plain
3
+ * functions over built Grafana output: dashboard JSON documents, provisioned
4
+ * datasources, dashboard providers and alerting provisioning files (the
5
+ * alerting checks are in `validate-alerting.ts`). The
4
6
  * post-synth checks run them over a build; anything else holding the same
5
7
  * JSON (a test, another lexicon embedding dashboards) can call them directly.
6
8
  *
7
9
  * 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.
10
+ * see the datasources passed in: the ones provisioned and the ones declared
11
+ * with `ExternalDatasource`. In a build that is the build root being built
12
+ * (chant #1939). With none declared they warn that references cannot be
13
+ * checked; a datasource that exists in Grafana but is not declared looks
14
+ * undeclared, so declare it with `ExternalDatasource`.
11
15
  */
12
- import type { ProvisionedDatasource } from "./build.js";
13
- export type GrafanaIssueCode = "GRAF101" | "GRAF102" | "GRAF103" | "GRAF104" | "GRAF105" | "GRAF106" | "GRAF107";
16
+ import type { ExternalDatasourceRecord, ProvisionedDatasource } from "./build.js";
17
+ import { variableReferences, type KnownDatasource } from "./datasource-refs.js";
18
+ import { type AlertingDoc } from "./validate-alerting.js";
19
+ export type GrafanaIssueCode = "GRAF101" | "GRAF102" | "GRAF103" | "GRAF104" | "GRAF105" | "GRAF106" | "GRAF107" | "GRAF108" | "GRAF109" | "GRAF111" | "GRAF112" | "GRAF113" | "GRAF114" | "GRAF115";
14
20
  export interface GrafanaIssue {
15
21
  code: GrafanaIssueCode;
16
22
  severity: "error" | "warning";
@@ -25,16 +31,50 @@ export interface DashboardDoc {
25
31
  }
26
32
  export interface GrafanaArtifacts {
27
33
  dashboards: DashboardDoc[];
34
+ /** Datasources the build provisions. */
28
35
  datasources: ProvisionedDatasource[];
36
+ /** Datasources the build references but does not provision (`ExternalDatasource`). */
37
+ externalDatasources?: ExternalDatasourceRecord[];
38
+ /** Entries of `providers:` in dashboard provisioning files, as written: any field may be missing. */
39
+ providers?: Array<Record<string, unknown>>;
40
+ /** Alerting provisioning files (rule groups, contact points, policies, mute timings, templates). */
41
+ alerting?: AlertingDoc[];
29
42
  }
30
- /** Every variable name referenced in a string. */
31
- export declare function variableReferences(text: string): string[];
43
+ export type { AlertingDoc };
44
+ export { variableReferences };
45
+ type Json = Record<string, unknown>;
46
+ /** The datasources a set of artifacts knows by uid: provisioned and external. */
47
+ export declare function knownDatasourcesOf(a: GrafanaArtifacts): Map<string, KnownDatasource>;
32
48
  export declare function checkDatasourceRefs(a: GrafanaArtifacts): GrafanaIssue[];
33
49
  export declare function checkVariables(a: GrafanaArtifacts): GrafanaIssue[];
34
50
  export declare function checkDuplicates(a: GrafanaArtifacts): GrafanaIssue[];
35
51
  export declare function checkGrid(a: GrafanaArtifacts): GrafanaIssue[];
36
52
  export declare function checkIdentity(a: GrafanaArtifacts): GrafanaIssue[];
53
+ /**
54
+ * A value the pinned schemas (with the correction overlay) do not allow is
55
+ * an error; a key they do not know is a warning, since newer Grafana
56
+ * versions add keys the pin has not caught up with.
57
+ */
37
58
  export declare function checkSchema(a: GrafanaArtifacts): GrafanaIssue[];
59
+ /**
60
+ * Each panel query, query variable and alert rule query that reaches a
61
+ * Prometheus datasource is parsed as PromQL, with its template variables replaced by placeholders
62
+ * first (see `promql-check.ts`). A query whose datasource can't be told is
63
+ * not parsed.
64
+ */
65
+ export declare function checkPromqlSyntax(a: GrafanaArtifacts): GrafanaIssue[];
66
+ /** Every unit a panel sets, with where: field defaults, `unit` overrides, heatmap axes and cells, and a legacy graph panel's y-axes. */
67
+ export declare function panelUnits(panel: Json): Array<{
68
+ where: string;
69
+ unit: string;
70
+ }>;
71
+ /**
72
+ * A unit Grafana doesn't register (at v13.2.2) and that isn't a custom
73
+ * `<kind>:` unit is shown as a literal suffix, so `"byte"` renders `5 byte`.
74
+ * A warning: it renders, just not as meant.
75
+ */
76
+ export declare function checkUnits(a: GrafanaArtifacts): GrafanaIssue[];
77
+ export declare function checkProvisioning(a: GrafanaArtifacts): GrafanaIssue[];
38
78
  /** The issues one check finds. */
39
79
  export declare function issuesFor(code: GrafanaIssueCode, a: GrafanaArtifacts): GrafanaIssue[];
40
80
  /** Every issue every check finds, in code order. */