From 510dd570bd8a280a77dc26911c11dd7d7f75f280 Mon Sep 17 00:00:00 2001 From: Matthew Labrum Date: Thu, 18 Jun 2020 17:15:09 +0930 Subject: [PATCH 1/2] Add support for handling the remote configuration ( MinimumLevelAccepted ) --- example/example_async.js | 34 ++++++++++++++++++++++++++++++++++ index.d.ts | 5 +++++ seq_logger.js | 12 +++++++++++- 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 example/example_async.js diff --git a/example/example_async.js b/example/example_async.js new file mode 100644 index 0000000..5b84453 --- /dev/null +++ b/example/example_async.js @@ -0,0 +1,34 @@ +"use strict"; + +let process = require('process'); +let SeqLogger = require('../seq_logger'); + +let seq = new SeqLogger({ serverUrl: 'http://localhost:5341', onRemoteConfigChange: (config) => { + console.log(config); +}}); + +sayHello(100) + .then(() => seq.close()); + +async function sayHello(times) { + n = n + 1; + for(let n = 0; n <= times; n++){ + await new Promise((accept) => setTimeout(accept, 1 * 1000)); // Waits 1 second before each round + + console.log('Round ', n); + seq.emit({ + timestamp: new Date(), + level: 'Information', + messageTemplate: 'Hello for the {n}th time, {user}!', + properties: { + user: process.env.USERNAME, + n: n + } + }); + + if (n % 5 == 0) { // Flush every 5 events + seq.flush(); + } + } +} + diff --git a/index.d.ts b/index.d.ts index 1626415..cdc487f 100644 --- a/index.d.ts +++ b/index.d.ts @@ -6,10 +6,15 @@ export interface SeqLoggerConfig { batchSizeLimit?: number; requestTimeout?: number; onError: (e: Error) => void; + onRemoteConfigChange?: (remoteConfig: RemoteConfig) => void; } export type SeqLogLevel = 'Verbose' | 'Debug' | 'Information' | 'Warning' | 'Error' | 'Fatal'; +export interface RemoteConfig{ + MinimumLevelAccepted: SeqLogLevel | null +} + export interface SeqEvent { timestamp: Date; level?: SeqLogLevel; diff --git a/seq_logger.js b/seq_logger.js index f0b4025..2c53b73 100644 --- a/seq_logger.js +++ b/seq_logger.js @@ -45,6 +45,8 @@ class SeqLogger { this._timer = null; this._closed = false; this._activeShipper = null; + this._onRemoteConfigChange = cfg.onRemoteConfigChange || null; + this._lastRemoteConfig = null; } // Flush events queued at the time of the call, and wait for pending writes to complete @@ -269,7 +271,15 @@ class SeqLogger { httpErr = 'HTTP log shipping failed: ' + res.statusCode; } - res.on('data', () => {}); + res.on('data', (buffer) => { + let dataRaw = buffer.toString(); + + if(this._onRemoteConfigChange && this._lastRemoteConfig !== dataRaw){ + this._lastRemoteConfig = dataRaw; + this._onRemoteConfigChange(JSON.parse(dataRaw)); + } + }); + res.on('error', e => { reject(e); }); From 2efa5df546644e49c24ddb5d8613fd0aa64e5b13 Mon Sep 17 00:00:00 2001 From: Matt Labrum Date: Thu, 3 Dec 2020 13:54:06 +1030 Subject: [PATCH 2/2] Remove unneeded variable --- example/example_async.js | 1 - 1 file changed, 1 deletion(-) diff --git a/example/example_async.js b/example/example_async.js index 5b84453..d55edab 100644 --- a/example/example_async.js +++ b/example/example_async.js @@ -11,7 +11,6 @@ sayHello(100) .then(() => seq.close()); async function sayHello(times) { - n = n + 1; for(let n = 0; n <= times; n++){ await new Promise((accept) => setTimeout(accept, 1 * 1000)); // Waits 1 second before each round