@nsshunt/stsappframework 3.0.61 → 3.0.63

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.
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.InfluxDBManager = void 0;
4
7
  /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
@@ -11,6 +14,8 @@ const goptions = (0, stsconfig_1.$Options)();
11
14
  const influxDBManagerService_1 = require("./influxDBManagerService");
12
15
  const influxDBManagerAgent_1 = require("./influxDBManagerAgent");
13
16
  const influxdb_client_apis_1 = require("@influxdata/influxdb-client-apis");
17
+ const debug_1 = __importDefault(require("debug"));
18
+ const debug = (0, debug_1.default)(`proc:${process.pid}`);
14
19
  /*
15
20
  Manual docker run command and setup -------------------------------------------------------
16
21
 
@@ -243,16 +248,94 @@ class InfluxDBManager {
243
248
  }
244
249
  this.#BoostrapInfluxDB();
245
250
  this.#queryApi = this.#client.getQueryApi(this.#org);
246
- this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns');
251
+ /* Defaults from the library as at 12/11/2023
252
+ // default RetryDelayStrategyOptions
253
+ export const DEFAULT_RetryDelayStrategyOptions = {
254
+ retryJitter: 200,
255
+ minRetryDelay: 5000,
256
+ maxRetryDelay: 125000,
257
+ exponentialBase: 5,
258
+ randomRetry: true,
259
+ }
260
+
261
+ // default writeOptions
262
+ export const DEFAULT_WriteOptions: WriteOptions = {
263
+ batchSize: 1000,
264
+ maxBatchBytes: 50_000_000, // default max batch size in the cloud
265
+ flushInterval: 60000,
266
+ writeFailed: function () {},
267
+ writeSuccess: function () {},
268
+ writeRetrySkipped: function () {},
269
+ maxRetries: 5,
270
+ maxRetryTime: 180_000,
271
+ maxBufferLines: 32_000,
272
+ // a copy of DEFAULT_RetryDelayStrategyOptions, so that DEFAULT_WriteOptions could be tree-shaken
273
+ retryJitter: 200,
274
+ minRetryDelay: 5000,
275
+ maxRetryDelay: 125000,
276
+ exponentialBase: 2,
277
+ gzipThreshold: 1000,
278
+ randomRetry: true,
279
+ }
280
+ */
281
+ const flushBatchSize = influxdb_client_1.DEFAULT_WriteOptions.batchSize;
282
+ const writeOptions = {
283
+ /* the maximum points/lines to send in a single batch to InfluxDB server */
284
+ batchSize: flushBatchSize + 1,
285
+ /* default tags to add to every point */
286
+ //defaultTags: {location: hostname},
287
+ /* maximum time in millis to keep points in an unflushed batch, 0 means don't periodically flush */
288
+ flushInterval: 0,
289
+ // max size of a batch in bytes
290
+ maxBatchBytes: 50000000,
291
+ // Retry Options
292
+ /* maximum size of the retry buffer - it contains items that could not be sent for the first time */
293
+ maxBufferLines: 30000,
294
+ /* the count of internally-scheduled retries upon write failure, the delays between write attempts follow an exponential backoff strategy if there is no Retry-After HTTP header */
295
+ maxRetries: 5,
296
+ // max time (millis) that can be spent with retries
297
+ maxRetryTime: 180000,
298
+ // ... there are more write options that can be customized, see
299
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeoptions.html and
300
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeretryoptions.html
301
+ writeFailed(error, lines, attempt, expires) {
302
+ debug(`writeOptions:writeSuccess(): Error: [${error}], Attempt: [${attempt}], Expires: [${expires}], Lines: [${lines}]`.red);
303
+ },
304
+ writeSuccess(lines) {
305
+ debug(`writeOptions:writeSuccess(): Lines: [${lines}]`.green);
306
+ },
307
+ writeRetrySkipped(entry) {
308
+ debug(`writeOptions:writeSuccess(): Expires: [${entry.expires}], Lines: [${entry.lines}]`.magenta);
309
+ }
310
+ };
311
+ this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns', writeOptions);
247
312
  this.CreateInfluxDBManagerClient('service');
248
313
  this.CreateInfluxDBManagerClient('agent');
249
- const StartWriteClient = () => {
250
- this.#writeDataPointFlushTimeout = setTimeout(() => {
251
- this.#writeClient.flush();
252
- StartWriteClient();
253
- }, 1000).unref();
314
+ let attemptCount = 0;
315
+ const maxAttemptCount = 5;
316
+ const normalFlushDelay = 1000;
317
+ const retryFlushDelay = 2500;
318
+ const StartWriteClient = (delay) => {
319
+ this.#writeDataPointFlushTimeout = setTimeout(async () => {
320
+ try {
321
+ attemptCount++;
322
+ await this.#writeClient.flush();
323
+ attemptCount = 0;
324
+ StartWriteClient(normalFlushDelay);
325
+ }
326
+ catch (error) {
327
+ console.error(`InfluxDBManager:StartWriteClient(): Attempt: [${attemptCount}], Error: [${error}]`.red);
328
+ if (attemptCount === maxAttemptCount) {
329
+ console.error(`InfluxDBManager:StartWriteClient(): Max Attempts reached. Will no longer retry.`.red);
330
+ console.error(`InfluxDBManager:StartWriteClient(): InfluxDB data capture ended in permanent faiilure.`.red);
331
+ }
332
+ else {
333
+ StartWriteClient(retryFlushDelay);
334
+ }
335
+ }
336
+ }, delay).unref();
254
337
  };
255
- StartWriteClient();
338
+ StartWriteClient(normalFlushDelay);
256
339
  }
257
340
  #BoostrapInfluxDB = async () => {
258
341
  const tasksAPI = new influxdb_client_apis_1.TasksAPI(this.#client);
@@ -1 +1 @@
1
- {"version":3,"file":"influxDBManager.js","sourceRoot":"","sources":["../../src/influxdb/influxDBManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"influxDBManager.js","sourceRoot":"","sources":["../../src/influxdb/influxDBManager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsshunt/stsappframework",
3
- "version": "3.0.61",
3
+ "version": "3.0.63",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "./types/index.d.ts",
@@ -1,5 +1,5 @@
1
1
  /* eslint @typescript-eslint/no-explicit-any: 0, @typescript-eslint/no-unused-vars: 0 */ // --> OFF
2
- import { InfluxDB, Point, WriteApi, QueryApi, flux } from '@influxdata/influxdb-client'
2
+ import { InfluxDB, WriteApi, QueryApi, DEFAULT_WriteOptions, WriteOptions } from '@influxdata/influxdb-client'
3
3
  // Use below for production https mode - needs to be config item
4
4
  //import { Agent } from 'https'
5
5
  import { Agent } from 'http'
@@ -14,8 +14,9 @@ import { InfluxDBManagerAgent } from './influxDBManagerAgent'
14
14
  import { IInfluxDBManagerOptions, InstrumentPayload } from './../commonTypes'
15
15
 
16
16
  import { TasksAPI, Tasks, Task } from '@influxdata/influxdb-client-apis'
17
- import { CompareSTSInstrumentControllerPluginKey } from '@nsshunt/stspublisherserver'
18
- import _ from 'lodash'
17
+
18
+ import debugModule from 'debug'
19
+ const debug = debugModule(`proc:${process.pid}`);
19
20
 
20
21
  /*
21
22
  Manual docker run command and setup -------------------------------------------------------
@@ -261,20 +262,104 @@ export class InfluxDBManager
261
262
 
262
263
  this.#BoostrapInfluxDB();
263
264
 
264
- this.#queryApi = this.#client.getQueryApi(this.#org)
265
- this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns')
265
+ this.#queryApi = this.#client.getQueryApi(this.#org);
266
266
 
267
+ /* Defaults from the library as at 12/11/2023
268
+ // default RetryDelayStrategyOptions
269
+ export const DEFAULT_RetryDelayStrategyOptions = {
270
+ retryJitter: 200,
271
+ minRetryDelay: 5000,
272
+ maxRetryDelay: 125000,
273
+ exponentialBase: 5,
274
+ randomRetry: true,
275
+ }
276
+
277
+ // default writeOptions
278
+ export const DEFAULT_WriteOptions: WriteOptions = {
279
+ batchSize: 1000,
280
+ maxBatchBytes: 50_000_000, // default max batch size in the cloud
281
+ flushInterval: 60000,
282
+ writeFailed: function () {},
283
+ writeSuccess: function () {},
284
+ writeRetrySkipped: function () {},
285
+ maxRetries: 5,
286
+ maxRetryTime: 180_000,
287
+ maxBufferLines: 32_000,
288
+ // a copy of DEFAULT_RetryDelayStrategyOptions, so that DEFAULT_WriteOptions could be tree-shaken
289
+ retryJitter: 200,
290
+ minRetryDelay: 5000,
291
+ maxRetryDelay: 125000,
292
+ exponentialBase: 2,
293
+ gzipThreshold: 1000,
294
+ randomRetry: true,
295
+ }
296
+ */
297
+
298
+ const flushBatchSize = DEFAULT_WriteOptions.batchSize;
299
+
300
+ const writeOptions: Partial<WriteOptions> = {
301
+ /* the maximum points/lines to send in a single batch to InfluxDB server */
302
+ batchSize: flushBatchSize + 1, // don't let automatically flush data
303
+ /* default tags to add to every point */
304
+ //defaultTags: {location: hostname},
305
+ /* maximum time in millis to keep points in an unflushed batch, 0 means don't periodically flush */
306
+ flushInterval: 0,
307
+ // max size of a batch in bytes
308
+ maxBatchBytes: 50_000_000, // default max batch size in the cloud
309
+
310
+ // Retry Options
311
+
312
+ /* maximum size of the retry buffer - it contains items that could not be sent for the first time */
313
+ maxBufferLines: 30000,
314
+ /* the count of internally-scheduled retries upon write failure, the delays between write attempts follow an exponential backoff strategy if there is no Retry-After HTTP header */
315
+ maxRetries: 5, // do not retry writes
316
+ // max time (millis) that can be spent with retries
317
+ maxRetryTime: 180_000,
318
+
319
+ // ... there are more write options that can be customized, see
320
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeoptions.html and
321
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeretryoptions.html
322
+ writeFailed(error, lines, attempt, expires) {
323
+ debug(`writeOptions:writeSuccess(): Error: [${error}], Attempt: [${attempt}], Expires: [${expires}], Lines: [${lines}]`.red);
324
+ },
325
+ writeSuccess(lines) {
326
+ debug(`writeOptions:writeSuccess(): Lines: [${lines}]`.green);
327
+ },
328
+ writeRetrySkipped(entry) {
329
+ debug(`writeOptions:writeSuccess(): Expires: [${entry.expires}], Lines: [${entry.lines}]`.magenta);
330
+ }
331
+ }
332
+
333
+ this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns', writeOptions);
334
+
267
335
  this.CreateInfluxDBManagerClient('service');
268
336
  this.CreateInfluxDBManagerClient('agent');
269
337
 
270
- const StartWriteClient = () => {
271
- this.#writeDataPointFlushTimeout = setTimeout(() => {
272
- this.#writeClient.flush()
273
- StartWriteClient();
274
- }, 1000).unref();
338
+ let attemptCount = 0;
339
+ const maxAttemptCount = 5;
340
+ const normalFlushDelay = 1000;
341
+ const retryFlushDelay = 2500;
342
+
343
+ const StartWriteClient = (delay: number) => {
344
+ this.#writeDataPointFlushTimeout = setTimeout(async () => {
345
+ try {
346
+ attemptCount++;
347
+ await this.#writeClient.flush();
348
+ attemptCount = 0;
349
+ StartWriteClient(normalFlushDelay);
350
+ } catch (error) {
351
+ console.error(`InfluxDBManager:StartWriteClient(): Attempt: [${attemptCount}], Error: [${error}]`.red)
352
+ if (attemptCount === maxAttemptCount) {
353
+ console.error(`InfluxDBManager:StartWriteClient(): Max Attempts reached. Will no longer retry.`.red);
354
+ console.error(`InfluxDBManager:StartWriteClient(): InfluxDB data capture ended in permanent faiilure.`.red);
355
+ } else {
356
+ StartWriteClient(retryFlushDelay);
357
+ }
358
+ }
359
+ }, delay).unref();
275
360
  }
276
361
 
277
- StartWriteClient();
362
+ StartWriteClient(normalFlushDelay);
278
363
  }
279
364
 
280
365
  #BoostrapInfluxDB = async(): Promise<void> => {
@@ -1 +1 @@
1
- {"version":3,"file":"influxDBManager.d.ts","sourceRoot":"","sources":["../../src/influxdb/influxDBManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAI9C,OAAO,EAAE,sBAAsB,EAAC,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAA2B,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAyL7E,qBAAa,eAAe;;;IAmGxB,2BAA2B,CAAC,SAAS,EAAE,MAAM;IAa7C,IAAI,cAAc,IAAI,sBAAsB,CAE3C;IAED,IAAI,YAAY,IAAI,oBAAoB,CAEvC;IAED,KAAK,sBAEJ;IAED,SAAS,sBAuBR;IAQD,sBAAsB,aAAc,GAAG,EAAE,SAUxC;IAGD,kBAAkB,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU;IAaxE,cAAc,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;CAe/E"}
1
+ {"version":3,"file":"influxDBManager.d.ts","sourceRoot":"","sources":["../../src/influxdb/influxDBManager.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAI9C,OAAO,EAAE,sBAAsB,EAAC,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAA2B,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AA0L7E,qBAAa,eAAe;;;IAuLxB,2BAA2B,CAAC,SAAS,EAAE,MAAM;IAa7C,IAAI,cAAc,IAAI,sBAAsB,CAE3C;IAED,IAAI,YAAY,IAAI,oBAAoB,CAEvC;IAED,KAAK,sBAEJ;IAED,SAAS,sBAuBR;IAQD,sBAAsB,aAAc,GAAG,EAAE,SAUxC;IAGD,kBAAkB,CAAC,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU;IAaxE,cAAc,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;CAe/E"}