@nsshunt/stsappframework 3.0.61 → 3.0.62

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,7 @@ 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"));
14
18
  /*
15
19
  Manual docker run command and setup -------------------------------------------------------
16
20
 
@@ -243,16 +247,94 @@ class InfluxDBManager {
243
247
  }
244
248
  this.#BoostrapInfluxDB();
245
249
  this.#queryApi = this.#client.getQueryApi(this.#org);
246
- this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns');
250
+ /* Defaults from the library as at 12/11/2023
251
+ // default RetryDelayStrategyOptions
252
+ export const DEFAULT_RetryDelayStrategyOptions = {
253
+ retryJitter: 200,
254
+ minRetryDelay: 5000,
255
+ maxRetryDelay: 125000,
256
+ exponentialBase: 5,
257
+ randomRetry: true,
258
+ }
259
+
260
+ // default writeOptions
261
+ export const DEFAULT_WriteOptions: WriteOptions = {
262
+ batchSize: 1000,
263
+ maxBatchBytes: 50_000_000, // default max batch size in the cloud
264
+ flushInterval: 60000,
265
+ writeFailed: function () {},
266
+ writeSuccess: function () {},
267
+ writeRetrySkipped: function () {},
268
+ maxRetries: 5,
269
+ maxRetryTime: 180_000,
270
+ maxBufferLines: 32_000,
271
+ // a copy of DEFAULT_RetryDelayStrategyOptions, so that DEFAULT_WriteOptions could be tree-shaken
272
+ retryJitter: 200,
273
+ minRetryDelay: 5000,
274
+ maxRetryDelay: 125000,
275
+ exponentialBase: 2,
276
+ gzipThreshold: 1000,
277
+ randomRetry: true,
278
+ }
279
+ */
280
+ const flushBatchSize = influxdb_client_1.DEFAULT_WriteOptions.batchSize;
281
+ const writeOptions = {
282
+ /* the maximum points/lines to send in a single batch to InfluxDB server */
283
+ batchSize: flushBatchSize + 1,
284
+ /* default tags to add to every point */
285
+ //defaultTags: {location: hostname},
286
+ /* maximum time in millis to keep points in an unflushed batch, 0 means don't periodically flush */
287
+ flushInterval: 0,
288
+ // max size of a batch in bytes
289
+ maxBatchBytes: 50000000,
290
+ // Retry Options
291
+ /* maximum size of the retry buffer - it contains items that could not be sent for the first time */
292
+ maxBufferLines: 30000,
293
+ /* 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 */
294
+ maxRetries: 5,
295
+ // max time (millis) that can be spent with retries
296
+ maxRetryTime: 180000,
297
+ // ... there are more write options that can be customized, see
298
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeoptions.html and
299
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeretryoptions.html
300
+ writeFailed(error, lines, attempt, expires) {
301
+ (0, debug_1.default)(`writeOptions:writeSuccess(): Error: [${error}], Attempt: [${attempt}], Expires: [${expires}], Lines: [${lines}]`.red);
302
+ },
303
+ writeSuccess(lines) {
304
+ (0, debug_1.default)(`writeOptions:writeSuccess(): Lines: [${lines}]`.green);
305
+ },
306
+ writeRetrySkipped(entry) {
307
+ (0, debug_1.default)(`writeOptions:writeSuccess(): Expires: [${entry.expires}], Lines: [${entry.lines}]`.magenta);
308
+ }
309
+ };
310
+ this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns', writeOptions);
247
311
  this.CreateInfluxDBManagerClient('service');
248
312
  this.CreateInfluxDBManagerClient('agent');
249
- const StartWriteClient = () => {
250
- this.#writeDataPointFlushTimeout = setTimeout(() => {
251
- this.#writeClient.flush();
252
- StartWriteClient();
253
- }, 1000).unref();
313
+ let attemptCount = 0;
314
+ const maxAttemptCount = 5;
315
+ const normalFlushDelay = 1000;
316
+ const retryFlushDelay = 2500;
317
+ const StartWriteClient = (delay) => {
318
+ this.#writeDataPointFlushTimeout = setTimeout(async () => {
319
+ try {
320
+ attemptCount++;
321
+ await this.#writeClient.flush();
322
+ attemptCount = 0;
323
+ StartWriteClient(normalFlushDelay);
324
+ }
325
+ catch (error) {
326
+ console.error(`InfluxDBManager:StartWriteClient(): Attempt: [${attemptCount}], Error: [${error}]`.red);
327
+ if (attemptCount === maxAttemptCount) {
328
+ console.error(`InfluxDBManager:StartWriteClient(): Max Attempts reached. Will no longer retry.`.red);
329
+ console.error(`InfluxDBManager:StartWriteClient(): InfluxDB data capture ended in permanent faiilure.`.red);
330
+ }
331
+ else {
332
+ StartWriteClient(retryFlushDelay);
333
+ }
334
+ }
335
+ }, delay).unref();
254
336
  };
255
- StartWriteClient();
337
+ StartWriteClient(normalFlushDelay);
256
338
  }
257
339
  #BoostrapInfluxDB = async () => {
258
340
  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.62",
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, Point, WriteApi, QueryApi, flux, 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,10 @@ 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
+
17
18
  import { CompareSTSInstrumentControllerPluginKey } from '@nsshunt/stspublisherserver'
18
19
  import _ from 'lodash'
20
+ import debug from 'debug'
19
21
 
20
22
  /*
21
23
  Manual docker run command and setup -------------------------------------------------------
@@ -261,20 +263,104 @@ export class InfluxDBManager
261
263
 
262
264
  this.#BoostrapInfluxDB();
263
265
 
264
- this.#queryApi = this.#client.getQueryApi(this.#org)
265
- this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns')
266
+ this.#queryApi = this.#client.getQueryApi(this.#org);
266
267
 
268
+ /* Defaults from the library as at 12/11/2023
269
+ // default RetryDelayStrategyOptions
270
+ export const DEFAULT_RetryDelayStrategyOptions = {
271
+ retryJitter: 200,
272
+ minRetryDelay: 5000,
273
+ maxRetryDelay: 125000,
274
+ exponentialBase: 5,
275
+ randomRetry: true,
276
+ }
277
+
278
+ // default writeOptions
279
+ export const DEFAULT_WriteOptions: WriteOptions = {
280
+ batchSize: 1000,
281
+ maxBatchBytes: 50_000_000, // default max batch size in the cloud
282
+ flushInterval: 60000,
283
+ writeFailed: function () {},
284
+ writeSuccess: function () {},
285
+ writeRetrySkipped: function () {},
286
+ maxRetries: 5,
287
+ maxRetryTime: 180_000,
288
+ maxBufferLines: 32_000,
289
+ // a copy of DEFAULT_RetryDelayStrategyOptions, so that DEFAULT_WriteOptions could be tree-shaken
290
+ retryJitter: 200,
291
+ minRetryDelay: 5000,
292
+ maxRetryDelay: 125000,
293
+ exponentialBase: 2,
294
+ gzipThreshold: 1000,
295
+ randomRetry: true,
296
+ }
297
+ */
298
+
299
+ const flushBatchSize = DEFAULT_WriteOptions.batchSize;
300
+
301
+ const writeOptions: Partial<WriteOptions> = {
302
+ /* the maximum points/lines to send in a single batch to InfluxDB server */
303
+ batchSize: flushBatchSize + 1, // don't let automatically flush data
304
+ /* default tags to add to every point */
305
+ //defaultTags: {location: hostname},
306
+ /* maximum time in millis to keep points in an unflushed batch, 0 means don't periodically flush */
307
+ flushInterval: 0,
308
+ // max size of a batch in bytes
309
+ maxBatchBytes: 50_000_000, // default max batch size in the cloud
310
+
311
+ // Retry Options
312
+
313
+ /* maximum size of the retry buffer - it contains items that could not be sent for the first time */
314
+ maxBufferLines: 30000,
315
+ /* 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 */
316
+ maxRetries: 5, // do not retry writes
317
+ // max time (millis) that can be spent with retries
318
+ maxRetryTime: 180_000,
319
+
320
+ // ... there are more write options that can be customized, see
321
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeoptions.html and
322
+ // https://influxdata.github.io/influxdb-client-js/influxdb-client.writeretryoptions.html
323
+ writeFailed(error, lines, attempt, expires) {
324
+ debug(`writeOptions:writeSuccess(): Error: [${error}], Attempt: [${attempt}], Expires: [${expires}], Lines: [${lines}]`.red);
325
+ },
326
+ writeSuccess(lines) {
327
+ debug(`writeOptions:writeSuccess(): Lines: [${lines}]`.green);
328
+ },
329
+ writeRetrySkipped(entry) {
330
+ debug(`writeOptions:writeSuccess(): Expires: [${entry.expires}], Lines: [${entry.lines}]`.magenta);
331
+ }
332
+ }
333
+
334
+ this.#writeClient = this.#client.getWriteApi(this.#org, this.#bucket, 'ns', writeOptions);
335
+
267
336
  this.CreateInfluxDBManagerClient('service');
268
337
  this.CreateInfluxDBManagerClient('agent');
269
338
 
270
- const StartWriteClient = () => {
271
- this.#writeDataPointFlushTimeout = setTimeout(() => {
272
- this.#writeClient.flush()
273
- StartWriteClient();
274
- }, 1000).unref();
339
+ let attemptCount = 0;
340
+ const maxAttemptCount = 5;
341
+ const normalFlushDelay = 1000;
342
+ const retryFlushDelay = 2500;
343
+
344
+ const StartWriteClient = (delay: number) => {
345
+ this.#writeDataPointFlushTimeout = setTimeout(async () => {
346
+ try {
347
+ attemptCount++;
348
+ await this.#writeClient.flush();
349
+ attemptCount = 0;
350
+ StartWriteClient(normalFlushDelay);
351
+ } catch (error) {
352
+ console.error(`InfluxDBManager:StartWriteClient(): Attempt: [${attemptCount}], Error: [${error}]`.red)
353
+ if (attemptCount === maxAttemptCount) {
354
+ console.error(`InfluxDBManager:StartWriteClient(): Max Attempts reached. Will no longer retry.`.red);
355
+ console.error(`InfluxDBManager:StartWriteClient(): InfluxDB data capture ended in permanent faiilure.`.red);
356
+ } else {
357
+ StartWriteClient(retryFlushDelay);
358
+ }
359
+ }
360
+ }, delay).unref();
275
361
  }
276
362
 
277
- StartWriteClient();
363
+ StartWriteClient(normalFlushDelay);
278
364
  }
279
365
 
280
366
  #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;AA2L7E,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"}