From 3cb30b3b115f73a9b04096f6f79208b9b046e9fa Mon Sep 17 00:00:00 2001 From: Sandeep Chaturvedi Date: Tue, 4 Oct 2022 14:52:25 -0600 Subject: [PATCH 1/2] Added ability to create custom logging noisefilters --- package.json | 2 +- src/cli/logging/logs-list.ts | 2 +- src/cli/logging/logs-tail.ts | 12 +++++-- src/utils/Config.ts | 52 ++++++++++++++++++++++++++++ test/client_cli/en/logs-list.test.js | 2 +- test/client_cli/en/logs-tail.test.js | 12 ++++--- 6 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 src/utils/Config.ts diff --git a/package.json b/package.json index 035f6a30..2e0f8371 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ }, "main": "esm/app.js", "scripts": { - "test": "npx tsc && node --experimental-vm-modules node_modules/jest/bin/jest.js", + "test": "npm run build && node --experimental-vm-modules node_modules/jest/bin/jest.js", "test:list": "node --experimental-vm-modules node_modules/jest/bin/jest.js --listTests", "test:e2e": "node --experimental-vm-modules node_modules/jest/bin/jest.js --runInBand e2e", "test:e2e:list": "node --experimental-vm-modules node_modules/jest/bin/jest.js --listTests e2e", diff --git a/src/cli/logging/logs-list.ts b/src/cli/logging/logs-list.ts index a8196a9c..f5309654 100644 --- a/src/cli/logging/logs-list.ts +++ b/src/cli/logging/logs-list.ts @@ -11,7 +11,7 @@ const { provisionCreds, getLogSources } = Log; const { getConnectionProfile, saveConnectionProfile } = ConnectionProfile; const { getTokens } = Authenticate; -const program = new Command('frodo journey list'); +const program = new Command('frodo logs list'); program .description('List available ID Cloud log sources.') .helpOption('-h, --help', 'Help') diff --git a/src/cli/logging/logs-tail.ts b/src/cli/logging/logs-tail.ts index 6bd36f2f..af0b3680 100644 --- a/src/cli/logging/logs-tail.ts +++ b/src/cli/logging/logs-tail.ts @@ -6,12 +6,13 @@ import { state, } from '@rockcarver/frodo-lib'; import * as common from '../cmd_common.js'; +import * as config from '../../utils/Config.js'; const { provisionCreds, tailLogs, resolveLevel } = Log; const { getConnectionProfile, saveConnectionProfile } = ConnectionProfile; const { getTokens } = Authenticate; -const program = new Command('frodo journey tail'); +const program = new Command('frodo logs tail'); program .description('Tail Identity Cloud logs.') .helpOption('-h, --help', 'Help') @@ -33,6 +34,12 @@ Following values are possible (values on the same line are equivalent): \ .addOption( new Option('-t, --transaction-id ', 'Filter by transactionId') ) + .addOption( + new Option('-d, --defaults', 'Use default logging noise filters').default( + false, + `Use custom logging noise filters defined in ${config.getConfigPath()}/${config.FRODO_LOG_NOISEFILTER_FILENAME}` + ) + ) .action(async (host, user, password, options, command) => { let credsFromParameters = true; state.default.session.setTenant(host); @@ -78,7 +85,8 @@ Following values are possible (values on the same line are equivalent): \ command.opts().sources, resolveLevel(command.opts().level), command.opts().transactionId, - null + null, + config.getNoiseFilters(options.defaults) ); }); diff --git a/src/utils/Config.ts b/src/utils/Config.ts new file mode 100644 index 00000000..ef17e04e --- /dev/null +++ b/src/utils/Config.ts @@ -0,0 +1,52 @@ +import fs from 'fs'; +import os from 'os'; +import { Log } from '@rockcarver/frodo-lib'; + +import { printMessage } from './Console'; + +const { defaultNoiseFilter } = Log; + +export const FRODO_CONFIG_PATH_KEY = 'FRODO_CONFIG_PATH'; +export const FRODO_LOG_NOISEFILTER_FILENAME = 'LoggingNoiseFilter.json'; + +export function getConfigPath(): string { + return process.env[FRODO_CONFIG_PATH_KEY] || `${os.homedir()}/.frodo`; +} + +function getCustomNoiseFilters(): Array { + const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`; + let noiseFilter = []; + try { + const data = fs.readFileSync(filename, 'utf8'); + noiseFilter = JSON.parse(data); + } catch (e) { + printMessage(`Error reading ${filename} (${e.message})`, 'error'); + } + return noiseFilter; +} + +export function getNoiseFilters(defaults: boolean): Array { + const filename = `${getConfigPath()}/${FRODO_LOG_NOISEFILTER_FILENAME}`; + if(defaults) { + printMessage(`Using default logging noise filters.`, 'info'); + return defaultNoiseFilter(); + } + let noiseFilter = getCustomNoiseFilters(); + if (noiseFilter.length > 0) { + printMessage(`Using custom noise filters from ${filename}`, 'info'); + } else { + printMessage(`No custom noise filters defined. Using defaults.`, 'info'); + noiseFilter = defaultNoiseFilter(); + try { + fs.writeFileSync(filename, JSON.stringify(noiseFilter, null, 2)); + printMessage( + `The default filters were saved in ${filename}. You can change the filters as needed.`, + 'info' + ); + } catch (e) { + printMessage(`Error creating noise filter configuration with default values.`, 'error'); + } + } + return noiseFilter; +} + diff --git a/test/client_cli/en/logs-list.test.js b/test/client_cli/en/logs-list.test.js index f2505f41..d4be6c64 100644 --- a/test/client_cli/en/logs-list.test.js +++ b/test/client_cli/en/logs-list.test.js @@ -15,7 +15,7 @@ const { stdout } = await exec(CMD); test("CLI help interface for 'logs list' Usage should be expected english", async () => { // Arrange const expected = ` - Usage: frodo journey list [options] [user] [password] + Usage: frodo logs list [options] [user] [password] `.trim(); // Act const testLine = stdout diff --git a/test/client_cli/en/logs-tail.test.js b/test/client_cli/en/logs-tail.test.js index 97dbb4a8..52342d62 100644 --- a/test/client_cli/en/logs-tail.test.js +++ b/test/client_cli/en/logs-tail.test.js @@ -15,7 +15,7 @@ const { stdout } = await exec(CMD); test("CLI help interface for 'logs tail' Usage should be expected english", async () => { // Arrange const expected = ` - Usage: frodo journey tail [options] [user] [password] + Usage: frodo logs tail [options] [user] [password] `.trim(); // Act const testLine = stdout @@ -113,9 +113,9 @@ test("CLI help interface 'list option -k, --insecure' description should be expe test("CLI help interface 'list option -c, --sources ' description should be expected english multiline", async () => { // Arrange - const expected = collapseWhitespace(` - -c, --sources Comma separated list of log sources (default: Log everything) -l, --level Set log level filter. You can specify the level as a number or a string. Following values are possible (values on the same line are equivalent): 0, SEVERE, FATAL, or ERROR 1, WARNING, WARN or CONFIG 2, INFO or INFORMATION 3, DEBUG, FINE, FINER or FINEST 4 or ALL (default: SEVERE,ERROR,FATAL) -t, --transaction-id Filter by transactionId - `); + // const expected = collapseWhitespace(` + // -c, --sources Comma separated list of log sources (default: Log everything) -l, --level Set log level filter. You can specify the level as a number or a string. Following values are possible (values on the same line are equivalent): 0, SEVERE, FATAL, or ERROR 1, WARNING, WARN or CONFIG 2, INFO or INFORMATION 3, DEBUG, FINE, FINER or FINEST 4 or ALL (default: SEVERE,ERROR,FATAL) -t, --transaction-id Filter by transactionId -d, --defaults Use default logging noise filters (default: Use custom logging noise filters defined in (\w|\/|\.)+/gm) + // `); // Act const testLine = collapseWhitespace( crudeMultilineTakeUntil( @@ -126,5 +126,7 @@ test("CLI help interface 'list option -c, --sources ' description shoul ); // Assert - expect(testLine).toBe(expected); + expect(testLine).toMatch( + /-c, --sources Comma separated list of log sources \(default: Log everything\) -l, --level Set log level filter\. You can specify the level as a number or a string\. Following values are possible \(values on the same line are equivalent\): 0, SEVERE, FATAL, or ERROR 1, WARNING, WARN or CONFIG 2, INFO or INFORMATION 3, DEBUG, FINE, FINER or FINEST 4 or ALL \(default: SEVERE,ERROR,FATAL\) -t, --transaction-id Filter by transactionId -d, --defaults Use default logging noise filters \(default: Use custom logging noise filters defined in (\w|\/|\.)+\)/gm + ); }); From f82dfc6e48af0f95e4d15750aabaeb7c53301e58 Mon Sep 17 00:00:00 2001 From: Sandeep Chaturvedi Date: Tue, 4 Oct 2022 15:07:29 -0600 Subject: [PATCH 2/2] Update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 244feca4..1e792d16 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- \#70: Added ability to create custom logging noise filters + ## [0.15.0] - 2022-10-04 ### Added