@lwmacct/260529-promclient 0.16.260628 → 0.18.260629
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 +185 -149
- package/dist/{client.d.ts → http/client.d.ts} +2 -2
- package/dist/http/client.d.ts.map +1 -0
- package/dist/{client.js → http/client.js} +15 -53
- package/dist/http/client.js.map +1 -0
- package/dist/{errors.d.ts → http/errors.d.ts} +1 -1
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/http/errors.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +3 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/request.d.ts +7 -0
- package/dist/http/request.d.ts.map +1 -0
- package/dist/http/request.js +18 -0
- package/dist/http/request.js.map +1 -0
- package/dist/http/response.d.ts +3 -0
- package/dist/http/response.d.ts.map +1 -0
- package/dist/http/response.js +20 -0
- package/dist/http/response.js.map +1 -0
- package/dist/index.d.ts +4 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -5
- package/dist/index.js.map +1 -1
- package/dist/{types.d.ts → model/index.d.ts} +1 -1
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +2 -0
- package/dist/model/index.js.map +1 -0
- package/dist/query/index.d.ts +3 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +3 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/promql.d.ts.map +1 -0
- package/dist/query/promql.js.map +1 -0
- package/dist/{time.d.ts → query/time.d.ts} +2 -2
- package/dist/query/time.d.ts.map +1 -0
- package/dist/query/time.js.map +1 -0
- package/dist/transform/duplicate.d.ts +4 -0
- package/dist/transform/duplicate.d.ts.map +1 -0
- package/dist/transform/duplicate.js +17 -0
- package/dist/transform/duplicate.js.map +1 -0
- package/dist/transform/{core.d.ts → guards.d.ts} +2 -4
- package/dist/transform/guards.d.ts.map +1 -0
- package/dist/transform/{core.js → guards.js} +1 -6
- package/dist/transform/guards.js.map +1 -0
- package/dist/transform/index.d.ts +6 -4
- package/dist/transform/index.d.ts.map +1 -1
- package/dist/transform/index.js +6 -4
- package/dist/transform/index.js.map +1 -1
- package/dist/transform/instant.d.ts +9 -6
- package/dist/transform/instant.d.ts.map +1 -1
- package/dist/transform/instant.js +21 -32
- package/dist/transform/instant.js.map +1 -1
- package/dist/transform/matrix.d.ts +10 -0
- package/dist/transform/matrix.d.ts.map +1 -0
- package/dist/transform/matrix.js +35 -0
- package/dist/transform/matrix.js.map +1 -0
- package/dist/transform/numeric.d.ts +3 -0
- package/dist/transform/numeric.d.ts.map +1 -0
- package/dist/transform/numeric.js +6 -0
- package/dist/transform/numeric.js.map +1 -0
- package/dist/transform/records/apply.d.ts +6 -0
- package/dist/transform/records/apply.d.ts.map +1 -0
- package/dist/transform/records/apply.js +31 -0
- package/dist/transform/records/apply.js.map +1 -0
- package/dist/transform/records/index.d.ts +8 -0
- package/dist/transform/records/index.d.ts.map +1 -0
- package/dist/transform/records/index.js +54 -0
- package/dist/transform/records/index.js.map +1 -0
- package/dist/transform/records/resolvers.d.ts +12 -0
- package/dist/transform/records/resolvers.d.ts.map +1 -0
- package/dist/transform/records/resolvers.js +42 -0
- package/dist/transform/records/resolvers.js.map +1 -0
- package/dist/transform/records/schema.d.ts +29 -0
- package/dist/transform/records/schema.d.ts.map +1 -0
- package/dist/transform/records/schema.js +2 -0
- package/dist/transform/records/schema.js.map +1 -0
- package/package.json +3 -22
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/promql.d.ts.map +0 -1
- package/dist/promql.js.map +0 -1
- package/dist/time.d.ts.map +0 -1
- package/dist/time.js.map +0 -1
- package/dist/transform/core.d.ts.map +0 -1
- package/dist/transform/core.js.map +0 -1
- package/dist/transform/range.d.ts +0 -6
- package/dist/transform/range.d.ts.map +0 -1
- package/dist/transform/range.js +0 -25
- package/dist/transform/range.js.map +0 -1
- package/dist/transform/records.d.ts +0 -42
- package/dist/transform/records.d.ts.map +0 -1
- package/dist/transform/records.js +0 -145
- package/dist/transform/records.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- /package/dist/{errors.js → http/errors.js} +0 -0
- /package/dist/{promql.d.ts → query/promql.d.ts} +0 -0
- /package/dist/{promql.js → query/promql.js} +0 -0
- /package/dist/{time.js → query/time.js} +0 -0
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@ Small Prometheus-compatible HTTP API client with PromQL helpers and response tra
|
|
|
14
14
|
- 提供 PromQL selector / label matcher 转义工具
|
|
15
15
|
- 提供 vector、matrix、scalar、string 响应转换工具
|
|
16
16
|
- 支持 label 编码 record、字段别名、字段级 value source 和多查询字段合并
|
|
17
|
+
- 支持重复 label / record 字段处理策略:`last`、`first`、`array`、`error`
|
|
17
18
|
- 无运行时依赖
|
|
18
19
|
|
|
19
20
|
## 安装
|
|
@@ -177,90 +178,50 @@ const time = serializeTime(new Date());
|
|
|
177
178
|
|
|
178
179
|
Prometheus 的 sample value 是字符串。转换工具会在需要时解析为 number,并过滤 `NaN`。
|
|
179
180
|
|
|
180
|
-
###
|
|
181
|
+
### Record Schema Transform
|
|
181
182
|
|
|
182
|
-
有些指标会把表格结构编码到 labels 中,例如用某些 labels 表示
|
|
183
|
+
有些指标会把表格结构编码到 labels 中,例如用某些 labels 表示 record key、field name,并用 sample value 或某个 label 表示字段值。`mapVectorToRecords` 和 `mapVectorToRecordMap` 使用 schema 直接把 vector 转成对象,不再暴露中间 field rows。
|
|
183
184
|
|
|
184
185
|
示例一:sample value 作为字段值。
|
|
185
186
|
|
|
186
|
-
假设查询返回这些 vector samples:
|
|
187
|
-
|
|
188
187
|
```promql
|
|
189
188
|
demo_service_quota{tenant="acme", service="api", resource="cpu"} 4
|
|
190
189
|
demo_service_quota{tenant="acme", service="api", resource="memory_gb"} 16
|
|
191
190
|
demo_service_quota{tenant="acme", service="worker", resource="cpu"} 2
|
|
192
191
|
```
|
|
193
192
|
|
|
194
|
-
可以把它理解为:
|
|
195
|
-
|
|
196
|
-
| index | key | field | value |
|
|
197
|
-
| --- | --- | --- | --- |
|
|
198
|
-
| `acme` | `api` | `cpu` | `4` |
|
|
199
|
-
| `acme` | `api` | `memory_gb` | `16` |
|
|
200
|
-
| `acme` | `worker` | `cpu` | `2` |
|
|
201
|
-
|
|
202
193
|
```ts
|
|
203
194
|
import {
|
|
204
|
-
|
|
205
|
-
|
|
195
|
+
label,
|
|
196
|
+
labels,
|
|
197
|
+
mapVectorToRecords,
|
|
198
|
+
numberSample,
|
|
206
199
|
} from "@lwmacct/260529-promclient";
|
|
207
200
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
// }
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
如果字段由多个 label 共同决定,可以把多个 label 组合成字段名:
|
|
232
|
-
|
|
233
|
-
```ts
|
|
234
|
-
const rows = mapVectorToFieldRows(response, {
|
|
235
|
-
indexLabels: ["tenant"],
|
|
236
|
-
keyLabels: ["service"],
|
|
237
|
-
fieldLabels: ["method", "status"],
|
|
201
|
+
type ServiceQuota = {
|
|
202
|
+
key: string;
|
|
203
|
+
tenant: string;
|
|
204
|
+
service: string;
|
|
205
|
+
cpu?: number;
|
|
206
|
+
memoryGb?: number;
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
const rows = mapVectorToRecords<ServiceQuota>(response, {
|
|
210
|
+
key: labels(["tenant", "service"]),
|
|
211
|
+
field: label("resource"),
|
|
212
|
+
base: {
|
|
213
|
+
key: labels(["tenant", "service"]),
|
|
214
|
+
tenant: label("tenant"),
|
|
215
|
+
service: label("service"),
|
|
216
|
+
},
|
|
217
|
+
fields: {
|
|
218
|
+
cpu: numberSample("cpu"),
|
|
219
|
+
memory_gb: numberSample("memoryGb"),
|
|
220
|
+
},
|
|
238
221
|
});
|
|
239
|
-
// method="GET", status="200" -> field: "GET.200"
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
如果字段不是来自 label,而是整个查询对应一个固定字段,可以使用 `field`。这适合把多个查询结果合并成同一批 record:
|
|
243
|
-
|
|
244
|
-
```ts
|
|
245
|
-
const rows = [
|
|
246
|
-
...mapVectorToFieldRows(inResponse, {
|
|
247
|
-
keyLabels: ["switch", "ifIndex"],
|
|
248
|
-
field: "inBps",
|
|
249
|
-
valueSource: "sample",
|
|
250
|
-
}),
|
|
251
|
-
...mapVectorToFieldRows(outResponse, {
|
|
252
|
-
keyLabels: ["switch", "ifIndex"],
|
|
253
|
-
field: "outBps",
|
|
254
|
-
valueSource: "sample",
|
|
255
|
-
}),
|
|
256
|
-
];
|
|
257
|
-
|
|
258
|
-
const table = mapFieldRowsByKey(rows);
|
|
259
222
|
```
|
|
260
223
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
这类指标通常用 sample value `1` 表示“这条信息存在”,真正的字段值在 label 中:
|
|
224
|
+
示例二:字段值来自 label。
|
|
264
225
|
|
|
265
226
|
```promql
|
|
266
227
|
demo_asset_info{asset="srv-01", field="region", value="us-east"} 1
|
|
@@ -268,93 +229,165 @@ demo_asset_info{asset="srv-01", field="owner", value="platform"} 1
|
|
|
268
229
|
demo_asset_info{asset="srv-02", field="region", value="eu-west"} 1
|
|
269
230
|
```
|
|
270
231
|
|
|
271
|
-
|
|
232
|
+
```ts
|
|
233
|
+
import {
|
|
234
|
+
label,
|
|
235
|
+
labelValue,
|
|
236
|
+
mapVectorToRecordMap,
|
|
237
|
+
} from "@lwmacct/260529-promclient";
|
|
272
238
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
239
|
+
type AssetInfo = {
|
|
240
|
+
asset: string;
|
|
241
|
+
region?: string;
|
|
242
|
+
owner?: string;
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
const table = mapVectorToRecordMap<AssetInfo>(response, {
|
|
246
|
+
key: label("asset"),
|
|
247
|
+
field: label("field"),
|
|
248
|
+
base: {
|
|
249
|
+
asset: label("asset"),
|
|
250
|
+
},
|
|
251
|
+
fields: {
|
|
252
|
+
region: labelValue("region", "value"),
|
|
253
|
+
owner: labelValue("owner", "value"),
|
|
254
|
+
},
|
|
255
|
+
});
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
示例三:部分字段来自 label,部分字段来自 sample。
|
|
278
259
|
|
|
279
260
|
```ts
|
|
280
261
|
import {
|
|
281
|
-
|
|
282
|
-
|
|
262
|
+
autoValue,
|
|
263
|
+
label,
|
|
264
|
+
labelValue,
|
|
265
|
+
labels,
|
|
266
|
+
mapVectorToRecords,
|
|
267
|
+
numberSample,
|
|
283
268
|
} from "@lwmacct/260529-promclient";
|
|
284
269
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
270
|
+
type DiskInfo = {
|
|
271
|
+
key: string;
|
|
272
|
+
host: string;
|
|
273
|
+
serialNumber: string;
|
|
274
|
+
modelNumber?: string;
|
|
275
|
+
namespace?: string;
|
|
276
|
+
totalBytes?: number;
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
const disks = mapVectorToRecords<DiskInfo>(response, {
|
|
280
|
+
key: labels(["host", "serial"]),
|
|
281
|
+
field: label("field"),
|
|
282
|
+
base: {
|
|
283
|
+
key: labels(["host", "serial"]),
|
|
284
|
+
host: label("host"),
|
|
285
|
+
serialNumber: label("serial"),
|
|
286
|
+
},
|
|
287
|
+
fields: {
|
|
288
|
+
model_number: labelValue("modelNumber", "value"),
|
|
289
|
+
namespace: autoValue("namespace", "value"),
|
|
290
|
+
total_bytes: numberSample("totalBytes"),
|
|
291
|
+
},
|
|
292
292
|
});
|
|
293
|
-
|
|
294
|
-
const table = mapFieldRowsByKey(rows);
|
|
295
|
-
// {
|
|
296
|
-
// "srv-01": {
|
|
297
|
-
// region: "us-east",
|
|
298
|
-
// owner: "platform"
|
|
299
|
-
// },
|
|
300
|
-
// "srv-02": {
|
|
301
|
-
// region: "eu-west"
|
|
302
|
-
// }
|
|
303
|
-
// }
|
|
304
293
|
```
|
|
305
294
|
|
|
306
|
-
|
|
295
|
+
示例四:字段来自 metric name。
|
|
307
296
|
|
|
308
297
|
```ts
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
298
|
+
import {
|
|
299
|
+
label,
|
|
300
|
+
mapVectorToRecordMap,
|
|
301
|
+
metricName,
|
|
302
|
+
numberSample,
|
|
303
|
+
} from "@lwmacct/260529-promclient";
|
|
304
|
+
|
|
305
|
+
type MemoryStats = {
|
|
306
|
+
total?: number;
|
|
307
|
+
available?: number;
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
const stats = mapVectorToRecordMap<MemoryStats>(response, {
|
|
311
|
+
key: label("instance"),
|
|
312
|
+
field: metricName(),
|
|
313
|
+
fields: {
|
|
314
|
+
node_memory_MemTotal_bytes: numberSample("total"),
|
|
315
|
+
node_memory_MemAvailable_bytes: numberSample("available"),
|
|
319
316
|
},
|
|
320
317
|
});
|
|
321
318
|
```
|
|
322
319
|
|
|
323
|
-
|
|
320
|
+
多个查询结果需要合并成同一批 records 时,可以使用 `mergeVectorRecords`。每个输入可以有独立 schema,只要 key 相同就会合并到同一个对象。
|
|
324
321
|
|
|
325
322
|
```ts
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
323
|
+
import {
|
|
324
|
+
constant,
|
|
325
|
+
label,
|
|
326
|
+
labels,
|
|
327
|
+
mergeVectorRecords,
|
|
328
|
+
numberSample,
|
|
329
|
+
} from "@lwmacct/260529-promclient";
|
|
330
|
+
|
|
331
|
+
type PortTraffic = {
|
|
332
|
+
key: string;
|
|
333
|
+
switchId: string;
|
|
334
|
+
ifIndex: string;
|
|
335
|
+
inBps?: number;
|
|
336
|
+
outBps?: number;
|
|
337
|
+
};
|
|
338
|
+
|
|
339
|
+
const base = {
|
|
340
|
+
key: labels(["switch", "ifIndex"]),
|
|
341
|
+
switchId: label("switch"),
|
|
342
|
+
ifIndex: label("ifIndex"),
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
const rows = mergeVectorRecords<PortTraffic>([
|
|
346
|
+
{
|
|
347
|
+
response: inResponse,
|
|
348
|
+
schema: {
|
|
349
|
+
key: labels(["switch", "ifIndex"]),
|
|
350
|
+
field: constant("inBps"),
|
|
351
|
+
base,
|
|
352
|
+
fields: { inBps: numberSample("inBps") },
|
|
339
353
|
},
|
|
340
354
|
},
|
|
341
|
-
|
|
355
|
+
{
|
|
356
|
+
response: outResponse,
|
|
357
|
+
schema: {
|
|
358
|
+
key: labels(["switch", "ifIndex"]),
|
|
359
|
+
field: constant("outBps"),
|
|
360
|
+
base,
|
|
361
|
+
fields: { outBps: numberSample("outBps") },
|
|
362
|
+
},
|
|
363
|
+
},
|
|
364
|
+
]);
|
|
342
365
|
```
|
|
343
366
|
|
|
344
|
-
|
|
367
|
+
重复字段默认采用后出现的值。可以在 schema 或字段规则中配置:
|
|
345
368
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
369
|
+
```ts
|
|
370
|
+
const rows = mapVectorToRecords(response, {
|
|
371
|
+
key: label("asset"),
|
|
372
|
+
field: label("field"),
|
|
373
|
+
duplicate: "first",
|
|
374
|
+
fields: {
|
|
375
|
+
owner: labelValue("owner", "value", { duplicate: "error" }),
|
|
376
|
+
},
|
|
377
|
+
});
|
|
378
|
+
```
|
|
351
379
|
|
|
352
|
-
|
|
380
|
+
使用 `duplicate: "array"` 时,字段从第一个值开始就是数组:
|
|
353
381
|
|
|
354
382
|
```ts
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
383
|
+
const rows = mapVectorToRecords(response, {
|
|
384
|
+
key: label("asset"),
|
|
385
|
+
field: label("field"),
|
|
386
|
+
duplicate: "array",
|
|
387
|
+
fields: {
|
|
388
|
+
owner: labelValue("owner", "value"),
|
|
389
|
+
},
|
|
390
|
+
});
|
|
358
391
|
```
|
|
359
392
|
|
|
360
393
|
### Instant Response
|
|
@@ -366,7 +399,6 @@ import {
|
|
|
366
399
|
getScalarNumber,
|
|
367
400
|
mapVector,
|
|
368
401
|
mapVectorByLabel,
|
|
369
|
-
mapVectorByLabelAndName,
|
|
370
402
|
} from "@lwmacct/260529-promclient";
|
|
371
403
|
```
|
|
372
404
|
|
|
@@ -378,20 +410,13 @@ import {
|
|
|
378
410
|
| `getScalarValue(response)` | 从 scalar/string response 中取出原始字符串值 |
|
|
379
411
|
| `getScalarNumber(response, defaultValue?)` | 从 scalar response 中解析数字 |
|
|
380
412
|
| `mapVectorByLabel(response, labelName, parser?)` | 按指定 label 聚合 vector 数值 |
|
|
381
|
-
| `mapVectorByLabelAndName(response, labelName, mapper, parser?)` | 按指定 label 聚合,并用 `__name__` 区分字段 |
|
|
382
413
|
| `mapVector(response, mapper)` | 自定义映射 vector items |
|
|
383
414
|
|
|
384
|
-
`
|
|
415
|
+
`mapVectorByLabel` 支持第四个参数配置重复 label 的处理策略:
|
|
385
416
|
|
|
386
417
|
```ts
|
|
387
|
-
const
|
|
388
|
-
|
|
389
|
-
return { ...prev, total: value };
|
|
390
|
-
}
|
|
391
|
-
if (name === "node_memory_MemAvailable_bytes") {
|
|
392
|
-
return { ...prev, available: value };
|
|
393
|
-
}
|
|
394
|
-
return prev;
|
|
418
|
+
const values = mapVectorByLabel(response, "instance", undefined, {
|
|
419
|
+
duplicate: "array",
|
|
395
420
|
});
|
|
396
421
|
```
|
|
397
422
|
|
|
@@ -413,6 +438,8 @@ import {
|
|
|
413
438
|
| `mapMatrixToSeries(response, parser?, filter?)` | 把 matrix response 展平为按时间升序排列的点数组 |
|
|
414
439
|
| `mapMatrixByLabel(response, labelName, parser?)` | 按指定 label 输出多条时间序列 |
|
|
415
440
|
|
|
441
|
+
`mapMatrixByLabel` 同样支持第四个参数配置重复 label 的处理策略。
|
|
442
|
+
|
|
416
443
|
示例:
|
|
417
444
|
|
|
418
445
|
```ts
|
|
@@ -472,29 +499,38 @@ try {
|
|
|
472
499
|
}
|
|
473
500
|
```
|
|
474
501
|
|
|
475
|
-
##
|
|
502
|
+
## 导入入口
|
|
503
|
+
|
|
504
|
+
根入口导出全部公共 API:
|
|
505
|
+
|
|
506
|
+
```ts
|
|
507
|
+
import {
|
|
508
|
+
PromClient,
|
|
509
|
+
PromHttpError,
|
|
510
|
+
getAdaptiveStep,
|
|
511
|
+
mapMatrixByLabel,
|
|
512
|
+
selector,
|
|
513
|
+
} from "@lwmacct/260529-promclient";
|
|
514
|
+
```
|
|
476
515
|
|
|
477
|
-
|
|
516
|
+
如果只需要响应转换工具,也可以使用唯一保留的子路径入口:
|
|
478
517
|
|
|
479
518
|
```ts
|
|
480
|
-
import {
|
|
481
|
-
import { PromHttpError } from "@lwmacct/260529-promclient/errors";
|
|
482
|
-
import { selector } from "@lwmacct/260529-promclient/promql";
|
|
483
|
-
import { getAdaptiveStep } from "@lwmacct/260529-promclient/time";
|
|
484
|
-
import { mapMatrixByLabel } from "@lwmacct/260529-promclient/transform";
|
|
519
|
+
import { mapVectorToRecords } from "@lwmacct/260529-promclient/transform";
|
|
485
520
|
```
|
|
486
521
|
|
|
487
|
-
|
|
522
|
+
旧的 `./client`、`./errors`、`./promql`、`./time`、`./types` 子路径入口已移除。
|
|
488
523
|
|
|
489
524
|
## 开发
|
|
490
525
|
|
|
491
526
|
```bash
|
|
492
527
|
npm install
|
|
528
|
+
npm test
|
|
493
529
|
npm run typecheck
|
|
494
530
|
npm run build
|
|
495
531
|
```
|
|
496
532
|
|
|
497
|
-
|
|
533
|
+
发布前至少需要通过测试、类型检查和构建。
|
|
498
534
|
|
|
499
535
|
## 发布
|
|
500
536
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PromBatchOptions, PromBatchRequest, PromClientOptions, PromInstantData, PromQueryOptions, PromRangeQueryOptions,
|
|
1
|
+
import type { PromBatchOptions, PromBatchRequest, PromClientOptions, PromInstantData, PromMatrixData, PromQueryOptions, PromRangeQueryOptions, PromResultData, PromSuccessResponse } from "../model/index.js";
|
|
2
2
|
export declare class PromClient {
|
|
3
3
|
private readonly baseUrl;
|
|
4
4
|
private readonly fetcher;
|
|
@@ -8,7 +8,7 @@ export declare class PromClient {
|
|
|
8
8
|
query(query: string, options?: PromQueryOptions): Promise<PromSuccessResponse<PromInstantData>>;
|
|
9
9
|
queryRange(query: string, options: PromRangeQueryOptions): Promise<PromSuccessResponse<PromMatrixData>>;
|
|
10
10
|
batch(requests: readonly PromBatchRequest[], options?: PromBatchOptions): Promise<Array<PromSuccessResponse<PromResultData>>>;
|
|
11
|
-
private
|
|
11
|
+
private buildGetUrl;
|
|
12
12
|
private execute;
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAY3B,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,EAAE,iBAAiB;IAWhC,KAAK,CACT,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAgB1C,UAAU,CACd,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC;IAczC,KAAK,CACT,QAAQ,EAAE,SAAS,gBAAgB,EAAE,EACrC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC;IAkBtD,OAAO,CAAC,WAAW;YAIL,OAAO;CAgCtB"}
|
|
@@ -1,22 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const resolveHeaders = async (headers) => typeof headers === "function" ? headers() : headers;
|
|
6
|
-
const appendDefinedParam = (params, key, value) => {
|
|
7
|
-
if (value !== undefined) {
|
|
8
|
-
params.set(key, String(value));
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
const mergeHeaders = (baseHeaders, requestHeaders) => {
|
|
12
|
-
const headers = new Headers(baseHeaders);
|
|
13
|
-
if (requestHeaders) {
|
|
14
|
-
new Headers(requestHeaders).forEach((value, key) => {
|
|
15
|
-
headers.set(key, value);
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
return headers;
|
|
19
|
-
};
|
|
1
|
+
import { serializeTime } from "../query/index.js";
|
|
2
|
+
import { PromHttpError } from "./errors.js";
|
|
3
|
+
import { parsePromResponse } from "./response.js";
|
|
4
|
+
import { appendDefinedParam, defaultMaxGetUrlLength, mergeHeaders, resolveHeaders, trimTrailingSlash, } from "./request.js";
|
|
20
5
|
export class PromClient {
|
|
21
6
|
baseUrl;
|
|
22
7
|
fetcher;
|
|
@@ -26,7 +11,7 @@ export class PromClient {
|
|
|
26
11
|
if (!options.baseUrl) {
|
|
27
12
|
throw new Error("PromClient requires a baseUrl.");
|
|
28
13
|
}
|
|
29
|
-
this.baseUrl =
|
|
14
|
+
this.baseUrl = trimTrailingSlash(options.baseUrl);
|
|
30
15
|
this.fetcher = options.fetcher ?? ((...args) => globalThis.fetch(...args));
|
|
31
16
|
this.headers = options.headers;
|
|
32
17
|
this.maxGetUrlLength = options.maxGetUrlLength ?? defaultMaxGetUrlLength;
|
|
@@ -67,52 +52,29 @@ export class PromClient {
|
|
|
67
52
|
}
|
|
68
53
|
return responses;
|
|
69
54
|
}
|
|
70
|
-
|
|
55
|
+
buildGetUrl(endpoint, params) {
|
|
71
56
|
return `${this.baseUrl}${endpoint}?${params.toString()}`;
|
|
72
57
|
}
|
|
73
58
|
async execute(endpoint, params, requestOptions) {
|
|
74
59
|
const baseHeaders = await resolveHeaders(this.headers);
|
|
75
60
|
const url = `${this.baseUrl}${endpoint}`;
|
|
76
|
-
const getUrl = this.
|
|
61
|
+
const getUrl = this.buildGetUrl(endpoint, params);
|
|
77
62
|
const useGet = getUrl.length <= this.maxGetUrlLength;
|
|
78
63
|
const headers = mergeHeaders(baseHeaders, requestOptions.headers);
|
|
79
64
|
const requestUrl = useGet ? getUrl : url;
|
|
80
|
-
|
|
81
|
-
if (useGet) {
|
|
82
|
-
response = await this.fetcher(requestUrl, {
|
|
83
|
-
method: "GET",
|
|
84
|
-
headers,
|
|
85
|
-
signal: requestOptions.signal,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
65
|
+
if (!useGet) {
|
|
89
66
|
headers.set("Content-Type", "application/x-www-form-urlencoded");
|
|
90
|
-
response = await this.fetcher(requestUrl, {
|
|
91
|
-
method: "POST",
|
|
92
|
-
headers,
|
|
93
|
-
body: params,
|
|
94
|
-
signal: requestOptions.signal,
|
|
95
|
-
});
|
|
96
67
|
}
|
|
68
|
+
const response = await this.fetcher(requestUrl, {
|
|
69
|
+
method: useGet ? "GET" : "POST",
|
|
70
|
+
headers,
|
|
71
|
+
body: useGet ? undefined : params,
|
|
72
|
+
signal: requestOptions.signal,
|
|
73
|
+
});
|
|
97
74
|
if (!response.ok) {
|
|
98
75
|
throw new PromHttpError(response, requestUrl);
|
|
99
76
|
}
|
|
100
|
-
|
|
101
|
-
try {
|
|
102
|
-
data = (await response.json());
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
throw new PromParseError("Failed to parse Prometheus response JSON.", {
|
|
106
|
-
cause: error,
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
if (data.status === "error") {
|
|
110
|
-
throw new PromApiError(data);
|
|
111
|
-
}
|
|
112
|
-
if (data.status !== "success") {
|
|
113
|
-
throw new PromParseError("Prometheus response did not include a status.");
|
|
114
|
-
}
|
|
115
|
-
return data;
|
|
77
|
+
return parsePromResponse(response);
|
|
116
78
|
}
|
|
117
79
|
}
|
|
118
80
|
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD;AAED,qBAAa,aAAc,SAAQ,eAAe;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;gBAET,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;CAO5C;AAED,qBAAa,YAAa,SAAQ,eAAe;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;gBAEzB,QAAQ,EAAE,iBAAiB;CAMxC;AAED,qBAAa,cAAe,SAAQ,eAAe;gBACrC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAIpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/http/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,eAAe;IACvC,MAAM,CAAS;IACf,UAAU,CAAS;IACnB,GAAG,CAAS;IAErB,YAAY,QAAkB,EAAE,GAAW;QACzC,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;QACtC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,eAAe;IACtC,SAAS,CAAU;IACnB,QAAQ,CAAoB;IAErC,YAAY,QAA2B;QACrC,KAAK,CAAC,yBAAyB,QAAQ,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD,YAAY,OAAe,EAAE,OAAsB;QACjD,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PromClientOptions } from "../model/index.js";
|
|
2
|
+
export declare const defaultMaxGetUrlLength = 2000;
|
|
3
|
+
export declare const trimTrailingSlash: (value: string) => string;
|
|
4
|
+
export declare const resolveHeaders: (headers: PromClientOptions["headers"]) => Promise<HeadersInit | undefined>;
|
|
5
|
+
export declare const appendDefinedParam: (params: URLSearchParams, key: string, value: string | number | undefined) => void;
|
|
6
|
+
export declare const mergeHeaders: (baseHeaders?: HeadersInit, requestHeaders?: HeadersInit) => Headers;
|
|
7
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/http/request.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAE3C,eAAO,MAAM,iBAAiB,GAAI,OAAO,MAAM,KAAG,MACvB,CAAC;AAE5B,eAAO,MAAM,cAAc,GACzB,SAAS,iBAAiB,CAAC,SAAS,CAAC,KACpC,OAAO,CAAC,WAAW,GAAG,SAAS,CACmB,CAAC;AAEtD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,eAAe,EACvB,KAAK,MAAM,EACX,OAAO,MAAM,GAAG,MAAM,GAAG,SAAS,SAKnC,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,cAAc,WAAW,EACzB,iBAAiB,WAAW,KAC3B,OAQF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const defaultMaxGetUrlLength = 2000;
|
|
2
|
+
export const trimTrailingSlash = (value) => value.replace(/\/+$/, "");
|
|
3
|
+
export const resolveHeaders = async (headers) => typeof headers === "function" ? headers() : headers;
|
|
4
|
+
export const appendDefinedParam = (params, key, value) => {
|
|
5
|
+
if (value !== undefined) {
|
|
6
|
+
params.set(key, String(value));
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
export const mergeHeaders = (baseHeaders, requestHeaders) => {
|
|
10
|
+
const headers = new Headers(baseHeaders);
|
|
11
|
+
if (requestHeaders) {
|
|
12
|
+
new Headers(requestHeaders).forEach((value, key) => {
|
|
13
|
+
headers.set(key, value);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return headers;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/http/request.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAU,EAAE,CACzD,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE5B,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,OAAqC,EACH,EAAE,CACpC,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAEtD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,MAAuB,EACvB,GAAW,EACX,KAAkC,EAClC,EAAE;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,WAAyB,EACzB,cAA4B,EACnB,EAAE;IACX,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,cAAc,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/http/response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,cAAc,EACd,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAG3B,eAAO,MAAM,iBAAiB,GAAU,KAAK,SAAS,cAAc,EAClE,UAAU,QAAQ,KACjB,OAAO,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAmBpC,CAAC"}
|