k6-perf-reporter 1.3.0 → 1.4.1

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 CHANGED
@@ -259,7 +259,11 @@ For InfluxDB time queries, use relative or absolute formats:
259
259
 
260
260
  ## Environment Variables
261
261
 
262
- Set these for easier usage:
262
+ You can configure InfluxDB settings via environment variables. They can be used in two ways:
263
+
264
+ ### 1. Complete Configuration via Environment Variables
265
+
266
+ Set all four variables to use environment-only configuration:
263
267
 
264
268
  ```bash
265
269
  export INFLUX_URL=http://localhost:8086
@@ -268,19 +272,29 @@ export INFLUX_ORG=your-org
268
272
  export INFLUX_BUCKET=k6
269
273
  ```
270
274
 
271
- Then use:
275
+ Then run the CLI without needing a config file:
272
276
  ```bash
273
277
  npx tsx src/cli.ts generate \
274
- --url $INFLUX_URL \
275
- --token $INFLUX_TOKEN \
276
- --org $INFLUX_ORG \
277
- --bucket $INFLUX_BUCKET \
278
- --test-name api-load-test \
278
+ --run-id 123456790121 \
279
279
  --start-time "-1h" \
280
280
  --end-time "now()" \
281
- --format html
281
+ --format cli
282
282
  ```
283
283
 
284
+ ### 2. Override Specific Values from Config File
285
+
286
+ You can also use environment variables to override individual settings from `.config.json`:
287
+
288
+ ```bash
289
+ # .config.json exists with default settings
290
+ export INFLUX_TOKEN=production-token
291
+
292
+ # Now the CLI will use the token from env var while other settings come from .config.json
293
+ npx tsx src/cli.ts generate --run-id 123456790121 --format cli
294
+ ```
295
+
296
+ **Note:** Environment variables always take precedence over values in `.config.json`.
297
+
284
298
  ## Prerequisites
285
299
 
286
300
  - Node.js 16+
package/dist/config.d.ts CHANGED
@@ -8,6 +8,9 @@ export declare class Config {
8
8
  private static instance;
9
9
  private config;
10
10
  private constructor();
11
+ private loadConfig;
12
+ private loadFromEnv;
13
+ private overrideWithEnv;
11
14
  static getInstance(configPath?: string): Config;
12
15
  getConfig(): InfluxConfig;
13
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,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,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAMP,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAO/C,SAAS,IAAI,YAAY;CAG1B"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,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,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO;IAIP,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;IASvB,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM;IAO/C,SAAS,IAAI,YAAY;CAG1B"}
package/dist/config.js CHANGED
@@ -7,10 +7,48 @@ exports.Config = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  class Config {
10
- constructor(configPath = ".config.json") {
11
- const fullPath = path_1.default.resolve(configPath);
12
- const data = JSON.parse(fs_1.default.readFileSync(fullPath, "utf-8"));
13
- this.config = data.influx;
10
+ constructor(configPath) {
11
+ this.config = this.loadConfig(configPath);
12
+ }
13
+ loadConfig(configPath) {
14
+ // Try to load from JSON file first
15
+ const filePath = configPath || ".config.json";
16
+ const fullPath = path_1.default.resolve(filePath);
17
+ let config;
18
+ if (fs_1.default.existsSync(fullPath)) {
19
+ const data = JSON.parse(fs_1.default.readFileSync(fullPath, "utf-8"));
20
+ config = data.influx;
21
+ }
22
+ else {
23
+ // If file doesn't exist, try to load from env vars
24
+ const envConfig = this.loadFromEnv();
25
+ if (!envConfig) {
26
+ throw new Error(`Config file not found at ${fullPath} and no environment variables set. ` +
27
+ `Set INFLUX_URL, INFLUX_TOKEN, INFLUX_ORG, INFLUX_BUCKET or provide a config file.`);
28
+ }
29
+ return envConfig;
30
+ }
31
+ // Override with environment variables if they exist
32
+ return this.overrideWithEnv(config);
33
+ }
34
+ loadFromEnv() {
35
+ const url = process.env.INFLUX_URL;
36
+ const token = process.env.INFLUX_TOKEN;
37
+ const org = process.env.INFLUX_ORG;
38
+ const bucket = process.env.INFLUX_BUCKET;
39
+ // Only return if all env vars are set
40
+ if (url && token && org && bucket) {
41
+ return { url, token, org, bucket };
42
+ }
43
+ return null;
44
+ }
45
+ overrideWithEnv(config) {
46
+ return {
47
+ url: process.env.INFLUX_URL || config.url,
48
+ token: process.env.INFLUX_TOKEN || config.token,
49
+ org: process.env.INFLUX_ORG || config.org,
50
+ bucket: process.env.INFLUX_BUCKET || config.bucket,
51
+ };
14
52
  }
15
53
  static getInstance(configPath) {
16
54
  if (!Config.instance) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AASxB,MAAa,MAAM;IAIjB,YAAoB,aAAqB,cAAc;QACrD,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,UAAmB;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AApBD,wBAoBC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AASxB,MAAa,MAAM;IAIjB,YAAoB,UAAmB;QACrC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAEO,UAAU,CAAC,UAAmB;QACpC,mCAAmC;QACnC,MAAM,QAAQ,GAAG,UAAU,IAAI,cAAc,CAAC;QAC9C,MAAM,QAAQ,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,MAAoB,CAAC;QAEzB,IAAI,YAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5D,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,mDAAmD;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,4BAA4B,QAAQ,qCAAqC;oBACzE,mFAAmF,CACpF,CAAC;YACJ,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,oDAAoD;QACpD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAEO,WAAW;QACjB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACnC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAEzC,sCAAsC;QACtC,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAClC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;QACrC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,eAAe,CAAC,MAAoB;QAC1C,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,GAAG;YACzC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK;YAC/C,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC,GAAG;YACzC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,MAAM,CAAC,MAAM;SACnD,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,UAAmB;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AAlED,wBAkEC"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "k6-perf-reporter",
3
- "version": "1.3.0",
3
+ "version": "1.4.1",
4
4
  "description": "Reporting tool for k6 performance tests with InfluxDB 2 integration",
5
+ "license": "MIT",
5
6
  "main": "dist/index.js",
6
7
  "bin": {
7
8
  "k6-reporter": "dist/cli.js"
package/src/config.ts CHANGED
@@ -12,10 +12,56 @@ export class Config {
12
12
  private static instance: Config;
13
13
  private config: InfluxConfig;
14
14
 
15
- private constructor(configPath: string = ".config.json") {
16
- const fullPath = path.resolve(configPath);
17
- const data = JSON.parse(fs.readFileSync(fullPath, "utf-8"));
18
- this.config = data.influx;
15
+ private constructor(configPath?: string) {
16
+ this.config = this.loadConfig(configPath);
17
+ }
18
+
19
+ private loadConfig(configPath?: string): InfluxConfig {
20
+ // Try to load from JSON file first
21
+ const filePath = configPath || ".config.json";
22
+ const fullPath = path.resolve(filePath);
23
+ let config: InfluxConfig;
24
+
25
+ if (fs.existsSync(fullPath)) {
26
+ const data = JSON.parse(fs.readFileSync(fullPath, "utf-8"));
27
+ config = data.influx;
28
+ } else {
29
+ // If file doesn't exist, try to load from env vars
30
+ const envConfig = this.loadFromEnv();
31
+ if (!envConfig) {
32
+ throw new Error(
33
+ `Config file not found at ${fullPath} and no environment variables set. ` +
34
+ `Set INFLUX_URL, INFLUX_TOKEN, INFLUX_ORG, INFLUX_BUCKET or provide a config file.`
35
+ );
36
+ }
37
+ return envConfig;
38
+ }
39
+
40
+ // Override with environment variables if they exist
41
+ return this.overrideWithEnv(config);
42
+ }
43
+
44
+ private loadFromEnv(): InfluxConfig | null {
45
+ const url = process.env.INFLUX_URL;
46
+ const token = process.env.INFLUX_TOKEN;
47
+ const org = process.env.INFLUX_ORG;
48
+ const bucket = process.env.INFLUX_BUCKET;
49
+
50
+ // Only return if all env vars are set
51
+ if (url && token && org && bucket) {
52
+ return { url, token, org, bucket };
53
+ }
54
+
55
+ return null;
56
+ }
57
+
58
+ private overrideWithEnv(config: InfluxConfig): InfluxConfig {
59
+ return {
60
+ url: process.env.INFLUX_URL || config.url,
61
+ token: process.env.INFLUX_TOKEN || config.token,
62
+ org: process.env.INFLUX_ORG || config.org,
63
+ bucket: process.env.INFLUX_BUCKET || config.bucket,
64
+ };
19
65
  }
20
66
 
21
67
  static getInstance(configPath?: string): Config {
package/.config.json DELETED
@@ -1,8 +0,0 @@
1
- {
2
- "influx": {
3
- "url": "https://influx.cmn.monomarket.tech",
4
- "token": "JFP9pZu3Sp134rkCZ6gT7FtSBmQRWgl8VmVhFMHTXrbkhKQ3LrvrM4FXECR7Lr8MsDGWLIsU7IJFcjL_QHwvqA==",
5
- "org": "ced1cdfb28534a3e",
6
- "bucket": "jmeter"
7
- }
8
- }