From 2c19a9b556a1be27089e8ae6bb5df5a19bb4bf12 Mon Sep 17 00:00:00 2001 From: Hamit Burak Emre Date: Tue, 8 Oct 2019 16:56:03 +0300 Subject: [PATCH 1/2] Change application id format --- src/index.ts | 18 +++++++++++------- src/plugins/PluginContext.ts | 2 ++ src/plugins/utils/Utils.ts | 22 +++++++++++++++++++++- 3 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/index.ts b/src/index.ts index 265e9746..1983cfff 100644 --- a/src/index.ts +++ b/src/index.ts @@ -85,12 +85,12 @@ module.exports = (options: any) => { ApplicationSupport.parseApplicationTags(); const logStreamName = Utils.getConfiguration(envVariableKeys.AWS_LAMBDA_LOG_STREAM_NAME); - const region = Utils.getConfiguration(envVariableKeys.AWS_REGION); + const region = Utils.getConfiguration(envVariableKeys.AWS_REGION); const functionVersion = Utils.getConfiguration(envVariableKeys.AWS_LAMBDA_FUNCTION_VERSION); - const applicationId = logStreamName ? logStreamName.split(']').pop() : Utils.generateId(); + const applicationInstanceId = logStreamName ? logStreamName.split(']').pop() : Utils.generateId(); const pluginContext: PluginContext = new PluginContext({ - applicationId, + applicationInstanceId, applicationRegion: region ? region : '', applicationVersion: functionVersion ? functionVersion : '', requestCount: 0, @@ -100,10 +100,6 @@ module.exports = (options: any) => { config, }); - config.plugins.forEach((plugin: any) => { - plugin.setPluginContext(pluginContext); - }); - const increaseRequestCount = () => pluginContext.requestCount += 1; return (originalFunc: any) => { @@ -113,6 +109,14 @@ module.exports = (options: any) => { } const thundraWrappedHandler: any = (originalEvent: any, originalContext: any, originalCallback: any) => { + // Creating applicationId here, since we need the information in context + const applicationId = Utils.getApplicationId(originalContext); + pluginContext.applicationId = applicationId; + + config.plugins.forEach((plugin: any) => { + plugin.setPluginContext(pluginContext); + }); + const originalThis = this; const thundraWrapper = new ThundraWrapper( originalThis, diff --git a/src/plugins/PluginContext.ts b/src/plugins/PluginContext.ts index 131e3d99..d1eeef7c 100644 --- a/src/plugins/PluginContext.ts +++ b/src/plugins/PluginContext.ts @@ -2,6 +2,7 @@ import ThundraConfig from './config/ThundraConfig'; class PluginContext { applicationId: string; + applicationInstanceId: string; applicationRegion: string; applicationVersion: string; requestCount: number; @@ -20,6 +21,7 @@ class PluginContext { constructor(opt: any) { opt = opt ? opt : {}; this.applicationId = opt.applicationId; + this.applicationInstanceId = opt.applicationInstanceId; this.applicationRegion = opt.applicationRegion; this.applicationVersion = opt.applicationVersion; this.requestCount = opt.requestCount; diff --git a/src/plugins/utils/Utils.ts b/src/plugins/utils/Utils.ts index 6ddf4716..9eca2711 100644 --- a/src/plugins/utils/Utils.ts +++ b/src/plugins/utils/Utils.ts @@ -394,8 +394,28 @@ class Utils { } static getAWSAccountNo(arn: string) { + return Utils.getARNPart(arn, 4); + } + + static getAWSRegion(arn: string) { + return Utils.getARNPart(arn, 3); + } + + static getAWSFunctionName(arn: string) { + return Utils.getARNPart(arn, 6); + } + + static getApplicationId(arn: string) { + const region = Utils.getAWSRegion(arn); + const accountNo = Utils.getAWSAccountNo(arn); + const functionName = Utils.getAWSFunctionName(arn); + + return `aws:lambda:${region}:${accountNo}:${functionName}`; + } + + static getARNPart(arn: string, index: number) { try { - return arn.split(':')[4]; + return arn.split(':')[index]; } catch (error) { return ''; } From 1192336786e72bd0d0d6d86eb81324d4ef852b21 Mon Sep 17 00:00:00 2001 From: Hamit Burak Emre Date: Tue, 8 Oct 2019 17:16:25 +0300 Subject: [PATCH 2/2] Clean up --- test/plugins/console.shim.filter.test.js | 2 ++ test/plugins/console.shim.test.js | 2 ++ test/plugins/invocation.trace.support.test.js | 1 + test/plugins/log.test.js | 6 ++++++ 4 files changed, 11 insertions(+) diff --git a/test/plugins/console.shim.filter.test.js b/test/plugins/console.shim.filter.test.js index 067fdd30..97e37fad 100644 --- a/test/plugins/console.shim.filter.test.js +++ b/test/plugins/console.shim.filter.test.js @@ -3,6 +3,8 @@ import { createMockPluginContext, createMockBeforeInvocationData } from '../mock describe('Console integration should filter logs with levels', () => { const logPlugin = new LogPlugin(); + logPlugin.enable(); + const pluginContext = createMockPluginContext(); const beforeInvocationData = createMockBeforeInvocationData(); diff --git a/test/plugins/console.shim.test.js b/test/plugins/console.shim.test.js index 780f1537..de4745a5 100644 --- a/test/plugins/console.shim.test.js +++ b/test/plugins/console.shim.test.js @@ -3,6 +3,8 @@ import { createMockPluginContext, createMockBeforeInvocationData } from '../mock describe('Log plugin shim console', () => { const logPlugin = new LogPlugin(); + logPlugin.enable(); + const pluginContext = createMockPluginContext(); const beforeInvocationData = createMockBeforeInvocationData(); logPlugin.setPluginContext(pluginContext); diff --git a/test/plugins/invocation.trace.support.test.js b/test/plugins/invocation.trace.support.test.js index 2141c93b..03272336 100644 --- a/test/plugins/invocation.trace.support.test.js +++ b/test/plugins/invocation.trace.support.test.js @@ -147,6 +147,7 @@ describe('Invocation Trace Support', () => { test('Should set resourceAvgDuration while merging resources', () => { const tracer = new ThundraTracer(); + InvocationTraceSupport.tracer = tracer; tracer.recorder.destroy(); const spanOptions = { diff --git a/test/plugins/log.test.js b/test/plugins/log.test.js index f78972ae..d98d42eb 100644 --- a/test/plugins/log.test.js +++ b/test/plugins/log.test.js @@ -5,6 +5,8 @@ describe('LogPlugin', () => { describe('constructor', () => { const options = { op2: 1, opt2: 2 }; const logPlugin = new LogPlugin(options); + logPlugin.enable(); + it('should set variables', () => { expect(logPlugin.hooks).toEqual({ 'before-invocation': logPlugin.beforeInvocation, 'after-invocation': logPlugin.afterInvocation }); expect(logPlugin.options).toEqual(options); @@ -14,6 +16,7 @@ describe('LogPlugin', () => { describe('report', () => { describe('when reporter instance is set', () => { const logPlugin = new LogPlugin(); + logPlugin.enable(); logPlugin.reporter = createMockReporter(); logPlugin.report('logReport'); it('should report', () => { @@ -28,6 +31,7 @@ describe('LogPlugin', () => { describe('setPluginContext', () => { const logPlugin = new LogPlugin(); + logPlugin.enable(); const pluginContext = createMockPluginContext(); logPlugin.setPluginContext(pluginContext); it('should set pluginContext and apiKey', () => { @@ -38,6 +42,7 @@ describe('LogPlugin', () => { describe('beforeInvocation', () => { const logPlugin = new LogPlugin(); + logPlugin.enable(); const beforeInvocationData = createMockBeforeInvocationData(); const pluginContext = createMockPluginContext(); logPlugin.setPluginContext(pluginContext); @@ -49,6 +54,7 @@ describe('LogPlugin', () => { describe('reportLog', () => { const logPlugin = new LogPlugin(); + logPlugin.enable(); const pluginContext = createMockPluginContext(); const beforeInvocationData = createMockBeforeInvocationData(); const logData = {