@intentius/chant-lexicon-grafana 0.98.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.
Files changed (532) hide show
  1. package/README.md +24 -8
  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/annotations.d.ts +61 -0
  11. package/dist/annotations.d.ts.map +1 -0
  12. package/dist/api/apply.d.ts +160 -0
  13. package/dist/api/apply.d.ts.map +1 -0
  14. package/dist/api/bind.d.ts +32 -0
  15. package/dist/api/bind.d.ts.map +1 -0
  16. package/dist/api/client.d.ts +76 -0
  17. package/dist/api/client.d.ts.map +1 -0
  18. package/dist/api/converge.d.ts +33 -0
  19. package/dist/api/converge.d.ts.map +1 -0
  20. package/dist/api/dashboards.d.ts +102 -0
  21. package/dist/api/dashboards.d.ts.map +1 -0
  22. package/dist/api/datasources.d.ts +26 -0
  23. package/dist/api/datasources.d.ts.map +1 -0
  24. package/dist/api/fake-grafana-writes.d.ts +41 -0
  25. package/dist/api/fake-grafana-writes.d.ts.map +1 -0
  26. package/dist/api/fake-grafana.d.ts +63 -0
  27. package/dist/api/fake-grafana.d.ts.map +1 -0
  28. package/dist/api/folders.d.ts +146 -0
  29. package/dist/api/folders.d.ts.map +1 -0
  30. package/dist/api/library-panels.d.ts +52 -0
  31. package/dist/api/library-panels.d.ts.map +1 -0
  32. package/dist/build.d.ts +55 -6
  33. package/dist/build.d.ts.map +1 -1
  34. package/dist/catalog.d.ts +1 -1
  35. package/dist/catalog.d.ts.map +1 -1
  36. package/dist/codegen/docs.d.ts.map +1 -1
  37. package/dist/codegen/generate.d.ts +7 -1
  38. package/dist/codegen/generate.d.ts.map +1 -1
  39. package/dist/codegen/schema-types.d.ts +3 -3
  40. package/dist/codegen/schema-types.d.ts.map +1 -1
  41. package/dist/composites/agent-dashboard.d.ts.map +1 -1
  42. package/dist/composites/catalog.d.ts.map +1 -1
  43. package/dist/composites/index.d.ts +4 -2
  44. package/dist/composites/index.d.ts.map +1 -1
  45. package/dist/composites/red-dashboard.d.ts +21 -2
  46. package/dist/composites/red-dashboard.d.ts.map +1 -1
  47. package/dist/composites/shared.d.ts +11 -3
  48. package/dist/composites/shared.d.ts.map +1 -1
  49. package/dist/composites/slo-alert-rules.d.ts +92 -0
  50. package/dist/composites/slo-alert-rules.d.ts.map +1 -0
  51. package/dist/config.d.ts +111 -0
  52. package/dist/config.d.ts.map +1 -0
  53. package/dist/contact-point-secrets.d.ts +17 -0
  54. package/dist/contact-point-secrets.d.ts.map +1 -0
  55. package/dist/dashboard.d.ts +51 -9
  56. package/dist/dashboard.d.ts.map +1 -1
  57. package/dist/datasource-refs.d.ts +99 -0
  58. package/dist/datasource-refs.d.ts.map +1 -0
  59. package/dist/datasource-settings.d.ts +834 -0
  60. package/dist/datasource-settings.d.ts.map +1 -0
  61. package/dist/datasource.d.ts +82 -11
  62. package/dist/datasource.d.ts.map +1 -1
  63. package/dist/deep-observe-hooks.d.ts +64 -0
  64. package/dist/deep-observe-hooks.d.ts.map +1 -0
  65. package/dist/deep-observe.d.ts +47 -0
  66. package/dist/deep-observe.d.ts.map +1 -0
  67. package/dist/describe-resources.d.ts +50 -0
  68. package/dist/describe-resources.d.ts.map +1 -0
  69. package/dist/detect.d.ts +32 -3
  70. package/dist/detect.d.ts.map +1 -1
  71. package/dist/export-resources.d.ts +38 -0
  72. package/dist/export-resources.d.ts.map +1 -0
  73. package/dist/folder.d.ts +68 -0
  74. package/dist/folder.d.ts.map +1 -0
  75. package/dist/import/alerting.d.ts +40 -0
  76. package/dist/import/alerting.d.ts.map +1 -0
  77. package/dist/import/edits.d.ts +47 -0
  78. package/dist/import/edits.d.ts.map +1 -0
  79. package/dist/import/embedded.d.ts +14 -0
  80. package/dist/import/embedded.d.ts.map +1 -0
  81. package/dist/import/generator.d.ts +60 -0
  82. package/dist/import/generator.d.ts.map +1 -0
  83. package/dist/import/live-export.d.ts +108 -0
  84. package/dist/import/live-export.d.ts.map +1 -0
  85. package/dist/import/mappings.d.ts +89 -0
  86. package/dist/import/mappings.d.ts.map +1 -0
  87. package/dist/import/model.d.ts +105 -0
  88. package/dist/import/model.d.ts.map +1 -0
  89. package/dist/import/normalize-alerting.d.ts +26 -0
  90. package/dist/import/normalize-alerting.d.ts.map +1 -0
  91. package/dist/import/normalize.d.ts +74 -0
  92. package/dist/import/normalize.d.ts.map +1 -0
  93. package/dist/import/parser.d.ts +125 -0
  94. package/dist/import/parser.d.ts.map +1 -0
  95. package/dist/import/report.d.ts +26 -0
  96. package/dist/import/report.d.ts.map +1 -0
  97. package/dist/import/testdata/fixtures.d.ts +41 -0
  98. package/dist/import/testdata/fixtures.d.ts.map +1 -0
  99. package/dist/import/v2.d.ts +73 -0
  100. package/dist/import/v2.d.ts.map +1 -0
  101. package/dist/index.d.ts +31 -12
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/init-templates.d.ts +27 -0
  104. package/dist/init-templates.d.ts.map +1 -0
  105. package/dist/integrity.json +22 -12
  106. package/dist/k8s.d.ts +107 -0
  107. package/dist/k8s.d.ts.map +1 -0
  108. package/dist/lint/audit-catalog.d.ts +2 -1
  109. package/dist/lint/audit-catalog.d.ts.map +1 -1
  110. package/dist/lint/post-synth/graf101.d.ts +2 -2
  111. package/dist/lint/post-synth/graf102.d.ts +1 -1
  112. package/dist/lint/post-synth/graf104.d.ts +2 -2
  113. package/dist/lint/post-synth/graf106.d.ts +2 -2
  114. package/dist/lint/post-synth/graf107.d.ts +1 -1
  115. package/dist/lint/post-synth/graf108.d.ts +8 -0
  116. package/dist/lint/post-synth/graf108.d.ts.map +1 -0
  117. package/dist/lint/post-synth/graf109.d.ts +8 -0
  118. package/dist/lint/post-synth/graf109.d.ts.map +1 -0
  119. package/dist/lint/post-synth/graf110.d.ts +8 -0
  120. package/dist/lint/post-synth/graf110.d.ts.map +1 -0
  121. package/dist/lint/post-synth/graf111.d.ts +8 -0
  122. package/dist/lint/post-synth/graf111.d.ts.map +1 -0
  123. package/dist/lint/post-synth/graf112.d.ts +8 -0
  124. package/dist/lint/post-synth/graf112.d.ts.map +1 -0
  125. package/dist/lint/post-synth/graf113.d.ts +8 -0
  126. package/dist/lint/post-synth/graf113.d.ts.map +1 -0
  127. package/dist/lint/post-synth/graf114.d.ts +8 -0
  128. package/dist/lint/post-synth/graf114.d.ts.map +1 -0
  129. package/dist/lint/post-synth/graf115.d.ts +8 -0
  130. package/dist/lint/post-synth/graf115.d.ts.map +1 -0
  131. package/dist/lint/post-synth/grafana-helpers.d.ts +7 -5
  132. package/dist/lint/post-synth/grafana-helpers.d.ts.map +1 -1
  133. package/dist/lint/post-synth/index.d.ts.map +1 -1
  134. package/dist/lint/rules/literal-secret.d.ts +7 -3
  135. package/dist/lint/rules/literal-secret.d.ts.map +1 -1
  136. package/dist/lsp/hover.d.ts.map +1 -1
  137. package/dist/manifest.json +1 -1
  138. package/dist/members.d.ts +27 -0
  139. package/dist/members.d.ts.map +1 -0
  140. package/dist/meta.json +205 -0
  141. package/dist/okf/index.md +53 -4
  142. package/dist/okf/rules/GRAF002.md +3 -2
  143. package/dist/okf/rules/GRAF101.md +3 -2
  144. package/dist/okf/rules/GRAF102.md +1 -0
  145. package/dist/okf/rules/GRAF104.md +2 -2
  146. package/dist/okf/rules/GRAF106.md +2 -2
  147. package/dist/okf/rules/GRAF108.md +11 -0
  148. package/dist/okf/rules/GRAF109.md +15 -0
  149. package/dist/okf/rules/GRAF110.md +11 -0
  150. package/dist/okf/rules/GRAF111.md +11 -0
  151. package/dist/okf/rules/GRAF112.md +16 -0
  152. package/dist/okf/rules/GRAF113.md +16 -0
  153. package/dist/okf/rules/GRAF114.md +11 -0
  154. package/dist/okf/rules/GRAF115.md +11 -0
  155. package/dist/okf/types/AdhocVariable.md +9 -0
  156. package/dist/okf/types/AlertListPanel.md +9 -0
  157. package/dist/okf/types/AlertQuery.md +9 -0
  158. package/dist/okf/types/AlertRule.md +9 -0
  159. package/dist/okf/types/AlertRuleGroup.md +9 -0
  160. package/dist/okf/types/AzureMonitorQuery.md +9 -0
  161. package/dist/okf/types/BarChartPanel.md +9 -0
  162. package/dist/okf/types/BarGaugePanel.md +9 -0
  163. package/dist/okf/types/BigQueryQuery.md +9 -0
  164. package/dist/okf/types/CanvasPanel.md +9 -0
  165. package/dist/okf/types/ClassicConditionsExpression.md +9 -0
  166. package/dist/okf/types/CloudMonitoringQuery.md +9 -0
  167. package/dist/okf/types/CloudWatchQuery.md +9 -0
  168. package/dist/okf/types/ContactPoint.md +14 -0
  169. package/dist/okf/types/Dashboard.md +2 -1
  170. package/dist/okf/types/Datasource.md +3 -2
  171. package/dist/okf/types/DatasourceProvisioning.md +9 -0
  172. package/dist/okf/types/ElasticsearchQuery.md +9 -0
  173. package/dist/okf/types/ExternalDatasource.md +15 -0
  174. package/dist/okf/types/FlameGraphPanel.md +9 -0
  175. package/dist/okf/types/Folder.md +9 -0
  176. package/dist/okf/types/GeomapPanel.md +9 -0
  177. package/dist/okf/types/GroupByVariable.md +9 -0
  178. package/dist/okf/types/HistogramPanel.md +9 -0
  179. package/dist/okf/types/MSSQLQuery.md +9 -0
  180. package/dist/okf/types/MathExpression.md +9 -0
  181. package/dist/okf/types/MuteTiming.md +13 -0
  182. package/dist/okf/types/MySQLQuery.md +9 -0
  183. package/dist/okf/types/NodeGraphPanel.md +9 -0
  184. package/dist/okf/types/NotificationPolicy.md +9 -0
  185. package/dist/okf/types/NotificationTemplate.md +9 -0
  186. package/dist/okf/types/PieChartPanel.md +9 -0
  187. package/dist/okf/types/PostgresQuery.md +9 -0
  188. package/dist/okf/types/PyroscopeQuery.md +9 -0
  189. package/dist/okf/types/ReduceExpression.md +9 -0
  190. package/dist/okf/types/ResampleExpression.md +9 -0
  191. package/dist/okf/types/SqlExpression.md +9 -0
  192. package/dist/okf/types/StateTimelinePanel.md +9 -0
  193. package/dist/okf/types/StatusHistoryPanel.md +9 -0
  194. package/dist/okf/types/SwitchVariable.md +9 -0
  195. package/dist/okf/types/ThresholdExpression.md +9 -0
  196. package/dist/okf/types/TrendPanel.md +9 -0
  197. package/dist/okf/types/XYChartPanel.md +9 -0
  198. package/dist/op/activities/grafana-apply.d.ts +86 -0
  199. package/dist/op/activities/grafana-apply.d.ts.map +1 -0
  200. package/dist/op/activities/index.d.ts +9 -0
  201. package/dist/op/activities/index.d.ts.map +1 -0
  202. package/dist/op/builders.d.ts +24 -0
  203. package/dist/op/builders.d.ts.map +1 -0
  204. package/dist/ownership.d.ts +78 -0
  205. package/dist/ownership.d.ts.map +1 -0
  206. package/dist/panel-options.d.ts +65 -0
  207. package/dist/panel-options.d.ts.map +1 -0
  208. package/dist/panels.d.ts +46 -9
  209. package/dist/panels.d.ts.map +1 -1
  210. package/dist/pin.d.ts +29 -7
  211. package/dist/pin.d.ts.map +1 -1
  212. package/dist/plugin.d.ts.map +1 -1
  213. package/dist/promql-check.d.ts +51 -0
  214. package/dist/promql-check.d.ts.map +1 -0
  215. package/dist/query-models.d.ts +95 -0
  216. package/dist/query-models.d.ts.map +1 -0
  217. package/dist/query.d.ts +116 -18
  218. package/dist/query.d.ts.map +1 -1
  219. package/dist/rules/graf101.ts +3 -3
  220. package/dist/rules/graf102.ts +1 -1
  221. package/dist/rules/graf104.ts +3 -3
  222. package/dist/rules/graf106.ts +3 -3
  223. package/dist/rules/graf107.ts +1 -1
  224. package/dist/rules/graf108.ts +17 -0
  225. package/dist/rules/graf109.ts +17 -0
  226. package/dist/rules/graf110.ts +17 -0
  227. package/dist/rules/graf111.ts +17 -0
  228. package/dist/rules/graf112.ts +17 -0
  229. package/dist/rules/graf113.ts +17 -0
  230. package/dist/rules/graf114.ts +17 -0
  231. package/dist/rules/graf115.ts +17 -0
  232. package/dist/rules/grafana-helpers.ts +27 -10
  233. package/dist/rules/literal-secret.ts +60 -6
  234. package/dist/schema/azuremonitor.gen.d.ts +354 -0
  235. package/dist/schema/azuremonitor.gen.d.ts.map +1 -0
  236. package/dist/schema/barchart.gen.d.ts +198 -0
  237. package/dist/schema/barchart.gen.d.ts.map +1 -0
  238. package/dist/schema/bargauge.gen.d.ts +97 -0
  239. package/dist/schema/bargauge.gen.d.ts.map +1 -0
  240. package/dist/schema/bigquery.gen.d.ts +93 -0
  241. package/dist/schema/bigquery.gen.d.ts.map +1 -0
  242. package/dist/schema/canvas.gen.d.ts +152 -0
  243. package/dist/schema/canvas.gen.d.ts.map +1 -0
  244. package/dist/schema/cloudwatch.gen.d.ts +394 -0
  245. package/dist/schema/cloudwatch.gen.d.ts.map +1 -0
  246. package/dist/schema/dashboard.gen.d.ts +196 -21
  247. package/dist/schema/dashboard.gen.d.ts.map +1 -1
  248. package/dist/schema/elasticsearch.gen.d.ts +444 -0
  249. package/dist/schema/elasticsearch.gen.d.ts.map +1 -0
  250. package/dist/schema/expr.gen.d.ts +606 -0
  251. package/dist/schema/expr.gen.d.ts.map +1 -0
  252. package/dist/schema/gauge.gen.d.ts.map +1 -1
  253. package/dist/schema/geomap.gen.d.ts +100 -0
  254. package/dist/schema/geomap.gen.d.ts.map +1 -0
  255. package/dist/schema/googlecloudmonitoring.gen.d.ts +312 -0
  256. package/dist/schema/googlecloudmonitoring.gen.d.ts.map +1 -0
  257. package/dist/schema/grafanapyroscope.gen.d.ts +60 -0
  258. package/dist/schema/grafanapyroscope.gen.d.ts.map +1 -0
  259. package/dist/schema/heatmap.gen.d.ts.map +1 -1
  260. package/dist/schema/histogram.gen.d.ts +132 -0
  261. package/dist/schema/histogram.gen.d.ts.map +1 -0
  262. package/dist/schema/index.d.ts +18 -0
  263. package/dist/schema/index.d.ts.map +1 -1
  264. package/dist/schema/logs.gen.d.ts +1 -0
  265. package/dist/schema/logs.gen.d.ts.map +1 -1
  266. package/dist/schema/loki.gen.d.ts.map +1 -1
  267. package/dist/schema/nodegraph.gen.d.ts +49 -0
  268. package/dist/schema/nodegraph.gen.d.ts.map +1 -0
  269. package/dist/schema/piechart.gen.d.ts +127 -0
  270. package/dist/schema/piechart.gen.d.ts.map +1 -0
  271. package/dist/schema/prometheus.gen.d.ts.map +1 -1
  272. package/dist/schema/stat.gen.d.ts.map +1 -1
  273. package/dist/schema/statetimeline.gen.d.ts +124 -0
  274. package/dist/schema/statetimeline.gen.d.ts.map +1 -0
  275. package/dist/schema/statushistory.gen.d.ts +114 -0
  276. package/dist/schema/statushistory.gen.d.ts.map +1 -0
  277. package/dist/schema/table.gen.d.ts +35 -3
  278. package/dist/schema/table.gen.d.ts.map +1 -1
  279. package/dist/schema/tempo.gen.d.ts.map +1 -1
  280. package/dist/schema/text.gen.d.ts.map +1 -1
  281. package/dist/schema/timeseries.gen.d.ts +5 -1
  282. package/dist/schema/timeseries.gen.d.ts.map +1 -1
  283. package/dist/schema/trend.gen.d.ts +180 -0
  284. package/dist/schema/trend.gen.d.ts.map +1 -0
  285. package/dist/schema/xychart.gen.d.ts +145 -0
  286. package/dist/schema/xychart.gen.d.ts.map +1 -0
  287. package/dist/schema-validate.d.ts +39 -4
  288. package/dist/schema-validate.d.ts.map +1 -1
  289. package/dist/serializer.d.ts +11 -3
  290. package/dist/serializer.d.ts.map +1 -1
  291. package/dist/skill-defs.d.ts.map +1 -1
  292. package/dist/skills/chant-grafana-alerting.md +49 -0
  293. package/dist/skills/chant-grafana-operations.md +108 -0
  294. package/dist/skills/chant-grafana-provisioning.md +3 -3
  295. package/dist/skills/chant-grafana.md +15 -8
  296. package/dist/spec/fetch-units-cli.d.ts +3 -0
  297. package/dist/spec/fetch-units-cli.d.ts.map +1 -0
  298. package/dist/spec/overlay.d.ts +43 -0
  299. package/dist/spec/overlay.d.ts.map +1 -0
  300. package/dist/spec/schemas.d.ts +21 -13
  301. package/dist/spec/schemas.d.ts.map +1 -1
  302. package/dist/spec/schemas.gen.d.ts +3 -0
  303. package/dist/spec/schemas.gen.d.ts.map +1 -0
  304. package/dist/spec/units.d.ts +35 -0
  305. package/dist/spec/units.d.ts.map +1 -0
  306. package/dist/spec/units.gen.d.ts +2 -0
  307. package/dist/spec/units.gen.d.ts.map +1 -0
  308. package/dist/transformations.d.ts +459 -0
  309. package/dist/transformations.d.ts.map +1 -0
  310. package/dist/util.d.ts +6 -0
  311. package/dist/util.d.ts.map +1 -1
  312. package/dist/validate-alerting.d.ts +65 -0
  313. package/dist/validate-alerting.d.ts.map +1 -0
  314. package/dist/validate-output.d.ts +62 -9
  315. package/dist/validate-output.d.ts.map +1 -1
  316. package/dist/validate.d.ts.map +1 -1
  317. package/dist/validation.d.ts +14 -0
  318. package/dist/validation.d.ts.map +1 -0
  319. package/dist/variables.d.ts +109 -7
  320. package/dist/variables.d.ts.map +1 -1
  321. package/package.json +12 -4
  322. package/src/actions/actions.test.ts +24 -0
  323. package/src/actions/grafana.ts +40 -0
  324. package/src/actions/index.ts +1 -0
  325. package/src/alerting-build.ts +376 -0
  326. package/src/alerting.e2e.test.ts +212 -0
  327. package/src/alerting.test.ts +272 -0
  328. package/src/alerting.ts +435 -0
  329. package/src/annotations.ts +84 -0
  330. package/src/api/apply.test.ts +256 -0
  331. package/src/api/apply.ts +394 -0
  332. package/src/api/bind.ts +58 -0
  333. package/src/api/client.ts +148 -0
  334. package/src/api/converge.ts +63 -0
  335. package/src/api/dashboards.ts +247 -0
  336. package/src/api/datasources.ts +33 -0
  337. package/src/api/fake-grafana-writes.ts +201 -0
  338. package/src/api/fake-grafana.ts +190 -0
  339. package/src/api/folders.ts +339 -0
  340. package/src/api/library-panels.ts +101 -0
  341. package/src/build.test.ts +351 -10
  342. package/src/build.ts +294 -55
  343. package/src/catalog.ts +104 -2
  344. package/src/codegen/docs.ts +50 -10
  345. package/src/codegen/generate.ts +27 -1
  346. package/src/codegen/schema-types.ts +16 -6
  347. package/src/composites/agent-dashboard.ts +6 -3
  348. package/src/composites/catalog.test.ts +2 -2
  349. package/src/composites/catalog.ts +82 -0
  350. package/src/composites/composites.test.ts +73 -9
  351. package/src/composites/index.ts +4 -2
  352. package/src/composites/queries.e2e.test.ts +374 -0
  353. package/src/composites/red-dashboard.ts +83 -12
  354. package/src/composites/shared.ts +14 -2
  355. package/src/composites/slo-alert-rules.ts +149 -0
  356. package/src/config.test.ts +61 -0
  357. package/src/config.ts +138 -0
  358. package/src/contact-point-secrets.ts +63 -0
  359. package/src/dashboard.ts +68 -9
  360. package/src/datasource-refs.test.ts +56 -0
  361. package/src/datasource-refs.ts +213 -0
  362. package/src/datasource-settings.test.ts +106 -0
  363. package/src/datasource-settings.ts +941 -0
  364. package/src/datasource.ts +123 -11
  365. package/src/deep-observe-hooks.ts +267 -0
  366. package/src/deep-observe.test.ts +311 -0
  367. package/src/deep-observe.ts +187 -0
  368. package/src/describe-resources.test.ts +271 -0
  369. package/src/describe-resources.ts +244 -0
  370. package/src/detect.ts +82 -5
  371. package/src/export-resources.test.ts +129 -0
  372. package/src/export-resources.ts +84 -0
  373. package/src/folder.ts +118 -0
  374. package/src/generated/lexicon-grafana.json +205 -0
  375. package/src/import/alerting-roundtrip.test.ts +161 -0
  376. package/src/import/alerting.ts +500 -0
  377. package/src/import/edits.ts +95 -0
  378. package/src/import/embedded.test.ts +45 -0
  379. package/src/import/embedded.ts +47 -0
  380. package/src/import/generated-types.e2e.test.ts +130 -0
  381. package/src/import/generator.test.ts +210 -0
  382. package/src/import/generator.ts +463 -0
  383. package/src/import/live-export.ts +264 -0
  384. package/src/import/mappings.ts +336 -0
  385. package/src/import/model.ts +117 -0
  386. package/src/import/normalize-alerting.ts +101 -0
  387. package/src/import/normalize.test.ts +117 -0
  388. package/src/import/normalize.ts +393 -0
  389. package/src/import/parser.test.ts +516 -0
  390. package/src/import/parser.ts +1387 -0
  391. package/src/import/report.ts +62 -0
  392. package/src/import/roundtrip.test.ts +563 -0
  393. package/src/import/testdata/fixtures.ts +137 -0
  394. package/src/import/v2.test.ts +292 -0
  395. package/src/import/v2.ts +804 -0
  396. package/src/import.e2e.test.ts +31 -84
  397. package/src/import.test.ts +9 -3
  398. package/src/index.ts +308 -14
  399. package/src/init-templates.test.ts +74 -0
  400. package/src/init-templates.ts +349 -0
  401. package/src/k8s.test.ts +98 -0
  402. package/src/k8s.ts +197 -0
  403. package/src/lint/audit-catalog.ts +68 -3
  404. package/src/lint/core-lint.test.ts +43 -0
  405. package/src/lint/post-synth/graf101.ts +3 -3
  406. package/src/lint/post-synth/graf102.ts +1 -1
  407. package/src/lint/post-synth/graf104.ts +3 -3
  408. package/src/lint/post-synth/graf106.ts +3 -3
  409. package/src/lint/post-synth/graf107.ts +1 -1
  410. package/src/lint/post-synth/graf108.ts +17 -0
  411. package/src/lint/post-synth/graf109.ts +17 -0
  412. package/src/lint/post-synth/graf110.ts +17 -0
  413. package/src/lint/post-synth/graf111.ts +17 -0
  414. package/src/lint/post-synth/graf112.ts +17 -0
  415. package/src/lint/post-synth/graf113.ts +17 -0
  416. package/src/lint/post-synth/graf114.ts +17 -0
  417. package/src/lint/post-synth/graf115.ts +17 -0
  418. package/src/lint/post-synth/grafana-helpers.ts +27 -10
  419. package/src/lint/post-synth/index.ts +16 -0
  420. package/src/lint/post-synth/post-synth.test.ts +333 -12
  421. package/src/lint/rules/literal-secret.ts +60 -6
  422. package/src/lint/rules/rules.test.ts +27 -0
  423. package/src/load-cost.test.ts +35 -0
  424. package/src/lsp/completions.test.ts +5 -0
  425. package/src/lsp/hover.test.ts +7 -0
  426. package/src/lsp/hover.ts +8 -1
  427. package/src/members.ts +68 -0
  428. package/src/observe.e2e.test.ts +255 -0
  429. package/src/op/activities/grafana-apply.e2e.test.ts +184 -0
  430. package/src/op/activities/grafana-apply.test.ts +243 -0
  431. package/src/op/activities/grafana-apply.ts +197 -0
  432. package/src/op/activities/index.ts +8 -0
  433. package/src/op/builders.test.ts +40 -0
  434. package/src/op/builders.ts +34 -0
  435. package/src/ownership.ts +122 -0
  436. package/src/panel-options.ts +66 -0
  437. package/src/panels.test.ts +53 -0
  438. package/src/panels.ts +148 -10
  439. package/src/pin.ts +69 -6
  440. package/src/plugin.test.ts +12 -2
  441. package/src/plugin.ts +75 -0
  442. package/src/promql-check.test.ts +108 -0
  443. package/src/promql-check.ts +193 -0
  444. package/src/query-models.ts +94 -0
  445. package/src/query.test.ts +166 -0
  446. package/src/query.ts +190 -20
  447. package/src/schema/azuremonitor.gen.ts +381 -0
  448. package/src/schema/barchart.gen.ts +221 -0
  449. package/src/schema/bargauge.gen.ts +111 -0
  450. package/src/schema/bigquery.gen.ts +110 -0
  451. package/src/schema/canvas.gen.ts +176 -0
  452. package/src/schema/cloudwatch.gen.ts +423 -0
  453. package/src/schema/dashboard.gen.ts +206 -22
  454. package/src/schema/elasticsearch.gen.ts +508 -0
  455. package/src/schema/expr.gen.ts +618 -0
  456. package/src/schema/gauge.gen.ts +2 -1
  457. package/src/schema/geomap.gen.ts +112 -0
  458. package/src/schema/googlecloudmonitoring.gen.ts +330 -0
  459. package/src/schema/grafanapyroscope.gen.ts +66 -0
  460. package/src/schema/heatmap.gen.ts +2 -1
  461. package/src/schema/histogram.gen.ts +151 -0
  462. package/src/schema/index.ts +18 -0
  463. package/src/schema/logs.gen.ts +3 -1
  464. package/src/schema/loki.gen.ts +2 -1
  465. package/src/schema/nodegraph.gen.ts +58 -0
  466. package/src/schema/piechart.gen.ts +146 -0
  467. package/src/schema/prometheus.gen.ts +2 -1
  468. package/src/schema/stat.gen.ts +2 -1
  469. package/src/schema/statetimeline.gen.ts +143 -0
  470. package/src/schema/statushistory.gen.ts +132 -0
  471. package/src/schema/table.gen.ts +41 -4
  472. package/src/schema/tempo.gen.ts +2 -1
  473. package/src/schema/text.gen.ts +2 -1
  474. package/src/schema/timeseries.gen.ts +7 -2
  475. package/src/schema/trend.gen.ts +208 -0
  476. package/src/schema/xychart.gen.ts +167 -0
  477. package/src/schema-overlay.test.ts +282 -0
  478. package/src/schema-validate.ts +199 -57
  479. package/src/schema.test.ts +4 -2
  480. package/src/serializer.test.ts +13 -1
  481. package/src/serializer.ts +11 -3
  482. package/src/skill-defs.ts +34 -0
  483. package/src/skills/chant-grafana-alerting.md +49 -0
  484. package/src/skills/chant-grafana-operations.md +108 -0
  485. package/src/skills/chant-grafana-provisioning.md +3 -3
  486. package/src/skills/chant-grafana.md +15 -8
  487. package/src/spec/fetch-cli.ts +3 -3
  488. package/src/spec/fetch-units-cli.ts +37 -0
  489. package/src/spec/overlay/canvas.overlay.json +142 -0
  490. package/src/spec/overlay/dashboard.overlay.json +378 -0
  491. package/src/spec/overlay/expr.overlay.json +14 -0
  492. package/src/spec/overlay/geomap.overlay.json +35 -0
  493. package/src/spec/overlay/logs.overlay.json +14 -0
  494. package/src/spec/overlay/nodegraph.overlay.json +31 -0
  495. package/src/spec/overlay/piechart.overlay.json +17 -0
  496. package/src/spec/overlay/table.overlay.json +103 -0
  497. package/src/spec/overlay/timeseries.overlay.json +21 -0
  498. package/src/spec/overlay/trend.overlay.json +17 -0
  499. package/src/spec/overlay/xychart.overlay.json +16 -0
  500. package/src/spec/overlay.ts +105 -0
  501. package/src/spec/schemas/azuremonitor.jsonschema.json +679 -0
  502. package/src/spec/schemas/barchart.jsonschema.json +419 -0
  503. package/src/spec/schemas/bargauge.jsonschema.json +224 -0
  504. package/src/spec/schemas/bigquery.jsonschema.json +290 -0
  505. package/src/spec/schemas/canvas.jsonschema.json +356 -0
  506. package/src/spec/schemas/cloudwatch.jsonschema.json +721 -0
  507. package/src/spec/schemas/dashboardv2.jsonschema.json +3387 -0
  508. package/src/spec/schemas/elasticsearch.jsonschema.json +1695 -0
  509. package/src/spec/schemas/expr.jsonschema.json +987 -0
  510. package/src/spec/schemas/geomap.jsonschema.json +220 -0
  511. package/src/spec/schemas/googlecloudmonitoring.jsonschema.json +488 -0
  512. package/src/spec/schemas/grafanapyroscope.jsonschema.json +93 -0
  513. package/src/spec/schemas/histogram.jsonschema.json +308 -0
  514. package/src/spec/schemas/nodegraph.jsonschema.json +77 -0
  515. package/src/spec/schemas/piechart.jsonschema.json +275 -0
  516. package/src/spec/schemas/statetimeline.jsonschema.json +324 -0
  517. package/src/spec/schemas/statushistory.jsonschema.json +292 -0
  518. package/src/spec/schemas/trend.jsonschema.json +449 -0
  519. package/src/spec/schemas/xychart.jsonschema.json +428 -0
  520. package/src/spec/schemas.gen.ts +40 -0
  521. package/src/spec/schemas.ts +30 -16
  522. package/src/spec/units.gen.ts +281 -0
  523. package/src/spec/units.ts +77 -0
  524. package/src/transformations.test.ts +65 -0
  525. package/src/transformations.ts +574 -0
  526. package/src/util.ts +8 -0
  527. package/src/validate-alerting.test.ts +255 -0
  528. package/src/validate-alerting.ts +430 -0
  529. package/src/validate-output.ts +427 -104
  530. package/src/validate.ts +28 -0
  531. package/src/validation.ts +27 -0
  532. package/src/variables.ts +120 -8
@@ -1,24 +1,22 @@
1
1
  /**
2
2
  * "A dashboard builds to JSON that Grafana imports without edits", against
3
- * Grafana itself.
3
+ * Grafana itself, on every release in `GRAFANA_IMAGES` (12.4 and 13.2).
4
4
  *
5
5
  * Builds each example (getting-started, and dashboards-from-declarations,
6
6
  * whose dashboards the RED, SLO and agent composites build), mounts its
7
7
  * provisioning files and dashboards into a pinned `grafana/grafana`
8
- * container, and asserts that
9
- * Grafana provisioned every datasource and dashboard and hands each
10
- * dashboard back with the panels that were built. It then imports the same
11
- * JSON a second time through `POST /api/dashboards/db`, the path the UI's
12
- * import uses, under another uid.
8
+ * container, and asserts that Grafana provisioned every datasource and
9
+ * dashboard, and that each stored dashboard model is the built JSON, key
10
+ * for key, once the keys Grafana adds (`GRAFANA_INJECTED`: `id` and
11
+ * `version`) are taken out. It then imports the same JSON a second time
12
+ * through `POST /api/dashboards/db`, the path the UI's import uses, under
13
+ * another uid, and compares that stored model the same way.
13
14
  *
14
15
  * Skipped, with the reason in the test name, when Docker is not running.
15
- * On demand: `npx vitest run --project e2e lexicons/grafana`.
16
+ * On demand: `npx vitest run --project e2e lexicons/grafana/src/import.e2e.test.ts`.
16
17
  */
17
- import { execSync } from "node:child_process";
18
- import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
19
- import { tmpdir } from "node:os";
18
+ import { mkdirSync, writeFileSync } from "node:fs";
20
19
  import { dirname, join } from "node:path";
21
- import { fileURLToPath } from "node:url";
22
20
  import { afterAll, describe, expect, it } from "vitest";
23
21
  import { build } from "@intentius/chant/build";
24
22
  import type { SerializerResult } from "@intentius/chant/serializer";
@@ -26,23 +24,12 @@ import type { Serializer } from "@intentius/chant/serializer";
26
24
  import { otelSerializer } from "@intentius/chant-lexicon-otel/serializer";
27
25
  import { prometheusSerializer } from "@intentius/chant-lexicon-prometheus/serializer";
28
26
  import { grafanaSerializer } from "./serializer";
27
+ import { DockerScope, GRAFANA_IMAGES, dockerAvailable, waitFor } from "../test/e2e/containers";
28
+ import { withoutInjected } from "../test/e2e/stored-model";
29
29
 
30
- /** The Grafana release the import test runs against; `CHANT_GRAFANA_IMAGE` overrides it. */
31
- export const GRAFANA_IMAGE = process.env.CHANT_GRAFANA_IMAGE ?? "grafana/grafana:12.4.11";
32
-
33
- function available(cmd: string): boolean {
34
- try {
35
- execSync(cmd, { stdio: "ignore" });
36
- return true;
37
- } catch {
38
- return false;
39
- }
40
- }
41
-
42
- const hasDocker = available("docker info");
30
+ const hasDocker = dockerAvailable();
43
31
  const skipReason = hasDocker ? "" : "Docker is not running";
44
- const AUTH = `Basic ${Buffer.from("admin:admin").toString("base64")}`;
45
- const examples = join(dirname(dirname(fileURLToPath(import.meta.url))), "examples");
32
+ const examples = join(import.meta.dirname, "..", "examples");
46
33
 
47
34
  /** Each example, and the serializers its build root needs. */
48
35
  const EXAMPLES: Array<{ name: string; serializers: Serializer[] }> = [
@@ -50,98 +37,58 @@ const EXAMPLES: Array<{ name: string; serializers: Serializer[] }> = [
50
37
  { name: "dashboards-from-declarations", serializers: [otelSerializer, prometheusSerializer, grafanaSerializer] },
51
38
  ];
52
39
 
53
- async function waitFor<T>(what: string, fn: () => Promise<T | undefined>, timeoutMs = 120_000): Promise<T> {
54
- const deadline = Date.now() + timeoutMs;
55
- let last: unknown;
56
- while (Date.now() < deadline) {
57
- try {
58
- const v = await fn();
59
- if (v !== undefined) return v;
60
- } catch (err) {
61
- last = err;
62
- }
63
- await new Promise((r) => setTimeout(r, 1000));
64
- }
65
- throw new Error(`timed out waiting for ${what}${last ? `: ${String(last)}` : ""}`);
66
- }
40
+ const MATRIX = GRAFANA_IMAGES.flatMap((image) => EXAMPLES.map((e) => ({ ...e, image })));
67
41
 
68
- describe.skipIf(!hasDocker).each(EXAMPLES)(`Grafana imports the $name dashboards without edits${skipReason ? ` (skipped: ${skipReason})` : ""}`, ({ name, serializers }) => {
69
- const CONTAINER = `chant-grafana-import-${name}-${process.pid}`;
70
- const dir = mkdtempSync(join(tmpdir(), "chant-grafana-import-"));
42
+ describe.skipIf(!hasDocker).each(MATRIX)(`$image imports the $name dashboards without edits${skipReason ? ` (skipped: ${skipReason})` : ""}`, ({ name, serializers, image }) => {
43
+ const scope = new DockerScope(`grafana-import-${name}`);
71
44
 
72
- afterAll(() => {
73
- try {
74
- execSync(`docker rm -f ${CONTAINER}`, { stdio: "ignore" });
75
- } catch {
76
- // already gone
77
- }
78
- rmSync(dir, { recursive: true, force: true });
79
- });
45
+ afterAll(() => scope.cleanup());
80
46
 
81
- it("provisions every datasource and dashboard, and accepts the JSON through the import API", { timeout: 300_000 }, async () => {
47
+ it("provisions every datasource and dashboard as built, and accepts the JSON through the import API", { timeout: 300_000 }, async () => {
82
48
  const result = await build(join(examples, name, "src"), serializers);
83
49
  expect(result.errors).toEqual([]);
84
50
  const out = result.outputs.get("grafana") as SerializerResult;
51
+ const dir = scope.tempDir();
85
52
  for (const [file, content] of Object.entries(out.files ?? {})) {
86
53
  mkdirSync(dirname(join(dir, file)), { recursive: true });
87
54
  writeFileSync(join(dir, file), content);
88
55
  }
89
56
  const index = JSON.parse(out.primary) as { dashboards: Array<{ uid: string; title: string; folder?: string; file: string }>; datasources: Array<{ uid: string; type: string; name: string }> };
90
57
 
91
- execSync(
92
- [
93
- "docker run -d",
94
- `--name ${CONTAINER}`,
95
- "-p 127.0.0.1::3000",
96
- "-e GF_SECURITY_ADMIN_PASSWORD=admin",
97
- "-e GF_ANALYTICS_REPORTING_ENABLED=false",
98
- "-e GF_ANALYTICS_CHECK_FOR_UPDATES=false",
99
- `-v ${join(dir, "provisioning")}:/etc/grafana/provisioning:ro`,
100
- `-v ${join(dir, "dashboards")}:/var/lib/grafana/dashboards:ro`,
101
- GRAFANA_IMAGE,
102
- ].join(" "),
103
- { stdio: "ignore" },
104
- );
105
- const port = execSync(`docker port ${CONTAINER} 3000/tcp`).toString().trim().split("\n")[0].split(":").pop();
106
- const base = `http://127.0.0.1:${port}`;
107
- const api = async (path: string, init?: RequestInit) => {
108
- const res = await fetch(`${base}${path}`, { ...init, headers: { authorization: AUTH, "content-type": "application/json", ...(init?.headers ?? {}) } });
109
- return { status: res.status, body: (await res.json()) as Record<string, unknown> & unknown[] };
110
- };
111
-
112
- await waitFor("Grafana to answer", async () => ((await fetch(`${base}/api/health`)).ok ? true : undefined));
58
+ const grafana = await scope.grafana({ image, provisioningDir: join(dir, "provisioning"), dashboardsDir: join(dir, "dashboards") });
59
+ const { api } = grafana;
113
60
 
114
61
  // Datasources: every declared one, with the uid and type chant gave it.
115
62
  const datasources = await waitFor("datasources", async () => {
116
63
  const { status, body } = await api("/api/datasources");
117
- return status === 200 && (body as unknown[]).length >= index.datasources.length ? (body as unknown as Array<{ uid: string; type: string; name: string }>) : undefined;
64
+ return status === 200 && (body as unknown[]).length >= index.datasources.length ? (body as Array<{ uid: string; type: string; name: string }>) : undefined;
118
65
  });
119
66
  expect(datasources.map((d) => [d.uid, d.type, d.name]).sort()).toEqual(index.datasources.map((d) => [d.uid, d.type, d.name]).sort());
120
67
 
121
- // Dashboards: provisioned, in their folder, with every panel as built.
68
+ // Dashboards: provisioned, in their folder, and stored exactly as built.
122
69
  for (const d of index.dashboards) {
123
70
  const { body } = await waitFor(`dashboard ${d.uid}`, async () => {
124
71
  const r = await api(`/api/dashboards/uid/${d.uid}`);
125
72
  return r.status === 200 ? r : undefined;
126
73
  });
127
74
  const meta = body.meta as { provisioned: boolean; folderTitle?: string };
128
- const stored = body.dashboard as { title: string; panels: Array<Record<string, unknown>>; templating: { list: unknown[] } };
129
- const built = JSON.parse(out.files![d.file]) as typeof stored;
75
+ const stored = body.dashboard as Record<string, unknown>;
76
+ const built = JSON.parse(out.files![d.file]) as Record<string, unknown>;
130
77
  expect(meta.provisioned).toBe(true);
131
78
  if (d.folder) expect(meta.folderTitle).toBe(d.folder);
132
- expect(stored.title).toBe(d.title);
133
- const shape = (panels: Array<Record<string, unknown>>) => panels.map((p) => [p.id, p.type, p.title, p.gridPos]);
134
- expect(shape(stored.panels)).toEqual(shape(built.panels));
135
- expect(stored.templating.list.length).toBe(built.templating.list.length);
79
+ expect(typeof stored.id, `${d.uid}: Grafana assigns the id`).toBe("number");
80
+ expect(stored.version, `${d.uid}: Grafana's first version`).toBe(1);
81
+ expect(withoutInjected(stored), `${image} stored ${d.uid} differently from the build`).toStrictEqual(built);
136
82
  }
137
83
 
138
84
  // The same JSON through the import API, under a new uid.
139
85
  const first = index.dashboards[0];
140
- const copy = { ...JSON.parse(out.files![first.file]), uid: `${first.uid}-api`, title: `${first.title} (API import)` };
86
+ const copy = { ...(JSON.parse(out.files![first.file]) as Record<string, unknown>), uid: `${first.uid}-api`, title: `${first.title} (API import)` };
141
87
  const imported = await api("/api/dashboards/db", { method: "POST", body: JSON.stringify({ dashboard: copy, overwrite: false }) });
142
88
  expect(imported.status).toBe(200);
143
89
  expect(imported.body.status).toBe("success");
144
90
  const back = await api(`/api/dashboards/uid/${first.uid}-api`);
145
- expect((back.body.dashboard as { panels: unknown[] }).panels.length).toBe(copy.panels.length);
91
+ expect(back.status).toBe(200);
92
+ expect(withoutInjected(back.body.dashboard as Record<string, unknown>), `${image} stored the API import differently from the JSON sent`).toStrictEqual(copy);
146
93
  });
147
94
  });
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Builds every example and validates each dashboard against Grafana's
5
5
  * dashboard schema at `GRAFANA_SCHEMA_PIN`, each panel's options and each
6
- * query against their plugin's schema, and runs GRAF101-GRAF107 over the
6
+ * query against their plugin's schema, and runs the GRAF1xx checks over the
7
7
  * output. `import.e2e.test.ts` does the same against a real Grafana when
8
8
  * Docker is available.
9
9
  */
@@ -18,6 +18,7 @@ import { grafanaSerializer } from "./serializer";
18
18
  import { validateDashboardSchema } from "./schema-validate";
19
19
  import { validateGrafanaOutput } from "./validate-output";
20
20
  import type { ProvisionedDatasource } from "./build";
21
+ import { ALERTING_FILE } from "./alerting-build";
21
22
 
22
23
  const examplesDir = join(dirname(dirname(fileURLToPath(import.meta.url))), "examples");
23
24
  const examples = readdirSync(examplesDir).filter((e) => {
@@ -34,12 +35,17 @@ describe.each(examples)("example %s", (example) => {
34
35
  expect(result.errors).toEqual([]);
35
36
  const out = result.outputs.get("grafana") as SerializerResult;
36
37
  const dashboards = Object.entries(out.files ?? {}).filter(([f]) => f.startsWith("dashboards/"));
37
- expect(dashboards.length).toBeGreaterThan(0);
38
+ const alerting = out.files?.[ALERTING_FILE];
39
+ expect(dashboards.length + (alerting ? 1 : 0)).toBeGreaterThan(0);
38
40
  for (const [file, text] of dashboards) {
39
41
  expect({ file, problems: validateDashboardSchema(JSON.parse(text)) }).toEqual({ file, problems: [] });
40
42
  }
41
43
  const ds = load(out.files?.["provisioning/datasources/chant.yaml"] ?? "datasources: []") as { datasources: ProvisionedDatasource[] };
42
- const issues = validateGrafanaOutput({ dashboards: dashboards.map(([source, t]) => ({ source, json: JSON.parse(t) })), datasources: ds.datasources });
44
+ const issues = validateGrafanaOutput({
45
+ dashboards: dashboards.map(([source, t]) => ({ source, json: JSON.parse(t) })),
46
+ datasources: ds.datasources,
47
+ alerting: alerting ? [{ source: ALERTING_FILE, json: load(alerting) as Record<string, unknown> }] : [],
48
+ });
43
49
  expect(issues).toEqual([]);
44
50
  });
45
51
  });
package/src/index.ts CHANGED
@@ -8,8 +8,21 @@ export { grafanaSerializer } from "./serializer";
8
8
  export {
9
9
  Datasource,
10
10
  DATASOURCE_TYPE,
11
+ ExternalDatasource,
12
+ EXTERNAL_DATASOURCE_TYPE,
11
13
  BUILTIN_DATASOURCE_UIDS,
12
14
  isDatasourceEntity,
15
+ isExternalDatasource,
16
+ isDatasourceDeclaration,
17
+ DatasourceProvisioning,
18
+ DATASOURCE_PROVISIONING_TYPE,
19
+ isDatasourceProvisioningEntity,
20
+ type DatasourceProvisioningProps,
21
+ type DatasourceProvisioningEntity,
22
+ type DeletedDatasource,
23
+ type ExternalDatasourceProps,
24
+ type ExternalDatasourceEntity,
25
+ type ExternalDatasourceConstructor,
13
26
  type DatasourceProps,
14
27
  type DatasourceEntity,
15
28
  type DatasourceConstructor,
@@ -18,6 +31,64 @@ export {
18
31
  type KnownDatasourceType,
19
32
  } from "./datasource";
20
33
 
34
+ // Typed datasource settings (jsonData, secureJsonData keys) per plugin
35
+ export {
36
+ JSONDATA_LINKS,
37
+ TRACING_DATASOURCE_TYPES,
38
+ TRACE_TO_LOGS_DATASOURCE_TYPES,
39
+ TRACE_TO_METRICS_DATASOURCE_TYPES,
40
+ type JsonDataLink,
41
+ type LinkedDatasource,
42
+ type TracingDatasourceType,
43
+ type TraceToLogsDatasourceType,
44
+ type TraceToMetricsDatasourceType,
45
+ type TypedDatasourceType,
46
+ type DatasourceJsonData,
47
+ type DatasourceSecureJsonData,
48
+ type DatasourceJsonDataTypes,
49
+ type DatasourceSecureJsonKeys,
50
+ type CommonJsonData,
51
+ type HttpJsonData,
52
+ type HttpSecureJsonKey,
53
+ type PrometheusJsonData,
54
+ type ExemplarTraceIdDestination,
55
+ type LokiJsonData,
56
+ type DerivedFieldConfig,
57
+ type TempoJsonData,
58
+ type TraceToLogsTag,
59
+ type TraceToLogsOptions,
60
+ type TraceToLogsOptionsV2,
61
+ type TraceToMetricsOptions,
62
+ type TraceToProfilesOptions,
63
+ type ElasticsearchJsonData,
64
+ type ElasticsearchDataLink,
65
+ type ElasticsearchSecureJsonKey,
66
+ type AwsAuthJsonData,
67
+ type AwsAuthSecureJsonKey,
68
+ type CloudWatchJsonData,
69
+ type CloudWatchLogGroup,
70
+ type CloudWatchSecureJsonKey,
71
+ type AzureCloudName,
72
+ type AzureCredentials,
73
+ type AzureMonitorJsonData,
74
+ type AzureMonitorSecureJsonKey,
75
+ type GoogleAuthJsonData,
76
+ type GoogleAuthSecureJsonKey,
77
+ type CloudMonitoringJsonData,
78
+ type CloudMonitoringSecureJsonKey,
79
+ type BigQueryJsonData,
80
+ type BigQuerySecureJsonKey,
81
+ type PyroscopeJsonData,
82
+ type PyroscopeSecureJsonKey,
83
+ type SqlJsonData,
84
+ type PostgresJsonData,
85
+ type PostgresSecureJsonKey,
86
+ type MySQLJsonData,
87
+ type MySQLSecureJsonKey,
88
+ type MSSQLJsonData,
89
+ type MSSQLSecureJsonKey,
90
+ } from "./datasource-settings";
91
+
21
92
  // Dashboards and provisioning
22
93
  export {
23
94
  Dashboard,
@@ -32,8 +103,106 @@ export {
32
103
  type DashboardLinkInput,
33
104
  type DashboardProviderProps,
34
105
  type DashboardProviderEntity,
106
+ type DashboardEntityProps,
107
+ type DashboardProviderEntityProps,
35
108
  } from "./dashboard";
36
109
 
110
+ // Folders and annotations
111
+ export { Folder, FOLDER_TYPE, isFolderEntity, folderLevels, type FolderProps, type FolderEntity } from "./folder";
112
+ export { annotationJson, ANNOTATION_REF_ID, type AnnotationInput } from "./annotations";
113
+
114
+ // Grafana-managed alerting
115
+ export {
116
+ AlertRuleGroup,
117
+ AlertRule,
118
+ AlertQuery,
119
+ ReduceExpression,
120
+ MathExpression,
121
+ ThresholdExpression,
122
+ ResampleExpression,
123
+ ClassicConditionsExpression,
124
+ SqlExpression,
125
+ ContactPoint,
126
+ NotificationPolicy,
127
+ MuteTiming,
128
+ NotificationTemplate,
129
+ ALERT_RULE_GROUP_TYPE,
130
+ ALERT_RULE_TYPE,
131
+ ALERT_QUERY_TYPE,
132
+ EXPRESSION_TYPE_PREFIX,
133
+ EXPRESSION_DATASOURCE_UID,
134
+ CONTACT_POINT_TYPE,
135
+ NOTIFICATION_POLICY_TYPE,
136
+ MUTE_TIMING_TYPE,
137
+ NOTIFICATION_TEMPLATE_TYPE,
138
+ isAlertRuleGroupEntity,
139
+ isAlertRuleEntity,
140
+ isAlertQueryEntity,
141
+ isExpressionEntity,
142
+ isContactPointEntity,
143
+ isNotificationPolicyEntity,
144
+ isMuteTimingEntity,
145
+ isNotificationTemplateEntity,
146
+ type AlertRuleGroupProps,
147
+ type AlertRuleGroupEntity,
148
+ type AlertRuleProps,
149
+ type AlertRuleEntity,
150
+ type AlertRuleData,
151
+ type AlertRuleNotificationSettings,
152
+ type AlertRuleRecord,
153
+ type AlertQueryProps,
154
+ type AlertQueryEntity,
155
+ type AlertDuration,
156
+ type RelativeTimeRange,
157
+ type ExpressionEntity,
158
+ type ExpressionKind,
159
+ type ReduceExpressionProps,
160
+ type MathExpressionProps,
161
+ type ThresholdExpressionProps,
162
+ type ResampleExpressionProps,
163
+ type ClassicConditionsExpressionProps,
164
+ type SqlExpressionProps,
165
+ type NoDataState,
166
+ type ExecErrState,
167
+ type ContactPointProps,
168
+ type ContactPointEntity,
169
+ type ContactPointReceiver,
170
+ type ContactPointIntegrationType,
171
+ type NotificationPolicyProps,
172
+ type NotificationPolicyEntity,
173
+ type PolicyRoute,
174
+ type ObjectMatcher,
175
+ type MuteTimingProps,
176
+ type MuteTimingEntity,
177
+ type NotificationTemplateProps,
178
+ type NotificationTemplateEntity,
179
+ } from "./alerting";
180
+ export {
181
+ buildAlerting,
182
+ alertingYaml,
183
+ alertRuleJson,
184
+ alertQueryJson,
185
+ ruleGroupJson,
186
+ contactPointJson,
187
+ notificationPolicyJson,
188
+ muteTimingJson,
189
+ notificationTemplateJson,
190
+ durationSeconds,
191
+ ALERTING_FILE,
192
+ ALERTING_FILE_KEYS,
193
+ DEFAULT_RELATIVE_TIME_RANGE,
194
+ DEFAULT_GROUP_INTERVAL,
195
+ type AlertingFile,
196
+ type AlertingIndex,
197
+ type ProvisionedRuleGroup,
198
+ type ProvisionedAlertRule,
199
+ type ProvisionedAlertQuery,
200
+ type ProvisionedContactPoint,
201
+ type ProvisionedMuteTiming,
202
+ type ProvisionedTemplate,
203
+ } from "./alerting-build";
204
+ export { CONTACT_POINT_SECRET_SETTINGS } from "./contact-point-secrets";
205
+
37
206
  // Panels and rows, and the extension point for other panel plugins
38
207
  export {
39
208
  TimeSeriesPanel,
@@ -44,6 +213,19 @@ export {
44
213
  TracesPanel,
45
214
  HeatmapPanel,
46
215
  TextPanel,
216
+ BarChartPanel,
217
+ BarGaugePanel,
218
+ PieChartPanel,
219
+ StateTimelinePanel,
220
+ StatusHistoryPanel,
221
+ HistogramPanel,
222
+ NodeGraphPanel,
223
+ XYChartPanel,
224
+ TrendPanel,
225
+ CanvasPanel,
226
+ GeomapPanel,
227
+ FlameGraphPanel,
228
+ AlertListPanel,
47
229
  Row,
48
230
  definePanel,
49
231
  registeredPanels,
@@ -67,6 +249,15 @@ export {
67
249
  PromQuery,
68
250
  TempoQuery,
69
251
  LokiQuery,
252
+ ElasticsearchQuery,
253
+ CloudWatchQuery,
254
+ AzureMonitorQuery,
255
+ CloudMonitoringQuery,
256
+ BigQueryQuery,
257
+ PyroscopeQuery,
258
+ PostgresQuery,
259
+ MySQLQuery,
260
+ MSSQLQuery,
70
261
  defineQuery,
71
262
  registeredQueries,
72
263
  queryDefinitionFor,
@@ -74,6 +265,8 @@ export {
74
265
  QUERY_TYPE_PREFIX,
75
266
  type DatasourceInput,
76
267
  type QueryModel,
268
+ type Loosen,
269
+ type MergedModel,
77
270
  type QueryProps,
78
271
  type QueryDefinition,
79
272
  type QueryEntity,
@@ -81,8 +274,30 @@ export {
81
274
  type PromQueryEntity,
82
275
  type TempoQueryEntity,
83
276
  type LokiQueryEntity,
277
+ type ElasticsearchQueryEntity,
278
+ type CloudWatchQueryEntity,
279
+ type AzureMonitorQueryEntity,
280
+ type CloudMonitoringQueryEntity,
281
+ type BigQueryQueryEntity,
282
+ type PyroscopeQueryEntity,
283
+ type PostgresQueryEntity,
284
+ type MySQLQueryEntity,
285
+ type MSSQLQueryEntity,
84
286
  } from "./query";
85
287
 
288
+ // Hand-written query models for datasources with no schema
289
+ export type {
290
+ SqlQueryModel,
291
+ SqlBuilderQuery,
292
+ SqlQueryFormat,
293
+ SqlExpressionType,
294
+ SqlProperty,
295
+ SqlFunctionExpression,
296
+ SqlFunctionParameterExpression,
297
+ SqlGroupByExpression,
298
+ SqlPropertyExpression,
299
+ } from "./query-models";
300
+
86
301
  // Variables
87
302
  export {
88
303
  QueryVariable,
@@ -107,14 +322,50 @@ export {
107
322
  type DatasourceVariableProps,
108
323
  type ConstantVariableProps,
109
324
  type TextboxVariableProps,
325
+ AdhocVariable,
326
+ GroupByVariable,
327
+ SwitchVariable,
328
+ MULTI_VALUE_KINDS,
329
+ type AdhocVariableProps,
330
+ type GroupByVariableProps,
331
+ type SwitchVariableProps,
332
+ type AdhocFilter,
333
+ type VariableKeyOption,
334
+ type VariableQueryObject,
335
+ type PrometheusVariableQuery,
110
336
  } from "./variables";
111
337
 
112
338
  // The generated schema types and their pin
113
339
  export * as schema from "./schema";
114
340
  export { DASHBOARD_SCHEMA_VERSION } from "./schema";
115
- export { GRAFANA_SCHEMA_PIN, SCHEMA_NAMES, type GrafanaSchemaPin, type SchemaName } from "./pin";
341
+ export {
342
+ GRAFANA_SCHEMA_PIN,
343
+ SCHEMA_NAMES,
344
+ IMPORT_ONLY_SCHEMA_NAMES,
345
+ VENDORED_SCHEMA_NAMES,
346
+ type GrafanaSchemaPin,
347
+ type SchemaName,
348
+ type ImportOnlySchemaName,
349
+ type VendoredSchemaName,
350
+ } from "./pin";
351
+ // Hand-written options for the built-in panels with no schema
352
+ export type { AlertListOptions, AlertListSortOrder, AlertListStateFilter, FlameGraphOptions } from "./panel-options";
116
353
 
117
- // Plain-data API: render, check and detect without a build
354
+ // Panel transformations, typed per transformer (Grafana v13.2.2)
355
+ export {
356
+ transformation,
357
+ customTransformation,
358
+ TRANSFORMATION_IDS,
359
+ type Transformation,
360
+ type KnownTransformation,
361
+ type CustomTransformation,
362
+ type TransformationCommon,
363
+ type TransformationId,
364
+ type TransformationOptionsById,
365
+ type ReducerId,
366
+ } from "./transformations";
367
+
368
+ // Plain-data API: render and detect without a build
118
369
  export {
119
370
  buildGrafana,
120
371
  grafanaFiles,
@@ -124,10 +375,13 @@ export {
124
375
  panelsJson,
125
376
  targetJson,
126
377
  variableModel,
378
+ customVariableOptions,
127
379
  datasourceRef,
128
380
  provisionedDatasource,
381
+ externalDatasourceRecord,
129
382
  provisionedProvider,
130
383
  datasourcesYaml,
384
+ datasourceFileSettings,
131
385
  dashboardProvidersYaml,
132
386
  GRID_COLUMNS,
133
387
  DATASOURCES_FILE,
@@ -137,30 +391,36 @@ export {
137
391
  type BuiltDashboard,
138
392
  type GrafanaIndex,
139
393
  type ProvisionedDatasource,
394
+ type ExternalDatasourceRecord,
140
395
  type ProvisionedProvider,
396
+ type DatasourceFileSettings,
141
397
  type DashboardJson,
142
398
  type PanelJson,
143
399
  type RowPanelJson,
144
400
  type VariableModel,
145
401
  type DataSourceRef,
146
402
  } from "./build";
403
+ // The checks as plain functions (validateGrafanaOutput, validateDashboardSchema)
404
+ // are on the `@intentius/chant-lexicon-grafana/validation` subpath (#2958), so
405
+ // declaring dashboards does not load them.
147
406
  export {
148
- validateGrafanaOutput,
149
- issuesFor,
407
+ datasourceUses,
150
408
  variableReferences,
151
- type GrafanaIssue,
152
- type GrafanaIssueCode,
153
- type GrafanaArtifacts,
154
- type DashboardDoc,
155
- } from "./validate-output";
156
- export { validateDashboardSchema, type SchemaProblem } from "./schema-validate";
157
- export { looksLikeDashboard, looksLikeDatasourceProvisioning, looksLikeDashboardProvisioning } from "./detect";
158
- export { slugUid, isValidUid, UID_PATTERN, type DeepPartial } from "./util";
159
-
160
- // Composites: dashboards built from a spanmetrics connector, an Slo and the GenAI preset
409
+ resolveDatasourceRef,
410
+ knownDatasources,
411
+ type DatasourceUse,
412
+ type ResolvedDatasource,
413
+ type KnownDatasource,
414
+ type DatasourceRefJson,
415
+ } from "./datasource-refs";
416
+ export { looksLikeDashboard, looksLikeDatasourceProvisioning, looksLikeDashboardProvisioning, looksLikeAlertingProvisioning } from "./detect";
417
+ export { slugUid, isValidUid, UID_PATTERN, type DeepPartial, type PropsOf } from "./util";
418
+
419
+ // Composites: dashboards built from a spanmetrics connector, an Slo and the GenAI preset, and an Slo's burn-rate alerts as Grafana rules
161
420
  export {
162
421
  RedDashboard,
163
422
  redQueries,
423
+ RED_DEFAULT_SPAN_KINDS,
164
424
  SloDashboard,
165
425
  sloQueries,
166
426
  AgentDashboard,
@@ -168,6 +428,7 @@ export {
168
428
  type RedDashboardProps,
169
429
  type RedDashboardMembers,
170
430
  type RedDashboardInstance,
431
+ type SpanKind,
171
432
  type SloDashboardProps,
172
433
  type SloDashboardMembers,
173
434
  type SloDashboardInstance,
@@ -175,4 +436,37 @@ export {
175
436
  type AgentDashboardMembers,
176
437
  type AgentDashboardInstance,
177
438
  type DashboardOptions,
439
+ SloAlertRules,
440
+ sloAlertQueries,
441
+ type SloAlertRulesProps,
442
+ type SloAlertRulesMembers,
443
+ type SloAlertRulesInstance,
178
444
  } from "./composites";
445
+
446
+ // Config namespace (#2946): `grafana.profiles.<env>` in chant.config.ts, the
447
+ // Grafana each environment is observed in and exported from.
448
+ export { grafanaConfigSchema, resolveGrafanaTarget } from "./config";
449
+ export type { GrafanaConfig, GrafanaProfile } from "./config";
450
+
451
+ // Ownership (#2946): chant's marker on a dashboard.grafana.app resource.
452
+ export {
453
+ GRAFANA_OWNERSHIP_KEYS,
454
+ DEFAULT_PROVIDER_NAME,
455
+ grafanaOwnershipLabels,
456
+ dashboardOwnership,
457
+ } from "./ownership";
458
+
459
+ // The HTTP client observe and export share, for the API applier (#2948).
460
+ export { GrafanaClient, GrafanaApiError, grafanaHttp, namespaceOf, statusVerdict } from "./api/client";
461
+ export type { GrafanaAuth, GrafanaHttp, GrafanaResponse, GrafanaTarget, StatusVerdict } from "./api/client";
462
+ export { bindGrafana, classifyGrafanaFailure, GrafanaBindingError } from "./api/bind";
463
+
464
+ // The API applier (#2948): the typed Op step, and the pieces an embedding
465
+ // caller composes (the activity itself is `./op/activities`).
466
+ export { grafanaApply } from "./op/builders";
467
+ export { applyGrafana, planFromDashboards, GRAFANA_APPLY_KINDS } from "./api/apply";
468
+ export type { GrafanaApplyPlan, GrafanaApplyOutcome, DashboardPlan, BuiltDashboardInput } from "./api/apply";
469
+ export { folderUidFor, foldersForDashboards, resolveFolders, liveFolderPath, type FolderPlan, type ResolvedFolders } from "./api/folders";
470
+
471
+ // The Grafana RBAC actions a service account needs to observe, apply and prune.
472
+ export { GrafanaActions, grafanaActionsFor, type GrafanaAccessLevel } from "./actions/index";