From 35dfe2e807b7a1f80d18801262efc077333510e7 Mon Sep 17 00:00:00 2001 From: Samuel Poulton Date: Tue, 15 Aug 2023 08:32:10 -0600 Subject: [PATCH 1/2] Add eventCode to event input --- .../integration-sdk-core/src/types/logger.ts | 4 +++ .../src/logger/__tests__/index.test.ts | 9 +++++++ .../src/logger/index.ts | 27 ++++++++++++++----- 3 files changed, 34 insertions(+), 6 deletions(-) diff --git a/packages/integration-sdk-core/src/types/logger.ts b/packages/integration-sdk-core/src/types/logger.ts index af355537b..5ec77aa91 100644 --- a/packages/integration-sdk-core/src/types/logger.ts +++ b/packages/integration-sdk-core/src/types/logger.ts @@ -40,6 +40,10 @@ export type IntegrationEvent = { export type PublishEventInput = { name: string; description: string; + /** + * Allows the event to be identified via a code. + */ + eventCode?: string; level?: PublishEventLevel; }; diff --git a/packages/integration-sdk-runtime/src/logger/__tests__/index.test.ts b/packages/integration-sdk-runtime/src/logger/__tests__/index.test.ts index bb43a8d69..034e5d2b8 100644 --- a/packages/integration-sdk-runtime/src/logger/__tests__/index.test.ts +++ b/packages/integration-sdk-runtime/src/logger/__tests__/index.test.ts @@ -368,6 +368,7 @@ describe('step event publishing', () => { expect(onEmitEvent).toHaveBeenNthCalledWith(8, { name: 'step_failure', level: PublishEventLevel.Error, + eventCode: expect.toBeString(), description: expect.stringMatching( new RegExp( `Step "Mochi" failed to complete due to error. \\(errorCode="${error.code}", reason="ripperoni"\\)$`, @@ -423,6 +424,7 @@ describe('provider auth error details', () => { expect(onEmitEvent).toHaveBeenCalledWith({ name: 'step_failure', level: PublishEventLevel.Error, + eventCode: expect.toBeString(), description: expect.stringMatching( new RegExp( '^Step "Mochi" failed to complete due to error.' + @@ -439,6 +441,7 @@ describe('provider auth error details', () => { expect(onEmitEvent).toHaveBeenCalledWith({ name: 'validation_failure', level: PublishEventLevel.Error, + eventCode: expect.toBeString(), description: expect.stringMatching( new RegExp( '^Error occurred while validating integration configuration.' + @@ -503,6 +506,7 @@ describe('validation failure logging', () => { expect(onEmitEvent).toHaveBeenNthCalledWith(1, { name: 'validation_failure', level: PublishEventLevel.Error, + eventCode: expect.toBeString(), description: expect.stringMatching(expectedDescriptionRegex), }); @@ -535,6 +539,7 @@ describe('validation failure logging', () => { expect(onEmitEvent).toHaveBeenNthCalledWith(1, { name: 'validation_failure', level: PublishEventLevel.Error, + eventCode: expect.toBeString(), description: expect.stringMatching(expectedDescriptionRegex), }); @@ -731,6 +736,7 @@ describe('#publishEvent', () => { logger.publishWarnEvent({ name: IntegrationWarnEventName[key], description: 'the description', + eventCode: 'AWS-PER-ECS', }); expect(onEmitEvent).toHaveBeenCalledTimes(1); @@ -738,6 +744,7 @@ describe('#publishEvent', () => { name: IntegrationWarnEventName[key], level: PublishEventLevel.Warn, description: 'the description', + eventCode: 'AWS-PER-ECS', }); }, ); @@ -756,6 +763,7 @@ describe('#publishEvent', () => { logger.publishErrorEvent({ name: IntegrationErrorEventName[key], description: 'the description', + eventCode: 'AWS-PER-ECS', }); expect(onEmitEvent).toHaveBeenCalledTimes(1); @@ -764,6 +772,7 @@ describe('#publishEvent', () => { name: IntegrationErrorEventName[key], level: PublishEventLevel.Error, description: 'the description', + eventCode: 'AWS-PER-ECS', }); }, ); diff --git a/packages/integration-sdk-runtime/src/logger/index.ts b/packages/integration-sdk-runtime/src/logger/index.ts index d6e701f0c..d0a9c22ce 100644 --- a/packages/integration-sdk-runtime/src/logger/index.ts +++ b/packages/integration-sdk-runtime/src/logger/index.ts @@ -194,7 +194,7 @@ export class IntegrationLogger } /** - * Answers `true` when the err has been reported to the logger instance + * Answers `true` when the error has been reported to the logger instance * through these functions: * * * warn(err, ...) @@ -366,11 +366,17 @@ export class IntegrationLogger stepFailure(step: StepMetadata, err: Error) { const eventName = 'step_failure'; - const { errorId, description } = createErrorEventDescription( + const { errorId, errorCode, description } = createErrorEventDescription( err, `Step "${step.name}" failed to complete due to error.`, ); - this.handleFailure({ eventName, errorId, err, description }); + this.handleFailure({ + eventName, + errorId, + eventCode: errorCode, + err, + description, + }); } synchronizationUploadStart(job: SynchronizationJob) { @@ -399,20 +405,27 @@ export class IntegrationLogger validationFailure(err: Error) { const eventName = 'validation_failure'; - const { errorId, description } = createErrorEventDescription( + const { errorId, errorCode, description } = createErrorEventDescription( err, `Error occurred while validating integration configuration.`, ); - this.handleFailure({ eventName, errorId, err, description }); + this.handleFailure({ + eventName, + errorId, + eventCode: errorCode, + err, + description, + }); } private handleFailure(options: { eventName: 'validation_failure' | 'step_failure'; errorId: string; + eventCode: string; err: Error; description: string; }) { - const { eventName, errorId, err, description } = options; + const { eventName, errorId, eventCode, err, description } = options; // If there is a `code` property on the `Error`, we should include this // in our log. This is helpful for when we receive an HTTP response error @@ -429,6 +442,7 @@ export class IntegrationLogger this.publishEvent({ name: eventName, description, + eventCode, level: PublishEventLevel.Error, }); } @@ -529,6 +543,7 @@ export function createErrorEventDescription( return { errorId, + errorCode, description: `${message} (${errorDetails})`, }; } From 01cd8c2c52e690f6e34583e230d348db5fb78ba2 Mon Sep 17 00:00:00 2001 From: Samuel Poulton Date: Thu, 17 Aug 2023 15:50:31 -0600 Subject: [PATCH 2/2] v10.1.0 --- lerna.json | 2 +- packages/cli/package.json | 6 +++--- packages/integration-sdk-benchmark/package.json | 6 +++--- packages/integration-sdk-cli/package.json | 8 ++++---- packages/integration-sdk-core/package.json | 2 +- packages/integration-sdk-dev-tools/package.json | 6 +++--- packages/integration-sdk-entities/package.json | 2 +- packages/integration-sdk-http-client/package.json | 6 +++--- packages/integration-sdk-private-test-utils/package.json | 4 ++-- packages/integration-sdk-runtime/package.json | 6 +++--- packages/integration-sdk-testing/package.json | 8 ++++---- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/lerna.json b/lerna.json index 48e1004a3..b741e0c83 100644 --- a/lerna.json +++ b/lerna.json @@ -4,5 +4,5 @@ "packages/integration-sdk-*", "packages/cli" ], - "version": "10.0.0" + "version": "10.1.0" } diff --git a/packages/cli/package.json b/packages/cli/package.json index d073ecf40..fd80c3bcd 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/cli", - "version": "10.0.0", + "version": "10.1.0", "description": "The JupiterOne cli", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -24,8 +24,8 @@ "test": "jest" }, "dependencies": { - "@jupiterone/integration-sdk-core": "^10.0.0", - "@jupiterone/integration-sdk-runtime": "^10.0.0", + "@jupiterone/integration-sdk-core": "^10.1.0", + "@jupiterone/integration-sdk-runtime": "^10.1.0", "@lifeomic/attempt": "^3.0.3", "commander": "^5.0.0", "globby": "^11.0.1", diff --git a/packages/integration-sdk-benchmark/package.json b/packages/integration-sdk-benchmark/package.json index 3e2b728a4..3090a6fdb 100644 --- a/packages/integration-sdk-benchmark/package.json +++ b/packages/integration-sdk-benchmark/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-benchmark", - "version": "10.0.0", + "version": "10.1.0", "private": true, "description": "SDK benchmarking scripts", "main": "./src/index.js", @@ -15,8 +15,8 @@ "benchmark": "for file in ./src/benchmarks/*; do yarn prebenchmark && node $file; done" }, "dependencies": { - "@jupiterone/integration-sdk-core": "^10.0.0", - "@jupiterone/integration-sdk-runtime": "^10.0.0", + "@jupiterone/integration-sdk-core": "^10.1.0", + "@jupiterone/integration-sdk-runtime": "^10.1.0", "benchmark": "^2.1.4" } } diff --git a/packages/integration-sdk-cli/package.json b/packages/integration-sdk-cli/package.json index c7a43f141..601b01ea4 100644 --- a/packages/integration-sdk-cli/package.json +++ b/packages/integration-sdk-cli/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-cli", - "version": "10.0.0", + "version": "10.1.0", "description": "The SDK for developing JupiterOne integrations", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -25,8 +25,8 @@ }, "dependencies": { "@jupiterone/data-model": "^0.54.0", - "@jupiterone/integration-sdk-core": "^10.0.0", - "@jupiterone/integration-sdk-runtime": "^10.0.0", + "@jupiterone/integration-sdk-core": "^10.1.0", + "@jupiterone/integration-sdk-runtime": "^10.1.0", "chalk": "^4", "commander": "^9.4.0", "fs-extra": "^10.1.0", @@ -44,7 +44,7 @@ "vis": "^4.21.0-EOL" }, "devDependencies": { - "@jupiterone/integration-sdk-private-test-utils": "^10.0.0", + "@jupiterone/integration-sdk-private-test-utils": "^10.1.0", "@pollyjs/adapter-node-http": "^6.0.5", "@pollyjs/core": "^6.0.5", "@pollyjs/persister-fs": "^6.0.5", diff --git a/packages/integration-sdk-core/package.json b/packages/integration-sdk-core/package.json index fe83627f6..b568c3b09 100644 --- a/packages/integration-sdk-core/package.json +++ b/packages/integration-sdk-core/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-core", - "version": "10.0.0", + "version": "10.1.0", "description": "The SDK for developing JupiterOne integrations", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", diff --git a/packages/integration-sdk-dev-tools/package.json b/packages/integration-sdk-dev-tools/package.json index 0693184a5..d258fd234 100644 --- a/packages/integration-sdk-dev-tools/package.json +++ b/packages/integration-sdk-dev-tools/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-dev-tools", - "version": "10.0.0", + "version": "10.1.0", "description": "A collection of developer tools that will assist with building integrations.", "repository": "git@github.com:JupiterOne/sdk.git", "author": "JupiterOne ", @@ -15,8 +15,8 @@ "access": "public" }, "dependencies": { - "@jupiterone/integration-sdk-cli": "^10.0.0", - "@jupiterone/integration-sdk-testing": "^10.0.0", + "@jupiterone/integration-sdk-cli": "^10.1.0", + "@jupiterone/integration-sdk-testing": "^10.1.0", "@types/jest": "^29.5.3", "@types/node": "^18", "@typescript-eslint/eslint-plugin": "^6.2.1", diff --git a/packages/integration-sdk-entities/package.json b/packages/integration-sdk-entities/package.json index f85fc7231..805db05f7 100644 --- a/packages/integration-sdk-entities/package.json +++ b/packages/integration-sdk-entities/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-entities", - "version": "10.0.0", + "version": "10.1.0", "description": "Generated types for the JupiterOne data-model", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", diff --git a/packages/integration-sdk-http-client/package.json b/packages/integration-sdk-http-client/package.json index 39b22da09..1d07841df 100644 --- a/packages/integration-sdk-http-client/package.json +++ b/packages/integration-sdk-http-client/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-http-client", - "version": "10.0.0", + "version": "10.1.0", "description": "The HTTP client for use in JupiterOne integrations", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -26,8 +26,8 @@ "node-fetch": "^2.6.0" }, "devDependencies": { - "@jupiterone/integration-sdk-dev-tools": "^10.0.0", - "@jupiterone/integration-sdk-private-test-utils": "^10.0.0", + "@jupiterone/integration-sdk-dev-tools": "^10.1.0", + "@jupiterone/integration-sdk-private-test-utils": "^10.1.0", "fetch-mock-jest": "^1.5.1" }, "bugs": { diff --git a/packages/integration-sdk-private-test-utils/package.json b/packages/integration-sdk-private-test-utils/package.json index 1dba560bd..dadee6bc5 100644 --- a/packages/integration-sdk-private-test-utils/package.json +++ b/packages/integration-sdk-private-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@jupiterone/integration-sdk-private-test-utils", "private": true, - "version": "10.0.0", + "version": "10.1.0", "description": "The SDK for developing JupiterOne integrations", "main": "dist/index.js", "types": "dist/index.d.ts", @@ -15,7 +15,7 @@ "build:dist": "tsc -p tsconfig.json --declaration" }, "dependencies": { - "@jupiterone/integration-sdk-core": "^10.0.0", + "@jupiterone/integration-sdk-core": "^10.1.0", "lodash": "^4.17.15" }, "devDependencies": { diff --git a/packages/integration-sdk-runtime/package.json b/packages/integration-sdk-runtime/package.json index 0fbc637b5..9b1a6d0fe 100644 --- a/packages/integration-sdk-runtime/package.json +++ b/packages/integration-sdk-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-runtime", - "version": "10.0.0", + "version": "10.1.0", "description": "The SDK for developing JupiterOne integrations", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -23,7 +23,7 @@ "prepack": "yarn build:dist" }, "dependencies": { - "@jupiterone/integration-sdk-core": "^10.0.0", + "@jupiterone/integration-sdk-core": "^10.1.0", "@lifeomic/alpha": "^5.1.1", "@lifeomic/attempt": "^3.0.3", "async-sema": "^3.1.0", @@ -41,7 +41,7 @@ "rimraf": "^3.0.2" }, "devDependencies": { - "@jupiterone/integration-sdk-private-test-utils": "^10.0.0", + "@jupiterone/integration-sdk-private-test-utils": "^10.1.0", "get-port": "^5.1.1", "memfs": "^3.2.0", "ts-node": "^9.1.0", diff --git a/packages/integration-sdk-testing/package.json b/packages/integration-sdk-testing/package.json index c48fc9185..9b6b9aa31 100644 --- a/packages/integration-sdk-testing/package.json +++ b/packages/integration-sdk-testing/package.json @@ -1,6 +1,6 @@ { "name": "@jupiterone/integration-sdk-testing", - "version": "10.0.0", + "version": "10.1.0", "description": "Testing utilities for JupiterOne integrations", "main": "dist/src/index.js", "types": "dist/src/index.d.ts", @@ -23,8 +23,8 @@ "prepack": "yarn build:dist" }, "dependencies": { - "@jupiterone/integration-sdk-core": "^10.0.0", - "@jupiterone/integration-sdk-runtime": "^10.0.0", + "@jupiterone/integration-sdk-core": "^10.1.0", + "@jupiterone/integration-sdk-runtime": "^10.1.0", "@pollyjs/adapter-node-http": "^6.0.5", "@pollyjs/core": "^6.0.5", "@pollyjs/persister-fs": "^6.0.5", @@ -32,7 +32,7 @@ "lodash": "^4.17.15" }, "devDependencies": { - "@jupiterone/integration-sdk-private-test-utils": "^10.0.0", + "@jupiterone/integration-sdk-private-test-utils": "^10.1.0", "@types/lodash": "^4.14.149", "get-port": "^5.1.1", "memfs": "^3.2.0"