@d-dash/datasource-victoriametrics 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # @d-dash/datasource-victoriametrics
2
+
3
+ VictoriaMetrics-backed `DatasourceAdapter` for d-dash.
4
+
5
+ ## Usage
6
+
7
+ ```ts
8
+ import { createVictoriaMetricsDatasourceAdapter } from "@d-dash/datasource-victoriametrics";
9
+
10
+ registry.registerDatasource(
11
+ createVictoriaMetricsDatasourceAdapter({
12
+ id: "vm",
13
+ baseUrl: "https://vm.example.com",
14
+ defaultStep: "60s",
15
+ }),
16
+ );
17
+ ```
18
+
19
+ Query mode handling:
20
+
21
+ - range mode (default): `/api/v1/query_range`
22
+ - instant mode (`filters.mode === "instant"`): `/api/v1/query`
23
+
24
+ Responses are normalized to d-dash frames (`time` + numeric value fields), preserving metric labels as field labels.
25
+
26
+ ## Metric discovery
27
+
28
+ `getMetrics()` is implemented and queries
29
+ `GET /api/v1/label/__name__/values` by default. Override with `metricsPath`
30
+ when your VictoriaMetrics endpoint is mounted behind a custom route.
@@ -0,0 +1,32 @@
1
+ import type { DatasourceAdapter } from "@d-dash/core";
2
+ /** Minimal fetch function contract consumed by this adapter. */
3
+ export type FetchFn = (url: string, init?: FetchRequestInit) => Promise<FetchResponse>;
4
+ /** Minimal request-init shape for injected fetch clients. */
5
+ export type FetchRequestInit = {
6
+ method?: string;
7
+ headers?: Record<string, string>;
8
+ body?: string;
9
+ signal?: AbortSignal;
10
+ };
11
+ /** Minimal fetch response shape consumed by this adapter. */
12
+ export type FetchResponse = {
13
+ ok: boolean;
14
+ status: number;
15
+ statusText: string;
16
+ json(): Promise<unknown>;
17
+ };
18
+ /** Configuration options for creating the VictoriaMetrics datasource adapter. */
19
+ export type VictoriaMetricsDatasourceAdapterOptions = {
20
+ id: string;
21
+ baseUrl: string;
22
+ headers?: Record<string, string>;
23
+ timeoutMs?: number;
24
+ /** Default `step` for range queries when caller does not provide one via filters.step. */
25
+ defaultStep?: string;
26
+ /** Metric discovery path. Defaults to `/api/v1/label/__name__/values`. */
27
+ metricsPath?: string;
28
+ fetch?: FetchFn;
29
+ };
30
+ /** Creates a d-dash datasource adapter backed by VictoriaMetrics HTTP APIs. */
31
+ export declare function createVictoriaMetricsDatasourceAdapter(options: VictoriaMetricsDatasourceAdapterOptions): DatasourceAdapter;
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,iBAAiB,EAQlB,MAAM,cAAc,CAAC;AAEtB,gEAAgE;AAChE,MAAM,MAAM,OAAO,GAAG,CACpB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,gBAAgB,KACpB,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5B,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,uCAAuC,GAAG;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0FAA0F;IAC1F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAwJF,+EAA+E;AAC/E,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,iBAAiB,CAqInB"}
package/dist/index.js ADDED
@@ -0,0 +1,213 @@
1
+ const CAPABILITIES = {
2
+ supportsAdHocFilters: true,
3
+ supportsMetadataDiscovery: true,
4
+ };
5
+ const DEFAULT_VISUALIZATIONS = [
6
+ "timeseries",
7
+ "stat",
8
+ "table",
9
+ "text",
10
+ "html",
11
+ ];
12
+ function toNumber(value) {
13
+ return typeof value === "number" ? value : Number(value);
14
+ }
15
+ function shouldUseInstantQuery(filters) {
16
+ const mode = filters?.mode;
17
+ return mode === "instant";
18
+ }
19
+ function resolveStep(filters, defaultStep) {
20
+ const step = filters?.step;
21
+ if (typeof step === "string" && step.trim() !== "") {
22
+ return step;
23
+ }
24
+ return defaultStep;
25
+ }
26
+ function metricToFieldName(metric) {
27
+ if (!metric || Object.keys(metric).length === 0) {
28
+ return "value";
29
+ }
30
+ const name = metric.__name__;
31
+ if (typeof name === "string" && name.trim() !== "") {
32
+ return name;
33
+ }
34
+ return "value";
35
+ }
36
+ function normalizeRangeResult(result) {
37
+ const timeValues = [];
38
+ const metricValues = [];
39
+ for (const pair of result.values ?? []) {
40
+ timeValues.push(toNumber(pair[0]) * 1000);
41
+ metricValues.push(toNumber(pair[1]));
42
+ }
43
+ const timeField = {
44
+ name: "time",
45
+ type: "time",
46
+ values: timeValues,
47
+ };
48
+ const valueField = {
49
+ name: metricToFieldName(result.metric),
50
+ type: "number",
51
+ values: metricValues,
52
+ labels: result.metric,
53
+ };
54
+ return { fields: [timeField, valueField] };
55
+ }
56
+ function normalizeInstantResult(result) {
57
+ const timestamp = toNumber(result.value?.[0] ?? 0) * 1000;
58
+ const value = toNumber(result.value?.[1] ?? 0);
59
+ return {
60
+ fields: [
61
+ {
62
+ name: "time",
63
+ type: "time",
64
+ values: [timestamp],
65
+ },
66
+ {
67
+ name: metricToFieldName(result.metric),
68
+ type: "number",
69
+ values: [value],
70
+ labels: result.metric,
71
+ },
72
+ ],
73
+ };
74
+ }
75
+ function buildFramesFromVmEnvelope(envelope) {
76
+ const resultType = envelope.data?.resultType;
77
+ const results = envelope.data?.result ?? [];
78
+ if (resultType === "vector") {
79
+ return results.map((entry) => normalizeInstantResult(entry));
80
+ }
81
+ return results.map((entry) => normalizeRangeResult(entry));
82
+ }
83
+ function normalizeVmMetricDiscoveryResponse(raw, datasourceId) {
84
+ const envelope = raw;
85
+ if (!Array.isArray(envelope.data)) {
86
+ return [];
87
+ }
88
+ return envelope.data
89
+ .filter((name) => typeof name === "string" && name.trim().length > 0)
90
+ .map((name) => ({
91
+ id: name,
92
+ name,
93
+ unit: "",
94
+ datasource: datasourceId,
95
+ supportedVisualizations: DEFAULT_VISUALIZATIONS,
96
+ }));
97
+ }
98
+ /** Creates a d-dash datasource adapter backed by VictoriaMetrics HTTP APIs. */
99
+ export function createVictoriaMetricsDatasourceAdapter(options) {
100
+ const fetchImpl = options.fetch ?? ((url, init) => fetch(url, init));
101
+ const timeoutMs = options.timeoutMs ?? 30_000;
102
+ const defaultStep = options.defaultStep ?? "60s";
103
+ return {
104
+ id: options.id,
105
+ capabilities: CAPABILITIES,
106
+ async getMetrics() {
107
+ const path = options.metricsPath ?? "/api/v1/label/__name__/values";
108
+ const normalizedPath = path.startsWith("/") ? path : `/${path}`;
109
+ try {
110
+ const response = await fetchImpl(`${options.baseUrl}${normalizedPath}`, {
111
+ method: "GET",
112
+ headers: {
113
+ "Content-Type": "application/json",
114
+ ...options.headers,
115
+ },
116
+ });
117
+ if (!response.ok) {
118
+ return [];
119
+ }
120
+ const raw = await response.json();
121
+ return normalizeVmMetricDiscoveryResponse(raw, options.id);
122
+ }
123
+ catch {
124
+ return [];
125
+ }
126
+ },
127
+ async query(request, context) {
128
+ const filters = request.filters ?? undefined;
129
+ const instant = shouldUseInstantQuery(filters);
130
+ const endpoint = instant ? "/api/v1/query" : "/api/v1/query_range";
131
+ const payload = {
132
+ query: request.metric,
133
+ };
134
+ if (instant) {
135
+ payload.time = Math.floor(request.timeRange.to / 1000);
136
+ }
137
+ else {
138
+ payload.start = Math.floor(request.timeRange.from / 1000);
139
+ payload.end = Math.floor(request.timeRange.to / 1000);
140
+ payload.step = resolveStep(filters, defaultStep);
141
+ }
142
+ if (context.traceId) {
143
+ payload.traceId = context.traceId;
144
+ }
145
+ let signal;
146
+ let timeoutId;
147
+ if (timeoutMs > 0) {
148
+ const controller = new AbortController();
149
+ signal = controller.signal;
150
+ timeoutId = setTimeout(() => controller.abort(), timeoutMs);
151
+ }
152
+ try {
153
+ const response = await fetchImpl(`${options.baseUrl}${endpoint}`, {
154
+ method: "POST",
155
+ headers: {
156
+ "Content-Type": "application/json",
157
+ ...options.headers,
158
+ },
159
+ body: JSON.stringify(payload),
160
+ signal,
161
+ });
162
+ if (!response.ok) {
163
+ return {
164
+ status: "error",
165
+ frames: [],
166
+ error: {
167
+ code: "DATASOURCE_HTTP_ERROR",
168
+ message: `HTTP ${response.status} from datasource '${options.id}'.`,
169
+ retriable: response.status >= 500,
170
+ },
171
+ };
172
+ }
173
+ const raw = (await response.json());
174
+ if (raw.status !== "success") {
175
+ return {
176
+ status: "error",
177
+ frames: [],
178
+ error: {
179
+ code: "DATASOURCE_QUERY_FAILED",
180
+ message: raw.error ?? "VictoriaMetrics query failed.",
181
+ retriable: false,
182
+ },
183
+ };
184
+ }
185
+ const frames = buildFramesFromVmEnvelope(raw);
186
+ return {
187
+ status: "success",
188
+ frames,
189
+ };
190
+ }
191
+ catch (error) {
192
+ const isAbort = error instanceof Error && error.name === "AbortError";
193
+ return {
194
+ status: "error",
195
+ frames: [],
196
+ error: {
197
+ code: "DATASOURCE_QUERY_FAILED",
198
+ message: isAbort
199
+ ? `Request to datasource '${options.id}' timed out.`
200
+ : `Network error querying datasource '${options.id}'.`,
201
+ retriable: !isAbort,
202
+ },
203
+ };
204
+ }
205
+ finally {
206
+ if (timeoutId !== undefined) {
207
+ clearTimeout(timeoutId);
208
+ }
209
+ }
210
+ },
211
+ };
212
+ }
213
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "@d-dash/datasource-victoriametrics",
3
+ "version": "0.1.0",
4
+ "description": "VictoriaMetrics datasource adapter for d-dash",
5
+ "license": "LGPL-3.0-or-later",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/thienvu18/d-dash.git",
9
+ "directory": "packages/datasource-victoriametrics"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/thienvu18/d-dash/issues"
13
+ },
14
+ "homepage": "https://github.com/thienvu18/d-dash/tree/main/packages/datasource-victoriametrics#readme",
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "scripts": {
25
+ "build": "tsc -p tsconfig.json",
26
+ "test": "npm run build && node --test $(find tests -name '*.spec.js')"
27
+ },
28
+ "peerDependencies": {
29
+ "@d-dash/core": "^0.1.0"
30
+ },
31
+ "keywords": [
32
+ "dashboard",
33
+ "datasource",
34
+ "victoriametrics",
35
+ "d-dash"
36
+ ],
37
+ "files": [
38
+ "dist",
39
+ "README.md"
40
+ ],
41
+ "engines": {
42
+ "node": ">=18"
43
+ },
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "devDependencies": {
48
+ "@d-dash/core": "file:../core",
49
+ "typescript": "^5.9.3"
50
+ }
51
+ }