@cloudcare/guance-front-tools 1.0.19 → 1.0.21

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 (185) hide show
  1. package/README.md +0 -64
  2. package/lib/cjs/generated/dashboardCharts.d.ts +172 -69
  3. package/lib/cjs/scripts/convert-grafana-dashboard-core.js +417 -56
  4. package/lib/esm/generated/dashboardCharts.d.ts +172 -69
  5. package/lib/esm/scripts/convert-grafana-dashboard-core.js +417 -56
  6. package/lib/example/1860_rev45.json +15536 -0
  7. package/lib/example/guance-dashboard.json +16766 -2702
  8. package/lib/scripts/convert-grafana-dashboard-core.js +1899 -1633
  9. package/package.json +1 -1
  10. package/schemas/charts/chart-schema.json +711 -1
  11. package/schemas/charts/settings/_common-settings-gradual-color-schema.json +17 -3
  12. package/schemas/charts/settings/_common-settings-legend-values-schema.json +23 -15
  13. package/{skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-treemap-settings-schema.json → schemas/charts/settings/chart-change-settings-schema.json} +34 -32
  14. package/schemas/charts/settings/chart-chinamap-settings-schema.json +2 -1
  15. package/schemas/charts/settings/chart-command-settings-schema.json +16 -0
  16. package/schemas/charts/settings/chart-hexgon-settings-schema.json +2 -1
  17. package/{skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-log-settings-schema.json → schemas/charts/settings/chart-monitor-settings-schema.json} +27 -30
  18. package/schemas/charts/settings/chart-sequence-settings-schema.json +2 -3
  19. package/schemas/charts/settings/chart-topology-settings-schema.json +1 -6
  20. package/schemas/charts/settings/chart-video-settings-schema.json +45 -0
  21. package/schemas/charts/settings/chart-worldmap-settings-schema.json +2 -1
  22. package/schemas/charts/settings/settings-alias-schema.json +14 -1
  23. package/schemas/charts/settings/settings-compare-schema.json +20 -12
  24. package/schemas/charts/settings/settings-schema.json +13 -1
  25. package/schemas/charts/settings/settings-time-schema.json +38 -23
  26. package/schemas/charts/settings/settings-unit-items-schema.json +222 -210
  27. package/schemas/charts/settings/settings-units-schema.json +0 -3
  28. package/test/cli.test.mjs +66 -44
  29. package/skills/grafana-to-guance-dashboard/SKILL.md +0 -490
  30. package/skills/grafana-to-guance-dashboard/agents/openai.yaml +0 -4
  31. package/skills/grafana-to-guance-dashboard/fixtures/grafana-dashboard.guance.json +0 -1029
  32. package/skills/grafana-to-guance-dashboard/fixtures/grafana-dashboard.json +0 -878
  33. package/skills/grafana-to-guance-dashboard/package.json +0 -16
  34. package/skills/grafana-to-guance-dashboard/references/conversion-audit-checklist.md +0 -183
  35. package/skills/grafana-to-guance-dashboard/references/converter-notes.md +0 -244
  36. package/skills/grafana-to-guance-dashboard/references/promql-compatibility-cheatsheet.md +0 -172
  37. package/skills/grafana-to-guance-dashboard/references/unit-inference-cheatsheet.md +0 -174
  38. package/skills/grafana-to-guance-dashboard/schemas/charts/chart-schema.json +0 -84
  39. package/skills/grafana-to-guance-dashboard/schemas/charts/common/chart-link-item-schema.json +0 -48
  40. package/skills/grafana-to-guance-dashboard/schemas/charts/common/chart-links-schema.json +0 -9
  41. package/skills/grafana-to-guance-dashboard/schemas/charts/common/common-chart-types-schema.json +0 -39
  42. package/skills/grafana-to-guance-dashboard/schemas/charts/common/common-vars-item-schema.json +0 -117
  43. package/skills/grafana-to-guance-dashboard/schemas/charts/common/common-vars-schema.json +0 -10
  44. package/skills/grafana-to-guance-dashboard/schemas/charts/dashboard-schema.json +0 -80
  45. package/skills/grafana-to-guance-dashboard/schemas/charts/query/queries-schema.json +0 -10
  46. package/skills/grafana-to-guance-dashboard/schemas/charts/query/query-item-schema.json +0 -60
  47. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-connect-null-schema.json +0 -7
  48. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-gradual-color-schema.json +0 -72
  49. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-groupby-schema.json +0 -22
  50. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-legend-position-schema.json +0 -14
  51. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-legend-values-schema.json +0 -19
  52. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-open-stack-schema.json +0 -8
  53. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-show-label-schema.json +0 -8
  54. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-show-line-schema.json +0 -8
  55. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-stack-content-schema.json +0 -12
  56. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-stack-type-schema.json +0 -11
  57. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-alarm-settings-schema.json +0 -48
  58. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-bar-settings-schema.json +0 -69
  59. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-chinamap-settings-schema.json +0 -102
  60. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-funnel-settings-schema.json +0 -34
  61. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-gauge-settings-schema.json +0 -65
  62. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-heatmap-settings-schema.json +0 -50
  63. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-hexgon-settings-schema.json +0 -90
  64. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-histogram-settings-schema.json +0 -47
  65. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-iframe-settings-schema.json +0 -24
  66. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-object-settings-schema.json +0 -52
  67. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-picture-settings-schema.json +0 -46
  68. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-pie-settings-schema.json +0 -90
  69. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-sankey-settings-schema.json +0 -34
  70. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-scatter-bubble-settings-schema.json +0 -31
  71. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-sequence-settings-schema.json +0 -76
  72. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-singlestat-settings-schema.json +0 -163
  73. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-table-settings-schema.json +0 -184
  74. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-text-settings-schema.json +0 -20
  75. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-toplist-settings-schema.json +0 -117
  76. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-topology-settings-schema.json +0 -71
  77. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-worldmap-settings-schema.json +0 -102
  78. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/common-settings-schema.json +0 -82
  79. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-alias-schema.json +0 -47
  80. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-chart-type-schema.json +0 -27
  81. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-colors-schema.json +0 -46
  82. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-compare-schema.json +0 -58
  83. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-fixed-time-schema.json +0 -49
  84. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-levels-schema.json +0 -33
  85. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-schema.json +0 -79
  86. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-time-schema.json +0 -43
  87. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-unit-items-schema.json +0 -228
  88. package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-units-schema.json +0 -59
  89. package/skills/grafana-to-guance-dashboard/schemas/dashboard-schema.json +0 -5
  90. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/attribute-mutation-schema.json +0 -21
  91. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/attributes-schema.json +0 -10
  92. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/cdata-node-schema.json +0 -19
  93. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/creation-reason-schema.json +0 -17
  94. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/document-fragment-node-schema.json +0 -35
  95. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/document-node-schema.json +0 -30
  96. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/document-type-node-schema.json +0 -28
  97. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/element-node-schema.json +0 -33
  98. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/frustration-record-schema.json +0 -49
  99. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/full-snapshot-record-schema.json +0 -26
  100. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/incremental-data-schema.json +0 -36
  101. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/incremental-snapshot-record-schema.json +0 -29
  102. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/input-data-schema.json +0 -27
  103. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/input-state-schema.json +0 -27
  104. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/media-interaction-data-schema.json +0 -23
  105. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/media-interaction-schema.json +0 -20
  106. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-interaction-data-schema.json +0 -23
  107. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-interaction-schema.json +0 -47
  108. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-move-data-schema.json +0 -23
  109. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-position-schema.json +0 -26
  110. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mutation-data-schema.json +0 -23
  111. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mutation-payload-schema.json +0 -42
  112. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/node-added-mutation-schema.json +0 -41
  113. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/node-removed-mutation-schema.json +0 -18
  114. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/node-schema.json +0 -28
  115. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/record-schema.json +0 -30
  116. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/scroll-data-schema.json +0 -23
  117. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/scroll-position-schema.json +0 -22
  118. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/segment-metadata-schema.json +0 -28
  119. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/segment-schema.json +0 -25
  120. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/serialized-node-schema.json +0 -15
  121. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/serialized-node-with-id-schema.json +0 -21
  122. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-add-schema.json +0 -28
  123. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-data-schema.json +0 -23
  124. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-delete-schema.json +0 -24
  125. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-schema.json +0 -29
  126. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-schema.json +0 -30
  127. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/text-mutation-schema.json +0 -27
  128. package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/text-node-schema.json +0 -23
  129. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/_common-record-schema.json +0 -14
  130. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/_common-segment-metadata-schema.json +0 -30
  131. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/_slot-supported-common-record-schema.json +0 -21
  132. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/focus-record-schema.json +0 -34
  133. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/meta-record-schema.json +0 -42
  134. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/pointer-interaction-data-schema.json +0 -23
  135. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/pointer-interaction-schema.json +0 -34
  136. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/segment-context-schema.json +0 -46
  137. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/view-end-record-schema.json +0 -23
  138. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/viewport-resize-data-schema.json +0 -23
  139. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/viewport-resize-dimension-schema.json +0 -18
  140. package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/visual-viewport-record-schema.json +0 -50
  141. package/skills/grafana-to-guance-dashboard/schemas/session-replay/full-snapshot-record-schema.json +0 -14
  142. package/skills/grafana-to-guance-dashboard/schemas/session-replay/incremental-data-schema.json +0 -14
  143. package/skills/grafana-to-guance-dashboard/schemas/session-replay/incremental-snapshot-record-schema.json +0 -14
  144. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-shape-wireframe-schema.json +0 -22
  145. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-shape-wireframe-update-schema.json +0 -22
  146. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-wireframe-schema.json +0 -38
  147. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-wireframe-update-schema.json +0 -38
  148. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/full-snapshot-record-schema.json +0 -38
  149. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/image-wireframe-schema.json +0 -43
  150. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/image-wireframe-update-schema.json +0 -43
  151. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/incremental-data-schema.json +0 -21
  152. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/incremental-snapshot-record-schema.json +0 -26
  153. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/mutation-data-schema.json +0 -23
  154. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/mutation-payload-schema.json +0 -55
  155. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/placeholder-wireframe-schema.json +0 -28
  156. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/placeholder-wireframe-update-schema.json +0 -28
  157. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/record-schema.json +0 -27
  158. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/segment-metadata-schema.json +0 -25
  159. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/segment-schema.json +0 -25
  160. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-border-schema.json +0 -25
  161. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-style-schema.json +0 -29
  162. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-wireframe-schema.json +0 -23
  163. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-wireframe-update-schema.json +0 -23
  164. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-position-schema.json +0 -57
  165. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-style-schema.json +0 -31
  166. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-wireframe-schema.json +0 -34
  167. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-wireframe-update-schema.json +0 -34
  168. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/touch-data-schema.json +0 -51
  169. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/webview-wireframe-schema.json +0 -33
  170. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/webview-wireframe-update-schema.json +0 -33
  171. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/wireframe-clip-schema.json +0 -29
  172. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/wireframe-schema.json +0 -24
  173. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/wireframe-update-mutation-schema.json +0 -24
  174. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mutation-data-schema.json +0 -14
  175. package/skills/grafana-to-guance-dashboard/schemas/session-replay/mutation-payload-schema.json +0 -14
  176. package/skills/grafana-to-guance-dashboard/schemas/session-replay/record-schema.json +0 -14
  177. package/skills/grafana-to-guance-dashboard/schemas/session-replay/segment-metadata-schema.json +0 -14
  178. package/skills/grafana-to-guance-dashboard/schemas/session-replay/segment-schema.json +0 -15
  179. package/skills/grafana-to-guance-dashboard/schemas/session-replay-browser-schema.json +0 -5
  180. package/skills/grafana-to-guance-dashboard/schemas/session-replay-mobile-schema.json +0 -5
  181. package/skills/grafana-to-guance-dashboard/schemas/session-replay-schema.json +0 -33
  182. package/skills/grafana-to-guance-dashboard/scripts/convert-grafana-dashboard-core.js +0 -1675
  183. package/skills/grafana-to-guance-dashboard/scripts/convert-grafana-dashboard.mjs +0 -120
  184. package/skills/grafana-to-guance-dashboard/scripts/validate-file.mjs +0 -62
  185. package/skills/grafana-to-guance-dashboard/test/convert.test.mjs +0 -54
@@ -1,120 +0,0 @@
1
- #!/usr/bin/env node
2
- import fs from 'fs';
3
- import path from 'path';
4
- import { pathToFileURL } from 'url';
5
- import Ajv from 'ajv';
6
- import { convertDashboard } from './convert-grafana-dashboard-core.js';
7
- const SCRIPT_DIRECTORY = path.dirname(new URL(import.meta.url).pathname);
8
- const SKILL_ROOT = path.resolve(SCRIPT_DIRECTORY, '..');
9
- if (isDirectExecution()) {
10
- main();
11
- }
12
- function isDirectExecution() {
13
- if (!process.argv[1])
14
- return false;
15
- return import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href;
16
- }
17
- export function main() {
18
- const { inputPath, outputPath, validateOutput, schemaId, guancePromqlCompatible, keepGrafanaMeta } = parseArgs(process.argv.slice(2));
19
- const grafanaDashboard = readJson(inputPath);
20
- const guanceDashboard = convertDashboard(grafanaDashboard, { guancePromqlCompatible, keepGrafanaMeta });
21
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
22
- fs.writeFileSync(outputPath, `${JSON.stringify(guanceDashboard, null, 2)}\n`, 'utf8');
23
- console.log(`Converted ${inputPath} -> ${outputPath}`);
24
- if (validateOutput) {
25
- validateDashboardFile(outputPath, schemaId);
26
- }
27
- }
28
- function parseArgs(args) {
29
- let inputPath = '';
30
- let outputPath = '';
31
- let validateOutput = false;
32
- let schemaId = 'dashboard-schema.json';
33
- let guancePromqlCompatible = false;
34
- let keepGrafanaMeta = false;
35
- for (let index = 0; index < args.length; index++) {
36
- const value = args[index];
37
- if ((value === '-i' || value === '--input') && args[index + 1]) {
38
- inputPath = path.resolve(args[++index]);
39
- continue;
40
- }
41
- if ((value === '-o' || value === '--output') && args[index + 1]) {
42
- outputPath = path.resolve(args[++index]);
43
- continue;
44
- }
45
- if (value === '--validate') {
46
- validateOutput = true;
47
- continue;
48
- }
49
- if (value === '--schema' && args[index + 1]) {
50
- schemaId = args[++index];
51
- continue;
52
- }
53
- if (value === '--guance-promql-compatible') {
54
- guancePromqlCompatible = true;
55
- continue;
56
- }
57
- if (value === '--keep-grafana-meta') {
58
- keepGrafanaMeta = true;
59
- continue;
60
- }
61
- if (value === '-h' || value === '--help') {
62
- printHelp();
63
- process.exit(0);
64
- }
65
- }
66
- if (!inputPath) {
67
- printHelp();
68
- process.exit(1);
69
- }
70
- if (!outputPath) {
71
- const parsed = path.parse(inputPath);
72
- outputPath = path.join(parsed.dir, `${parsed.name}.guance.json`);
73
- }
74
- return { inputPath, outputPath, validateOutput, schemaId, guancePromqlCompatible, keepGrafanaMeta };
75
- }
76
- function printHelp() {
77
- console.error('Usage: node convert-grafana-dashboard.mjs --input <grafana.json> [--output <guance.json>] [--validate] [--schema <schema-id>] [--guance-promql-compatible] [--keep-grafana-meta]');
78
- }
79
- export function validateDashboardFile(filePath, schemaId) {
80
- const schemasDirectory = resolveSchemasDirectory();
81
- const ajv = new Ajv({ allErrors: true });
82
- forEachFile(schemasDirectory, (schemaPath) => {
83
- if (!schemaPath.endsWith('.json'))
84
- return;
85
- ajv.addSchema(readJson(schemaPath));
86
- });
87
- const valid = ajv.validate(schemaId, readJson(filePath));
88
- if (valid) {
89
- console.log(`Validated ${filePath} against ${schemaId}`);
90
- return;
91
- }
92
- console.error(`Validation failed for ${filePath} against ${schemaId}:`);
93
- for (const error of ajv.errors || []) {
94
- const instancePath = error.instancePath || '/';
95
- console.error(`- ${instancePath} ${error.message}`);
96
- }
97
- process.exit(1);
98
- }
99
- function resolveSchemasDirectory() {
100
- const skillSchemasDirectory = path.join(SKILL_ROOT, 'schemas');
101
- if (fs.existsSync(path.join(skillSchemasDirectory, 'dashboard-schema.json'))) {
102
- return skillSchemasDirectory;
103
- }
104
- throw new Error(`Could not locate standalone schemas at ${skillSchemasDirectory}`);
105
- }
106
- function readJson(filePath) {
107
- return JSON.parse(fs.readFileSync(filePath, 'utf8'));
108
- }
109
- function forEachFile(directoryPath, visitor) {
110
- const entries = fs.readdirSync(directoryPath, { withFileTypes: true });
111
- for (const entry of entries) {
112
- const entryPath = path.join(directoryPath, entry.name);
113
- if (entry.isDirectory()) {
114
- forEachFile(entryPath, visitor);
115
- continue;
116
- }
117
- visitor(entryPath);
118
- }
119
- }
120
- export { convertDashboard };
@@ -1,62 +0,0 @@
1
- #!/usr/bin/env node
2
- import Ajv from 'ajv';
3
- import fs from 'fs';
4
- import path from 'path';
5
-
6
- const SCRIPT_DIRECTORY = path.dirname(new URL(import.meta.url).pathname);
7
- const SKILL_ROOT = path.resolve(SCRIPT_DIRECTORY, '..');
8
- const SCHEMAS_DIRECTORY = path.join(SKILL_ROOT, 'schemas');
9
-
10
- const args = process.argv.slice(2);
11
- const schemaFlagIndex = args.indexOf('--schema');
12
- const schemaId = schemaFlagIndex >= 0 ? args[schemaFlagIndex + 1] : 'dashboard-schema.json';
13
- const jsonPaths = schemaFlagIndex >= 0 ? args.filter((_, index) => index !== schemaFlagIndex && index !== schemaFlagIndex + 1) : args;
14
-
15
- if (jsonPaths.length === 0) {
16
- console.error('Usage: node scripts/validate-file.mjs <json-path...> [--schema <schema-id>]');
17
- process.exit(1);
18
- }
19
- if (!fs.existsSync(path.join(SCHEMAS_DIRECTORY, 'dashboard-schema.json'))) {
20
- console.error(`Could not locate standalone schemas at ${SCHEMAS_DIRECTORY}`);
21
- process.exit(1);
22
- }
23
-
24
- const ajv = new Ajv({ allErrors: true });
25
- forEachFile(SCHEMAS_DIRECTORY, (schemaPath) => {
26
- if (!schemaPath.endsWith('.json'))
27
- return;
28
- ajv.addSchema(readJson(schemaPath));
29
- });
30
-
31
- let hasError = false;
32
- for (const jsonPath of jsonPaths) {
33
- const valid = ajv.validate(schemaId, readJson(jsonPath));
34
- if (valid) {
35
- console.log(`Validated ${jsonPath} against ${schemaId}`);
36
- continue;
37
- }
38
- hasError = true;
39
- console.error(`Validation failed for ${jsonPath} against ${schemaId}:`);
40
- for (const error of ajv.errors || []) {
41
- const instancePath = error.instancePath || '/';
42
- console.error(`- ${instancePath} ${error.message}`);
43
- }
44
- }
45
-
46
- process.exit(hasError ? 1 : 0);
47
-
48
- function forEachFile(directoryPath, visitor) {
49
- const entries = fs.readdirSync(directoryPath, { withFileTypes: true });
50
- for (const entry of entries) {
51
- const entryPath = path.join(directoryPath, entry.name);
52
- if (entry.isDirectory()) {
53
- forEachFile(entryPath, visitor);
54
- continue;
55
- }
56
- visitor(entryPath);
57
- }
58
- }
59
-
60
- function readJson(filePath) {
61
- return JSON.parse(fs.readFileSync(filePath, 'utf8'));
62
- }
@@ -1,54 +0,0 @@
1
- import test from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import fs from 'node:fs';
4
- import os from 'node:os';
5
- import path from 'node:path';
6
- import { execFileSync } from 'node:child_process';
7
-
8
- const TEST_DIRECTORY = path.dirname(new URL(import.meta.url).pathname);
9
- const SKILL_ROOT = path.resolve(TEST_DIRECTORY, '..');
10
- const FIXTURE_INPUT = path.join(SKILL_ROOT, 'fixtures', 'grafana-dashboard.json');
11
- const FIXTURE_DASHBOARD = JSON.parse(fs.readFileSync(FIXTURE_INPUT, 'utf8'));
12
-
13
- test('standalone converter produces schema-valid dashboard output', () => {
14
- const tempDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'grafana-to-guance-skill-'));
15
- const outputPath = path.join(tempDirectory, 'dashboard.guance.json');
16
-
17
- execFileSync(
18
- process.execPath,
19
- ['scripts/convert-grafana-dashboard.mjs', '--input', FIXTURE_INPUT, '--output', outputPath, '--validate'],
20
- {
21
- cwd: SKILL_ROOT,
22
- stdio: 'pipe',
23
- }
24
- );
25
-
26
- const output = JSON.parse(fs.readFileSync(outputPath, 'utf8'));
27
- assert.equal(output.title, FIXTURE_DASHBOARD.title);
28
- assert.equal(output.main.type, 'template');
29
- assert.ok(Array.isArray(output.main.charts));
30
- assert.ok(output.main.charts.length > 0);
31
- });
32
-
33
- test('standalone validator accepts generated dashboard output', () => {
34
- const tempDirectory = fs.mkdtempSync(path.join(os.tmpdir(), 'grafana-to-guance-skill-'));
35
- const outputPath = path.join(tempDirectory, 'dashboard.guance.json');
36
-
37
- execFileSync(
38
- process.execPath,
39
- ['scripts/convert-grafana-dashboard.mjs', '--input', FIXTURE_INPUT, '--output', outputPath],
40
- {
41
- cwd: SKILL_ROOT,
42
- stdio: 'pipe',
43
- }
44
- );
45
-
46
- execFileSync(
47
- process.execPath,
48
- ['scripts/validate-file.mjs', outputPath],
49
- {
50
- cwd: SKILL_ROOT,
51
- stdio: 'pipe',
52
- }
53
- );
54
- });