@cloudcare/guance-front-tools 1.0.20 → 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.
- package/README.md +0 -64
- package/lib/cjs/generated/dashboardCharts.d.ts +172 -69
- package/lib/cjs/scripts/convert-grafana-dashboard-core.js +417 -56
- package/lib/esm/generated/dashboardCharts.d.ts +172 -69
- package/lib/esm/scripts/convert-grafana-dashboard-core.js +417 -56
- package/lib/example/1860_rev45.json +15536 -0
- package/lib/example/guance-dashboard.json +16766 -2702
- package/lib/scripts/convert-grafana-dashboard-core.js +1899 -1633
- package/package.json +1 -1
- package/schemas/charts/chart-schema.json +711 -1
- package/schemas/charts/settings/_common-settings-gradual-color-schema.json +17 -3
- package/schemas/charts/settings/_common-settings-legend-values-schema.json +23 -15
- package/{skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-treemap-settings-schema.json → schemas/charts/settings/chart-change-settings-schema.json} +34 -32
- package/schemas/charts/settings/chart-chinamap-settings-schema.json +2 -1
- package/schemas/charts/settings/chart-command-settings-schema.json +16 -0
- package/schemas/charts/settings/chart-hexgon-settings-schema.json +2 -1
- package/{skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-log-settings-schema.json → schemas/charts/settings/chart-monitor-settings-schema.json} +27 -30
- package/schemas/charts/settings/chart-sequence-settings-schema.json +2 -3
- package/schemas/charts/settings/chart-topology-settings-schema.json +1 -6
- package/schemas/charts/settings/chart-video-settings-schema.json +45 -0
- package/schemas/charts/settings/chart-worldmap-settings-schema.json +2 -1
- package/schemas/charts/settings/settings-alias-schema.json +14 -1
- package/schemas/charts/settings/settings-compare-schema.json +20 -12
- package/schemas/charts/settings/settings-schema.json +13 -1
- package/schemas/charts/settings/settings-time-schema.json +38 -23
- package/schemas/charts/settings/settings-unit-items-schema.json +222 -210
- package/schemas/charts/settings/settings-units-schema.json +0 -3
- package/test/cli.test.mjs +66 -44
- package/skills/grafana-to-guance-dashboard/SKILL.md +0 -490
- package/skills/grafana-to-guance-dashboard/agents/openai.yaml +0 -4
- package/skills/grafana-to-guance-dashboard/fixtures/grafana-dashboard.guance.json +0 -1029
- package/skills/grafana-to-guance-dashboard/fixtures/grafana-dashboard.json +0 -878
- package/skills/grafana-to-guance-dashboard/package.json +0 -16
- package/skills/grafana-to-guance-dashboard/references/conversion-audit-checklist.md +0 -183
- package/skills/grafana-to-guance-dashboard/references/converter-notes.md +0 -244
- package/skills/grafana-to-guance-dashboard/references/promql-compatibility-cheatsheet.md +0 -172
- package/skills/grafana-to-guance-dashboard/references/unit-inference-cheatsheet.md +0 -174
- package/skills/grafana-to-guance-dashboard/schemas/charts/chart-schema.json +0 -84
- package/skills/grafana-to-guance-dashboard/schemas/charts/common/chart-link-item-schema.json +0 -48
- package/skills/grafana-to-guance-dashboard/schemas/charts/common/chart-links-schema.json +0 -9
- package/skills/grafana-to-guance-dashboard/schemas/charts/common/common-chart-types-schema.json +0 -39
- package/skills/grafana-to-guance-dashboard/schemas/charts/common/common-vars-item-schema.json +0 -117
- package/skills/grafana-to-guance-dashboard/schemas/charts/common/common-vars-schema.json +0 -10
- package/skills/grafana-to-guance-dashboard/schemas/charts/dashboard-schema.json +0 -80
- package/skills/grafana-to-guance-dashboard/schemas/charts/query/queries-schema.json +0 -10
- package/skills/grafana-to-guance-dashboard/schemas/charts/query/query-item-schema.json +0 -60
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-connect-null-schema.json +0 -7
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-gradual-color-schema.json +0 -72
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-groupby-schema.json +0 -22
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-legend-position-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-legend-values-schema.json +0 -19
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-open-stack-schema.json +0 -8
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-show-label-schema.json +0 -8
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-show-line-schema.json +0 -8
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-stack-content-schema.json +0 -12
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/_common-settings-stack-type-schema.json +0 -11
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-alarm-settings-schema.json +0 -48
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-bar-settings-schema.json +0 -69
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-chinamap-settings-schema.json +0 -102
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-funnel-settings-schema.json +0 -34
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-gauge-settings-schema.json +0 -65
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-heatmap-settings-schema.json +0 -50
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-hexgon-settings-schema.json +0 -90
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-histogram-settings-schema.json +0 -47
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-iframe-settings-schema.json +0 -24
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-object-settings-schema.json +0 -52
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-picture-settings-schema.json +0 -46
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-pie-settings-schema.json +0 -90
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-sankey-settings-schema.json +0 -34
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-scatter-bubble-settings-schema.json +0 -31
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-sequence-settings-schema.json +0 -76
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-singlestat-settings-schema.json +0 -163
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-table-settings-schema.json +0 -184
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-text-settings-schema.json +0 -20
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-toplist-settings-schema.json +0 -117
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-topology-settings-schema.json +0 -71
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/chart-worldmap-settings-schema.json +0 -102
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/common-settings-schema.json +0 -82
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-alias-schema.json +0 -47
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-chart-type-schema.json +0 -27
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-colors-schema.json +0 -46
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-compare-schema.json +0 -58
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-fixed-time-schema.json +0 -49
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-levels-schema.json +0 -33
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-schema.json +0 -79
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-time-schema.json +0 -43
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-unit-items-schema.json +0 -228
- package/skills/grafana-to-guance-dashboard/schemas/charts/settings/settings-units-schema.json +0 -59
- package/skills/grafana-to-guance-dashboard/schemas/dashboard-schema.json +0 -5
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/attribute-mutation-schema.json +0 -21
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/attributes-schema.json +0 -10
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/cdata-node-schema.json +0 -19
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/creation-reason-schema.json +0 -17
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/document-fragment-node-schema.json +0 -35
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/document-node-schema.json +0 -30
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/document-type-node-schema.json +0 -28
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/element-node-schema.json +0 -33
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/frustration-record-schema.json +0 -49
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/full-snapshot-record-schema.json +0 -26
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/incremental-data-schema.json +0 -36
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/incremental-snapshot-record-schema.json +0 -29
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/input-data-schema.json +0 -27
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/input-state-schema.json +0 -27
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/media-interaction-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/media-interaction-schema.json +0 -20
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-interaction-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-interaction-schema.json +0 -47
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-move-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mouse-position-schema.json +0 -26
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mutation-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/mutation-payload-schema.json +0 -42
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/node-added-mutation-schema.json +0 -41
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/node-removed-mutation-schema.json +0 -18
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/node-schema.json +0 -28
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/record-schema.json +0 -30
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/scroll-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/scroll-position-schema.json +0 -22
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/segment-metadata-schema.json +0 -28
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/segment-schema.json +0 -25
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/serialized-node-schema.json +0 -15
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/serialized-node-with-id-schema.json +0 -21
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-add-schema.json +0 -28
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-delete-schema.json +0 -24
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-rule-schema.json +0 -29
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/stylesheet-schema.json +0 -30
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/text-mutation-schema.json +0 -27
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/browser/text-node-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/_common-record-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/_common-segment-metadata-schema.json +0 -30
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/_slot-supported-common-record-schema.json +0 -21
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/focus-record-schema.json +0 -34
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/meta-record-schema.json +0 -42
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/pointer-interaction-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/pointer-interaction-schema.json +0 -34
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/segment-context-schema.json +0 -46
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/view-end-record-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/viewport-resize-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/viewport-resize-dimension-schema.json +0 -18
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/common/visual-viewport-record-schema.json +0 -50
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/full-snapshot-record-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/incremental-data-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/incremental-snapshot-record-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-shape-wireframe-schema.json +0 -22
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-shape-wireframe-update-schema.json +0 -22
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-wireframe-schema.json +0 -38
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/_common-wireframe-update-schema.json +0 -38
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/full-snapshot-record-schema.json +0 -38
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/image-wireframe-schema.json +0 -43
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/image-wireframe-update-schema.json +0 -43
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/incremental-data-schema.json +0 -21
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/incremental-snapshot-record-schema.json +0 -26
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/mutation-data-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/mutation-payload-schema.json +0 -55
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/placeholder-wireframe-schema.json +0 -28
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/placeholder-wireframe-update-schema.json +0 -28
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/record-schema.json +0 -27
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/segment-metadata-schema.json +0 -25
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/segment-schema.json +0 -25
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-border-schema.json +0 -25
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-style-schema.json +0 -29
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-wireframe-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/shape-wireframe-update-schema.json +0 -23
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-position-schema.json +0 -57
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-style-schema.json +0 -31
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-wireframe-schema.json +0 -34
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/text-wireframe-update-schema.json +0 -34
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/touch-data-schema.json +0 -51
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/webview-wireframe-schema.json +0 -33
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/webview-wireframe-update-schema.json +0 -33
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/wireframe-clip-schema.json +0 -29
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/wireframe-schema.json +0 -24
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mobile/wireframe-update-mutation-schema.json +0 -24
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mutation-data-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/mutation-payload-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/record-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/segment-metadata-schema.json +0 -14
- package/skills/grafana-to-guance-dashboard/schemas/session-replay/segment-schema.json +0 -15
- package/skills/grafana-to-guance-dashboard/schemas/session-replay-browser-schema.json +0 -5
- package/skills/grafana-to-guance-dashboard/schemas/session-replay-mobile-schema.json +0 -5
- package/skills/grafana-to-guance-dashboard/schemas/session-replay-schema.json +0 -33
- package/skills/grafana-to-guance-dashboard/scripts/convert-grafana-dashboard-core.js +0 -1675
- package/skills/grafana-to-guance-dashboard/scripts/convert-grafana-dashboard.mjs +0 -120
- package/skills/grafana-to-guance-dashboard/scripts/validate-file.mjs +0 -62
- 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
|
-
});
|