k6-perf-reporter 1.7.4 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/.claude/settings.local.json +63 -1
  2. package/.config.example.json +11 -0
  3. package/README.md +40 -7
  4. package/dist/config.d.ts +7 -1
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +12 -2
  7. package/dist/config.js.map +1 -1
  8. package/dist/data-collector.d.ts.map +1 -1
  9. package/dist/data-collector.js +13 -23
  10. package/dist/data-collector.js.map +1 -1
  11. package/dist/datasources/datasource.d.ts +9 -3
  12. package/dist/datasources/datasource.d.ts.map +1 -1
  13. package/dist/datasources/factory.d.ts.map +1 -1
  14. package/dist/datasources/factory.js +5 -0
  15. package/dist/datasources/factory.js.map +1 -1
  16. package/dist/datasources/influx/influx-datasource.d.ts +11 -3
  17. package/dist/datasources/influx/influx-datasource.d.ts.map +1 -1
  18. package/dist/datasources/influx/influx-datasource.js +49 -10
  19. package/dist/datasources/influx/influx-datasource.js.map +1 -1
  20. package/dist/datasources/victoriametrics/index.d.ts +3 -0
  21. package/dist/datasources/victoriametrics/index.d.ts.map +1 -0
  22. package/dist/datasources/victoriametrics/index.js +8 -0
  23. package/dist/datasources/victoriametrics/index.js.map +1 -0
  24. package/dist/datasources/victoriametrics/vm-client.d.ts +17 -0
  25. package/dist/datasources/victoriametrics/vm-client.d.ts.map +1 -0
  26. package/dist/datasources/victoriametrics/vm-client.js +58 -0
  27. package/dist/datasources/victoriametrics/vm-client.js.map +1 -0
  28. package/dist/datasources/victoriametrics/vm-datasource.d.ts +34 -0
  29. package/dist/datasources/victoriametrics/vm-datasource.d.ts.map +1 -0
  30. package/dist/datasources/victoriametrics/vm-datasource.js +411 -0
  31. package/dist/datasources/victoriametrics/vm-datasource.js.map +1 -0
  32. package/dist/reporters/cli-reporter.d.ts.map +1 -1
  33. package/dist/reporters/cli-reporter.js +3 -0
  34. package/dist/reporters/cli-reporter.js.map +1 -1
  35. package/dist/reporters/markdown-reporter.d.ts.map +1 -1
  36. package/dist/reporters/markdown-reporter.js +7 -3
  37. package/dist/reporters/markdown-reporter.js.map +1 -1
  38. package/dist/reporters/slack-reporter.d.ts.map +1 -1
  39. package/dist/reporters/slack-reporter.js +7 -3
  40. package/dist/reporters/slack-reporter.js.map +1 -1
  41. package/dist/types/metrics.d.ts +1 -0
  42. package/dist/types/metrics.d.ts.map +1 -1
  43. package/package.json +3 -2
  44. package/src/config.ts +29 -3
  45. package/src/data-collector.ts +22 -38
  46. package/src/datasources/datasource.ts +16 -4
  47. package/src/datasources/factory.ts +5 -0
  48. package/src/datasources/influx/influx-datasource.ts +85 -59
  49. package/src/datasources/victoriametrics/index.ts +2 -0
  50. package/src/datasources/victoriametrics/vm-client.ts +92 -0
  51. package/src/datasources/victoriametrics/vm-datasource.ts +547 -0
  52. package/src/reporters/cli-reporter.ts +3 -0
  53. package/src/reporters/markdown-reporter.ts +7 -3
  54. package/src/reporters/slack-reporter.ts +8 -3
  55. package/src/types/metrics.ts +1 -0
@@ -12,7 +12,69 @@
12
12
  "Bash(git commit *)",
13
13
  "Bash(git pull *)",
14
14
  "Bash(git stash *)",
15
- "Bash(wc *)"
15
+ "Bash(wc *)",
16
+ "mcp__ide__executeCode",
17
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/api/v1/label/__name__/values')",
18
+ "Bash(python3 -m json.tool)",
19
+ "Bash(curl -sv 'https://victoria.cmn.monoecom.tech/api/v1/label/__name__/values')",
20
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\" 'https://victoria.cmn.monoecom.tech/')",
21
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\" 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/label/__name__/values')",
22
+ "Bash(curl -s -o /dev/null -w \"%{http_code}\" 'https://victoria.cmn.monoecom.tech/vmselect/prometheus/api/v1/label/__name__/values')",
23
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/label/__name__/values')",
24
+ "Bash(python3 -c \"import sys,json; data=json.load\\(sys.stdin\\); [print\\(v\\) for v in data['data'] if 'k6' in v.lower\\(\\)]\")",
25
+ "Bash(python3 -c \"import sys,json; data=json.load\\(sys.stdin\\); print\\(data['status']\\); vals=data.get\\('data',[]\\); print\\(f'{len\\(vals\\)} metrics total'\\); [print\\(v\\) for v in vals[:20]]\")",
26
+ "Bash(python3 -c ' *)",
27
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/label/runId/values')",
28
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/series?match[]=k6_http_reqs_total')",
29
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_req_duration_p95')",
30
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_req_duration_p95%7BrunId%3D%22vmtest%22%7D&time=now')",
31
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/series?match[]=k6_error_responses_total')",
32
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_req_duration_p95%7BrunId%3D%22vmtest%22%7D&time=2026-07-01T00:00:00Z')",
33
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query_range?query=sum\\(k6_http_reqs_total%7BrunId%3D%22vmtest%22%7D\\)&start=2026-01-01T00:00:00Z&end=2026-07-10T00:00:00Z&step=86400')",
34
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_reqs_total%7BrunId%3D%22vmtest%22%7D')",
35
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_reqs_total')",
36
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query_range?query=sum\\(k6_http_reqs_total%7BrunId%3D%221147507%22%7D\\)&start=2026-06-01T00:00:00Z&end=2026-07-10T00:00:00Z&step=3600')",
37
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query_range?query=sum\\(k6_http_reqs_total%7BrunId%3D%221147507%22%7D\\)&start=2026-07-01T00:00:00Z&end=2026-07-10T23:59:59Z&step=60')",
38
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_req_duration_p95%7BrunId%3D%221147507%22%7D&time=2026-07-09T19:00:00Z')",
39
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_iteration_duration_p95%7BrunId%3D%221147507%22%7D&time=2026-07-09T19:00:00Z')",
40
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_req_duration_min%7BrunId%3D%221147507%22%7D&time=2026-07-09T19:00:00Z')",
41
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_iteration_duration_min%7BrunId%3D%221147507%22%7D&time=2026-07-09T19:00:00Z')",
42
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_checks_rate%7BrunId%3D%221147507%22%7D&time=2026-07-09T19:00:00Z')",
43
+ "Bash(curl -s 'https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_vus%7BrunId%3D%221147507%22%7D&time=2026-07-09T19:00:00Z')",
44
+ "Bash(npx tsx *)",
45
+ "Bash(python3 *)",
46
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=avg by\\(name,method,status\\)\\(k6_http_req_duration_p95{runId=\"1147507\"}\\)' --data-urlencode time=2026-07-09T19:00:00Z)",
47
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=increase\\(k6_error_responses_total{runId=\"vmtest\"}[7200s]\\)' --data-urlencode time=2026-07-09T20:00:00Z)",
48
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=increase\\(k6_error_responses_total{runId=\"vmtest\"}[7200s]\\)' --data-urlencode time=2026-07-09T19:10:00Z)",
49
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=increase\\(k6_error_responses_total{runId=\"1147507\"}[7200s]\\)' --data-urlencode time=2026-07-09T20:00:00Z)",
50
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query_range --data-urlencode 'query=sum\\(k6_error_responses_total\\)' --data-urlencode start=2026-07-01T00:00:00Z --data-urlencode end=2026-07-10T00:00:00Z --data-urlencode step=3600)",
51
+ "Bash(node *)",
52
+ "Bash(LOG_LEVEL=debug tsx src/cli.ts generate --run-id '1011202689' -d victoriametrics -st '-5h' --format cli)",
53
+ "Bash(LOG_LEVEL=debug npx tsx src/cli.ts generate --run-id '1011202689' -d victoriametrics -st '-5h' --format cli)",
54
+ "Bash(curl -s \"https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/label/__name__/values\")",
55
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=k6_http_req_duration_p95{runId=\"1011202689\"}' --data-urlencode time=__CMDSUB_OUTPUT__)",
56
+ "Bash(date -jf \"%Y-%m-%dT%H:%M:%S\" \"2026-07-10T08:21:22\" \"+%s\")",
57
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=last_over_time\\(k6_http_req_duration_p95{runId=\"1011202689\"}[24h]\\)' --data-urlencode time=1783660882)",
58
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=k6_http_reqs_total{runId=\"1011202689\"}' --data-urlencode time=1783660882)",
59
+ "Bash(VM_TREND_AS_NATIVE_HISTOGRAM=true npm run report:example:vm)",
60
+ "Bash(LOG_LEVEL=debug VM_TREND_AS_NATIVE_HISTOGRAM=true npx tsx src/cli.ts generate --run-id '1011202689' -d victoriametrics -st '-5h' --format cli)",
61
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=sum\\(increase\\(k6_http_req_duration_bucket{runId=\"1011202689\"}[18000s]\\)\\) by \\(le\\)' --data-urlencode time=1783660882)",
62
+ "Bash(LOG_LEVEL=debug VM_TREND_AS_NATIVE_HISTOGRAM=true VM_TREND_UNIT_SUFFIX=_seconds npx tsx src/cli.ts generate --run-id '1011202689' -d victoriametrics -st '-5h' --format cli)",
63
+ "Bash(VM_TREND_AS_NATIVE_HISTOGRAM=true VM_TREND_UNIT_SUFFIX=_seconds npm run report:example:vm)",
64
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=k6_http_req_duration_seconds_bucket{runId=\"1011202689\"}' --data-urlencode time=1783660882)",
65
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=sum\\(increase\\(k6_http_req_duration_seconds_bucket{runId=\"1011202689\"}[18000s]\\)\\) by \\(le\\)' --data-urlencode time=__CMDSUB_OUTPUT__)",
66
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=k6_http_req_duration_seconds_bucket{runId=\"1011202689\"}' --data-urlencode time=__CMDSUB_OUTPUT__)",
67
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query_range --data-urlencode 'query=k6_http_req_duration_seconds_bucket{runId=\"1011202689\"}' --data-urlencode start=1783658000 --data-urlencode end=1783661000 --data-urlencode step=60)",
68
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=last_over_time\\(k6_http_req_duration_seconds_bucket{runId=\"1011202689\"}[18000s]\\)' --data-urlencode time=__CMDSUB_OUTPUT__)",
69
+ "Bash(curl -s https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query --data-urlencode 'query=sum\\(increase\\(k6_http_req_duration_seconds_sum{runId=\"1011202689\"}[18000s]\\)\\)' --data-urlencode time=__CMDSUB_OUTPUT__)",
70
+ "Bash(LOG_LEVEL=debug npm run report:example:vm)",
71
+ "Bash(curl -s \"http://localhost:8428/api/v1/label/__name__/values\")",
72
+ "WebSearch",
73
+ "WebFetch(domain:grafana.com)",
74
+ "Bash(curl -s \"https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_req_duration_avg%7BrunId%3D%2210112026891267%22%7D&time=now\")",
75
+ "Bash(curl -s \"https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/query?query=k6_http_req_duration_avg\")",
76
+ "Bash(curl -s \"https://victoria.cmn.monoecom.tech/select/0/prometheus/api/v1/label/runId/values\")",
77
+ "Bash(DATASOURCE=victoriametrics VM_URL=https://victoria.cmn.monoecom.tech/select/0/prometheus LOG_LEVEL=info npx tsx src/cli.ts generate --run-id '10112026891267' -st '-30d' --report cli --no-cache)"
16
78
  ]
17
79
  }
18
80
  }
@@ -1,10 +1,21 @@
1
1
  {
2
+ "_comment_datasource": "Supported values: influxdb (default), victoriametrics, prometheus",
3
+ "dataSource": "influxdb",
4
+
5
+ "_comment_influx": "Used when dataSource = influxdb",
2
6
  "influx": {
3
7
  "url": "http://localhost:8086",
4
8
  "token": "${INFLUX_TOKEN}",
5
9
  "org": "my-org",
6
10
  "bucket": "k6"
7
11
  },
12
+
13
+ "_comment_vm": "Used when dataSource = victoriametrics",
14
+ "victoriametrics": {
15
+ "url": "http://localhost:8428",
16
+ "token": "${VM_TOKEN}"
17
+ },
18
+
8
19
  "slack": {
9
20
  "token": "${SLACK_TOKEN}",
10
21
  "channel": "#k6-reports"
package/README.md CHANGED
@@ -52,7 +52,8 @@ Configuration can be provided via config file (`.config.json`) or environment va
52
52
  "slack": {
53
53
  "token": "${SLACK_TOKEN}",
54
54
  "channel": "#k6-reports"
55
- }
55
+ },
56
+ "ignoredStatusCodes": [404, 401]
56
57
  }
57
58
  ```
58
59
 
@@ -68,6 +69,9 @@ export INFLUX_BUCKET=k6
68
69
  # Slack Configuration (optional)
69
70
  export SLACK_TOKEN=xoxb-your-slack-token
70
71
  export SLACK_CHANNEL=#k6-reports
72
+
73
+ # Ignored status codes (optional)
74
+ export IGNORE_STATUS_CODES=404,401
71
75
  ```
72
76
 
73
77
  **Note:** Environment variables support `${ENV_VAR}` references in config file (e.g., `"token": "${INFLUX_TOKEN}"`).
@@ -166,12 +170,17 @@ See [example markdown report](examples/report.example.md) for output format.
166
170
  ### Command Options
167
171
 
168
172
  ```
169
- --run-id <id> k6 test run ID (required)
170
- -st, --start-time <time> Start time (relative: -1h, -30m, or ISO 8601)
171
- -et, --end-time <time> End time (ISO 8601 format, defaults to now)
172
- -c, --config <path> Path to config file (default: .config.json)
173
- -f, --format <format> Output format: 'json', 'cli', 'markdown', or 'slack' (default: cli)
174
- -o, --output <path> Output file path (for json and markdown formats)
173
+ --run-id <id> k6 test run ID (required)
174
+ -st, --start-time <time> Start time (relative: -1h, -30m, or ISO 8601)
175
+ -et, --end-time <time> End time (ISO 8601 format, defaults to now)
176
+ -c, --config <path> Path to config file (default: .config.json)
177
+ -d, --datasource <type> Data source: 'influxdb' or 'prometheus' (default: influxdb)
178
+ -f, --format <format> Output format: 'json', 'cli', 'markdown', or 'slack' (default: cli)
179
+ -r, --report <reporters> Run multiple reporters (comma-separated): cli, json, markdown, slack
180
+ -o, --output <path> Output file path (for json and markdown formats)
181
+ --no-cache Disable cache, always fetch fresh data
182
+ -p, --params <params...> Execution parameters as key=value pairs (e.g. --params env=prod)
183
+ --ignore-status-codes <codes> Comma-separated HTTP status codes to exclude from error metrics
175
184
  ```
176
185
 
177
186
  ### Time Format Examples
@@ -215,6 +224,29 @@ See [example markdown report](examples/report.example.md) for output format.
215
224
  - Iteration duration (min, max, avg, p90, p95)
216
225
  - Virtual users (current, min, max)
217
226
 
227
+ ## Ignoring Status Codes
228
+
229
+ Some status codes (e.g. `404`, `401`) may be expected in your test and shouldn't count as errors. Use `ignoredStatusCodes` to exclude them from failed request counts, error response counts, and error breakdowns.
230
+
231
+ **CLI flag:**
232
+ ```bash
233
+ k6-reporter generate --run-id 123 --ignore-status-codes 404,401
234
+ ```
235
+
236
+ **Environment variable:**
237
+ ```bash
238
+ IGNORE_STATUS_CODES=404,401 k6-reporter generate --run-id 123
239
+ ```
240
+
241
+ **Config file:**
242
+ ```json
243
+ {
244
+ "ignoredStatusCodes": [404, 401]
245
+ }
246
+ ```
247
+
248
+ CLI flag takes precedence over config file. Config file takes precedence over the environment variable only when the env var is absent.
249
+
218
250
  ## Configuration Loading Priority
219
251
 
220
252
  For each configuration value, the system checks in this order:
@@ -222,6 +254,7 @@ For each configuration value, the system checks in this order:
222
254
  1. **Environment variables** (highest priority)
223
255
  - `INFLUX_URL`, `INFLUX_TOKEN`, `INFLUX_ORG`, `INFLUX_BUCKET`
224
256
  - `SLACK_TOKEN`, `SLACK_CHANNEL`
257
+ - `IGNORE_STATUS_CODES` (comma-separated, e.g. `404,401`)
225
258
 
226
259
  2. **Config file values**
227
260
  - `.config.json` or custom path via `-c` option
package/dist/config.d.ts CHANGED
@@ -1,10 +1,14 @@
1
- export type DataSourceType = "influxdb" | "prometheus";
1
+ export type DataSourceType = "influxdb" | "prometheus" | "victoriametrics";
2
2
  export interface InfluxConfig {
3
3
  url: string;
4
4
  token: string;
5
5
  org: string;
6
6
  bucket: string;
7
7
  }
8
+ export interface VictoriaMetricsConfig {
9
+ url: string;
10
+ token?: string;
11
+ }
8
12
  export interface SlackConfig {
9
13
  token: string;
10
14
  channel: string;
@@ -16,6 +20,7 @@ export declare class Config {
16
20
  private static instance;
17
21
  private dataSourceType;
18
22
  private rawInflux;
23
+ private rawVictoriaMetrics;
19
24
  private slackConfig;
20
25
  private cacheConfig;
21
26
  private configPath;
@@ -24,6 +29,7 @@ export declare class Config {
24
29
  private loadRawConfig;
25
30
  private parseDataSourceType;
26
31
  getInfluxConfig(): InfluxConfig;
32
+ getVictoriaMetricsConfig(): VictoriaMetricsConfig;
27
33
  private parseSlackConfig;
28
34
  private parseCacheConfig;
29
35
  private parseIgnoredStatusCodes;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAUD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAW;IAErC,OAAO;IAUP,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,mBAAmB;IAS3B,eAAe,IAAI,YAAY;IAgB/B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,YAAY;IAWpB,qBAAqB,IAAI,MAAM,EAAE;IAIjC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAO/C,iBAAiB,IAAI,cAAc;IAInC,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,cAAc,IAAI,WAAW;CAG9B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,GAAG,iBAAiB,CAAC;AAE3E,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAWD,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,kBAAkB,CAAsC;IAChE,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,kBAAkB,CAAW;IAErC,OAAO;IAWP,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,mBAAmB;IAS3B,eAAe,IAAI,YAAY;IAgB/B,wBAAwB,IAAI,qBAAqB;IAkBjD,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,uBAAuB;IAW/B,OAAO,CAAC,YAAY;IAWpB,qBAAqB,IAAI,MAAM,EAAE;IAIjC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAO/C,iBAAiB,IAAI,cAAc;IAInC,cAAc,IAAI,WAAW,GAAG,IAAI;IAIpC,cAAc,IAAI,WAAW;CAG9B"}
package/dist/config.js CHANGED
@@ -13,6 +13,7 @@ class Config {
13
13
  const rawConfig = this.loadRawConfig();
14
14
  this.dataSourceType = this.parseDataSourceType(rawConfig.dataSource);
15
15
  this.rawInflux = rawConfig.influx;
16
+ this.rawVictoriaMetrics = rawConfig.victoriametrics;
16
17
  this.slackConfig = this.parseSlackConfig(rawConfig.slack);
17
18
  this.cacheConfig = this.parseCacheConfig(rawConfig.cache);
18
19
  this.ignoredStatusCodes = this.parseIgnoredStatusCodes(rawConfig.ignoredStatusCodes);
@@ -33,8 +34,8 @@ class Config {
33
34
  parseDataSourceType(raw) {
34
35
  const envValue = process.env["DATASOURCE"];
35
36
  const value = envValue || raw || "influxdb";
36
- if (value !== "influxdb" && value !== "prometheus") {
37
- throw new Error(`Unknown datasource type: '${value}'. Supported: influxdb, prometheus`);
37
+ if (value !== "influxdb" && value !== "prometheus" && value !== "victoriametrics") {
38
+ throw new Error(`Unknown datasource type: '${value}'. Supported: influxdb, prometheus, victoriametrics`);
38
39
  }
39
40
  return value;
40
41
  }
@@ -49,6 +50,15 @@ class Config {
49
50
  }
50
51
  return { url, token, org, bucket };
51
52
  }
53
+ getVictoriaMetricsConfig() {
54
+ const url = this.resolveValue(this.rawVictoriaMetrics?.url, "VM_URL");
55
+ if (!url) {
56
+ throw new Error("VictoriaMetrics configuration is incomplete. " +
57
+ "Set VM_URL via environment variable or config file.");
58
+ }
59
+ const token = this.resolveValue(this.rawVictoriaMetrics?.token, "VM_TOKEN");
60
+ return { url, token: token ?? undefined };
61
+ }
52
62
  parseSlackConfig(rawConfig) {
53
63
  const token = this.resolveValue(rawConfig?.token, "SLACK_TOKEN");
54
64
  if (!token) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"data-collector.d.ts","sourceRoot":"","sources":["../src/data-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAe3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAe;gBAEhB,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKrD,OAAO,CAAC,aAAa;IAQf,OAAO,CACX,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAc,EACzB,OAAO,GAAE,MAAgB,EACzB,IAAI,GAAE,OAAY,EAClB,kBAAkB,GAAE,MAAM,EAAO,GAChC,OAAO,CAAC,gBAAgB,CAAC;CAqG7B"}
1
+ {"version":3,"file":"data-collector.d.ts","sourceRoot":"","sources":["../src/data-collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAK3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAe;gBAEhB,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM;IAKrD,OAAO,CAAC,aAAa;IAQf,OAAO,CACX,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAc,EACzB,OAAO,GAAE,MAAgB,EACzB,IAAI,GAAE,OAAY,EAClB,kBAAkB,GAAE,MAAM,EAAO,GAChC,OAAO,CAAC,gBAAgB,CAAC;CA+F7B"}
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataCollector = void 0;
4
- const metrics_1 = require("./metrics");
5
4
  const loader_1 = require("./loader");
6
5
  const cache_1 = require("./cache");
7
6
  const logger_1 = require("./logger");
@@ -30,13 +29,10 @@ class DataCollector {
30
29
  }
31
30
  logger_1.logger.debug("DataCollector.collect: cache miss, fetching from datasource");
32
31
  }
33
- // Phase 1: Parallel bulk fetch — all independent queries at once
34
32
  this.loader.start("Fetching all data in parallel...");
35
33
  const fetchStart = Date.now();
36
- logger_1.logger.info("DataCollector.collect: starting parallel data fetch (9 queries)");
37
- const [httpReqsData, httpReqDurationData, duration, vus, vusMax, iterations, checks, iterationDuration, errorResponsesText,] = await Promise.all([
38
- this.dataSource.fetchHttpReqsData(runId, startTime, endTime),
39
- this.dataSource.fetchHttpReqDurationData(runId, startTime, endTime),
34
+ logger_1.logger.info("DataCollector.collect: starting parallel data fetch");
35
+ const [duration, vus, vusMax, iterations, checks, iterationDuration, errorResponsesText, httpReqs, httpReqFailed, httpReqDuration, httpReqDurationSuccess, errorResponses, errorRequests, requests, rpsAggregated,] = await Promise.all([
40
36
  this.dataSource.calculateTestDuration(runId, startTime, endTime),
41
37
  this.dataSource.extractVus(runId, startTime, endTime),
42
38
  this.dataSource.extractVusMax(runId, startTime, endTime),
@@ -44,29 +40,22 @@ class DataCollector {
44
40
  this.dataSource.extractChecks(runId, startTime, endTime),
45
41
  this.dataSource.extractIterationDuration(runId, startTime, endTime),
46
42
  this.dataSource.extractErrorResponsesText(runId, startTime, endTime),
43
+ this.dataSource.extractHttpReqs(runId, startTime, endTime, ignoredStatusCodes),
44
+ this.dataSource.extractHttpReqFailed(runId, startTime, endTime, ignoredStatusCodes),
45
+ this.dataSource.extractHttpReqDuration(runId, startTime, endTime),
46
+ this.dataSource.extractHttpReqDurationSuccess(runId, startTime, endTime),
47
+ this.dataSource.extractErrorResponses(runId, startTime, endTime, ignoredStatusCodes),
48
+ this.dataSource.extractErrorRequests(runId, startTime, endTime, ignoredStatusCodes),
49
+ this.dataSource.extractRequests(runId, startTime, endTime),
50
+ this.dataSource.extractRpsAggregated(runId, startTime, endTime),
47
51
  ]);
48
52
  const fetchElapsed = Date.now() - fetchStart;
49
53
  logger_1.logger.info(`DataCollector.collect: parallel fetch completed in ${fetchElapsed}ms`);
50
- logger_1.logger.debug(`DataCollector.collect: fetched rows — httpReqs=${httpReqsData.length}, httpReqDuration=${httpReqDurationData.length}, ` +
51
- `errorResponsesText=${errorResponsesText.responses.length}`);
52
54
  this.loader.success(`Data fetching finished in ${this.formatElapsed(fetchElapsed)}`);
53
- // Phase 2: Derive metrics from cached data (no additional queries)
54
- this.loader.start("Computing metrics...");
55
- logger_1.logger.info("DataCollector.collect: computing derived metrics");
56
- // Update iterations with duration info
57
- if (iterations.total > 0 && duration.durationSeconds > 0) {
55
+ // Update iterations rate using authoritative duration if not already set
56
+ if (iterations.total > 0 && duration.durationSeconds > 0 && iterations.rate === 0) {
58
57
  iterations.rate = iterations.total / duration.durationSeconds;
59
58
  }
60
- const httpReqs = (0, metrics_1.extractHttpReqsFromData)(httpReqsData, duration);
61
- const httpReqFailed = (0, metrics_1.extractHttpReqFailedFromData)(httpReqsData, ignoredStatusCodes);
62
- const httpReqDuration = (0, metrics_1.extractHttpReqDurationFromData)(httpReqDurationData);
63
- const httpReqDurationSuccess = (0, metrics_1.extractHttpReqDurationSuccessFromData)(httpReqDurationData);
64
- const errorResponses = (0, metrics_1.extractErrorResponsesFromData)(httpReqsData, duration, ignoredStatusCodes);
65
- const errorRequests = (0, metrics_1.extractErrorRequestsFromData)(httpReqsData, httpReqDurationData, ignoredStatusCodes);
66
- const requests = (0, metrics_1.extractRequestsFromData)(httpReqsData, httpReqDurationData);
67
- const rpsAggregated = (0, metrics_1.extractRpsAggregatedFromData)(httpReqsData);
68
- logger_1.logger.info("DataCollector.collect: all metrics computed");
69
- this.loader.success("Computed all metrics");
70
59
  const reportData = {
71
60
  ...(typeof data === "object" && data !== null ? data : {}),
72
61
  httpReqs,
@@ -91,6 +80,7 @@ class DataCollector {
91
80
  endTime: duration.endTime || endTime,
92
81
  timestamp: new Date().toISOString(),
93
82
  data: reportData,
83
+ ...(ignoredStatusCodes.length > 0 ? { ignoredStatusCodes } : {}),
94
84
  };
95
85
  if (this.cache) {
96
86
  this.cache.set(runId, startTime, endTime, result);
@@ -1 +1 @@
1
- {"version":3,"file":"data-collector.js","sourceRoot":"","sources":["../src/data-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-collector.js","sourceRoot":"","sources":["../src/data-collector.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,5 @@
1
- import { HttpReqsRow, HttpReqDurationRow, DurationMetric, VusMetric, VusMaxMetric, IterationsMetric, ChecksMetric, IterationDurationMetric, ErrorResponsesTextMetric } from "../types";
1
+ import { DurationMetric, VusMetric, VusMaxMetric, IterationsMetric, ChecksMetric, IterationDurationMetric, ErrorResponsesTextMetric, HttpReqsMetric, HttpReqFailedMetric, HttpReqDurationMetric, HttpReqDurationSuccessMetric, ErrorResponsesMetric, ErrorRequestsMetric, RequestsMetric, RpsAggregatedMetric } from "../types";
2
2
  export interface DataSource {
3
- fetchHttpReqsData(runId: string, startTime: string, endTime: string): Promise<HttpReqsRow[]>;
4
- fetchHttpReqDurationData(runId: string, startTime: string, endTime: string): Promise<HttpReqDurationRow[]>;
5
3
  calculateTestDuration(runId: string, startTime: string, endTime: string): Promise<DurationMetric>;
6
4
  extractVus(runId: string, startTime: string, endTime: string): Promise<VusMetric>;
7
5
  extractVusMax(runId: string, startTime: string, endTime: string): Promise<VusMaxMetric>;
@@ -9,5 +7,13 @@ export interface DataSource {
9
7
  extractChecks(runId: string, startTime: string, endTime: string): Promise<ChecksMetric>;
10
8
  extractIterationDuration(runId: string, startTime: string, endTime: string): Promise<IterationDurationMetric>;
11
9
  extractErrorResponsesText(runId: string, startTime: string, endTime: string): Promise<ErrorResponsesTextMetric>;
10
+ extractHttpReqs(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<HttpReqsMetric>;
11
+ extractHttpReqFailed(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<HttpReqFailedMetric>;
12
+ extractHttpReqDuration(runId: string, startTime: string, endTime: string): Promise<HttpReqDurationMetric>;
13
+ extractHttpReqDurationSuccess(runId: string, startTime: string, endTime: string): Promise<HttpReqDurationSuccessMetric>;
14
+ extractErrorResponses(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<ErrorResponsesMetric>;
15
+ extractErrorRequests(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<ErrorRequestsMetric>;
16
+ extractRequests(runId: string, startTime: string, endTime: string): Promise<RequestsMetric>;
17
+ extractRpsAggregated(runId: string, startTime: string, endTime: string): Promise<RpsAggregatedMetric>;
12
18
  }
13
19
  //# sourceMappingURL=datasource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../src/datasources/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,UAAU;IACzB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC7F,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC3G,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAClG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9G,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CACjH"}
1
+ {"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../../src/datasources/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,UAAU;IACzB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAClG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAChG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxF,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC9G,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAChH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC1H,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpI,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAC1G,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;IACxH,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtI,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC5F,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACvG"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/datasources/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAYjF"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/datasources/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAgBjF"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createDataSource = createDataSource;
4
4
  const influx_1 = require("./influx");
5
+ const victoriametrics_1 = require("./victoriametrics");
5
6
  const logger_1 = require("../logger");
6
7
  function createDataSource(type, config) {
7
8
  logger_1.logger.info(`createDataSource: type=${type}`);
@@ -10,6 +11,10 @@ function createDataSource(type, config) {
10
11
  const influxConfig = config.getInfluxConfig();
11
12
  return new influx_1.InfluxDataSource(influxConfig);
12
13
  }
14
+ case "victoriametrics": {
15
+ const vmConfig = config.getVictoriaMetricsConfig();
16
+ return new victoriametrics_1.VictoriaMetricsDataSource(vmConfig);
17
+ }
13
18
  case "prometheus":
14
19
  throw new Error("Prometheus datasource is not yet implemented");
15
20
  default:
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/datasources/factory.ts"],"names":[],"mappings":";;AAKA,4CAYC;AAhBD,qCAA4C;AAE5C,sCAAmC;AAEnC,SAAgB,gBAAgB,CAAC,IAAoB,EAAE,MAAc;IACnE,eAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YAC9C,OAAO,IAAI,yBAAgB,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,YAAY;YACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/datasources/factory.ts"],"names":[],"mappings":";;AAMA,4CAgBC;AArBD,qCAA4C;AAC5C,uDAA8D;AAE9D,sCAAmC;AAEnC,SAAgB,gBAAgB,CAAC,IAAoB,EAAE,MAAc;IACnE,eAAM,CAAC,IAAI,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAC9C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YAC9C,OAAO,IAAI,yBAAgB,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;QACD,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,wBAAwB,EAAE,CAAC;YACnD,OAAO,IAAI,2CAAyB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,YAAY;YACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE;YACE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { InfluxConfig } from "../../config";
2
2
  import { DataSource } from "../datasource";
3
- import { HttpReqsRow, HttpReqDurationRow, DurationMetric, VusMetric, VusMaxMetric, IterationsMetric, ChecksMetric, IterationDurationMetric, ErrorResponsesTextMetric } from "../../types";
3
+ import { DurationMetric, VusMetric, VusMaxMetric, IterationsMetric, ChecksMetric, IterationDurationMetric, ErrorResponsesTextMetric, HttpReqsMetric, HttpReqFailedMetric, HttpReqDurationMetric, HttpReqDurationSuccessMetric, ErrorResponsesMetric, ErrorRequestsMetric, RequestsMetric, RpsAggregatedMetric } from "../../types";
4
4
  export declare class InfluxDataSource implements DataSource {
5
5
  private client;
6
6
  private config;
7
7
  constructor(config: InfluxConfig);
8
- fetchHttpReqsData(runId: string, startTime: string, endTime: string): Promise<HttpReqsRow[]>;
9
- fetchHttpReqDurationData(runId: string, startTime: string, endTime: string): Promise<HttpReqDurationRow[]>;
8
+ private fetchHttpReqsData;
9
+ private fetchHttpReqDurationData;
10
10
  calculateTestDuration(runId: string, startTime: string, endTime: string): Promise<DurationMetric>;
11
11
  extractVus(runId: string, startTime: string, endTime: string): Promise<VusMetric>;
12
12
  extractVusMax(runId: string, startTime: string, endTime: string): Promise<VusMaxMetric>;
@@ -14,5 +14,13 @@ export declare class InfluxDataSource implements DataSource {
14
14
  extractChecks(runId: string, startTime: string, endTime: string): Promise<ChecksMetric>;
15
15
  extractIterationDuration(runId: string, startTime: string, endTime: string): Promise<IterationDurationMetric>;
16
16
  extractErrorResponsesText(runId: string, startTime: string, endTime: string): Promise<ErrorResponsesTextMetric>;
17
+ extractHttpReqs(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<HttpReqsMetric>;
18
+ extractHttpReqFailed(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<HttpReqFailedMetric>;
19
+ extractHttpReqDuration(runId: string, startTime: string, endTime: string): Promise<HttpReqDurationMetric>;
20
+ extractHttpReqDurationSuccess(runId: string, startTime: string, endTime: string): Promise<HttpReqDurationSuccessMetric>;
21
+ extractErrorResponses(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<ErrorResponsesMetric>;
22
+ extractErrorRequests(runId: string, startTime: string, endTime: string, ignoredStatusCodes: number[]): Promise<ErrorRequestsMetric>;
23
+ extractRequests(runId: string, startTime: string, endTime: string): Promise<RequestsMetric>;
24
+ extractRpsAggregated(runId: string, startTime: string, endTime: string): Promise<RpsAggregatedMetric>;
17
25
  }
18
26
  //# sourceMappingURL=influx-datasource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"influx-datasource.d.ts","sourceRoot":"","sources":["../../../src/datasources/influx/influx-datasource.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,cAAc,EACd,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EAEzB,MAAM,aAAa,CAAC;AAErB,qBAAa,gBAAiB,YAAW,UAAU;IACjD,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY;IAK1B,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,EAAE,CAAC;IAwBnB,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAuB1B,qBAAqB,CACzB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,cAAc,CAAC;IAoDpB,UAAU,CACd,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,SAAS,CAAC;IA0Bf,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC;IAyBlB,iBAAiB,CACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC;IAuCtB,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,CAAC;IA2BlB,wBAAwB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,uBAAuB,CAAC;IAmC7B,yBAAyB,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,wBAAwB,CAAC;CAwCrC"}
1
+ {"version":3,"file":"influx-datasource.d.ts","sourceRoot":"","sources":["../../../src/datasources/influx/influx-datasource.ts"],"names":[],"mappings":"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"}
@@ -85,11 +85,7 @@ class InfluxDataSource {
85
85
  const endTimeMs = new Date(lastTime).getTime();
86
86
  const durationSeconds = (endTimeMs - startTimeMs) / 1000;
87
87
  logger_1.logger.info(`calculateTestDuration: ${durationSeconds.toFixed(1)}s (${firstTime} -> ${lastTime})`);
88
- return {
89
- startTime: firstTime,
90
- endTime: lastTime,
91
- durationSeconds,
92
- };
88
+ return { startTime: firstTime, endTime: lastTime, durationSeconds };
93
89
  }
94
90
  async extractVus(runId, startTime, endTime) {
95
91
  logger_1.logger.debug(`extractVus: runId=${runId}, range=[${startTime}, ${endTime}]`);
@@ -152,9 +148,9 @@ class InfluxDataSource {
152
148
  return { total, rate: 0 };
153
149
  }
154
150
  timeValues.sort();
155
- const startTimeMs = new Date(timeValues[0]).getTime();
156
- const endTimeMs = new Date(timeValues[timeValues.length - 1]).getTime();
157
- const durationSeconds = (endTimeMs - startTimeMs) / 1000;
151
+ const startMs = new Date(timeValues[0]).getTime();
152
+ const endMs = new Date(timeValues[timeValues.length - 1]).getTime();
153
+ const durationSeconds = (endMs - startMs) / 1000;
158
154
  const rate = durationSeconds > 0 ? total / durationSeconds : 0;
159
155
  logger_1.logger.info(`extractIterations: total=${total}, rate=${rate.toFixed(2)} iter/s`);
160
156
  return { total, rate };
@@ -237,11 +233,54 @@ class InfluxDataSource {
237
233
  groupedErrors.set(key, { url, method, status, error, count: 1 });
238
234
  }
239
235
  });
240
- const responses = Array.from(groupedErrors.values())
241
- .sort((a, b) => b.count - a.count);
236
+ const responses = Array.from(groupedErrors.values()).sort((a, b) => b.count - a.count);
242
237
  logger_1.logger.info(`extractErrorResponsesText: ${results.length} rows grouped into ${responses.length} unique errors`);
243
238
  return { responses };
244
239
  }
240
+ async extractHttpReqs(runId, startTime, endTime, ignoredStatusCodes) {
241
+ const [data, duration] = await Promise.all([
242
+ this.fetchHttpReqsData(runId, startTime, endTime),
243
+ this.calculateTestDuration(runId, startTime, endTime),
244
+ ]);
245
+ return (0, metrics_1.extractHttpReqsFromData)(data, duration);
246
+ }
247
+ async extractHttpReqFailed(runId, startTime, endTime, ignoredStatusCodes) {
248
+ const data = await this.fetchHttpReqsData(runId, startTime, endTime);
249
+ return (0, metrics_1.extractHttpReqFailedFromData)(data, ignoredStatusCodes);
250
+ }
251
+ async extractHttpReqDuration(runId, startTime, endTime) {
252
+ const data = await this.fetchHttpReqDurationData(runId, startTime, endTime);
253
+ return (0, metrics_1.extractHttpReqDurationFromData)(data);
254
+ }
255
+ async extractHttpReqDurationSuccess(runId, startTime, endTime) {
256
+ const data = await this.fetchHttpReqDurationData(runId, startTime, endTime);
257
+ return (0, metrics_1.extractHttpReqDurationSuccessFromData)(data);
258
+ }
259
+ async extractErrorResponses(runId, startTime, endTime, ignoredStatusCodes) {
260
+ const [data, duration] = await Promise.all([
261
+ this.fetchHttpReqsData(runId, startTime, endTime),
262
+ this.calculateTestDuration(runId, startTime, endTime),
263
+ ]);
264
+ return (0, metrics_1.extractErrorResponsesFromData)(data, duration, ignoredStatusCodes);
265
+ }
266
+ async extractErrorRequests(runId, startTime, endTime, ignoredStatusCodes) {
267
+ const [httpReqsData, httpReqDurationData] = await Promise.all([
268
+ this.fetchHttpReqsData(runId, startTime, endTime),
269
+ this.fetchHttpReqDurationData(runId, startTime, endTime),
270
+ ]);
271
+ return (0, metrics_1.extractErrorRequestsFromData)(httpReqsData, httpReqDurationData, ignoredStatusCodes);
272
+ }
273
+ async extractRequests(runId, startTime, endTime) {
274
+ const [httpReqsData, httpReqDurationData] = await Promise.all([
275
+ this.fetchHttpReqsData(runId, startTime, endTime),
276
+ this.fetchHttpReqDurationData(runId, startTime, endTime),
277
+ ]);
278
+ return (0, metrics_1.extractRequestsFromData)(httpReqsData, httpReqDurationData);
279
+ }
280
+ async extractRpsAggregated(runId, startTime, endTime) {
281
+ const data = await this.fetchHttpReqsData(runId, startTime, endTime);
282
+ return (0, metrics_1.extractRpsAggregatedFromData)(data);
283
+ }
245
284
  }
246
285
  exports.InfluxDataSource = InfluxDataSource;
247
286
  //# sourceMappingURL=influx-datasource.js.map