diff --git a/.eslintrc.js b/.eslintrc.js index b83ce24ffc..ef25880334 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,4 +1,5 @@ module.exports = { + root: true, env: { browser: false, es2020: true, @@ -63,5 +64,5 @@ module.exports = { 'prefer-arrow-callback': 'error', quotes: [ 'error', 'single', { allowTemplateLiterals: true } ], semi: [ 'error', 'always' ] - }, + } }; diff --git a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml index 1ce91c800c..e779fd0737 100644 --- a/.github/workflows/reusable-run-linting-check-and-unit-tests.yml +++ b/.github/workflows/reusable-run-linting-check-and-unit-tests.yml @@ -42,9 +42,9 @@ jobs: if: steps.cache-node-modules.outputs.cache-hit == 'true' run: | npm run build -w packages/commons - npm run build -w packages/logger & npm run build -w packages/tracer & npm run build -w packages/metrics & npm run build -w packages/parameters & npm run build -w packages/idempotency + npm run build -w packages/logger & npm run build -w packages/tracer & npm run build -w packages/metrics & npm run build -w packages/parameters & npm run build -w packages/idempotency & npm run build -w docs/snippets - name: Run linting - run: npm run lint -w packages/commons -w packages/logger -w packages/tracer -w packages/metrics -w packages/parameters -w packages/idempotency + run: npm run lint -w packages/commons -w packages/logger -w packages/tracer -w packages/metrics -w packages/parameters -w packages/idempotency -w docs/snippets - name: Run unit tests run: npm t -w packages/commons -w packages/logger -w packages/tracer -w packages/metrics -w packages/parameters -w packages/idempotency check-examples: diff --git a/docs/snippets/logger/appendKeys.ts b/docs/snippets/logger/appendKeys.ts index 3c0d92cb40..d8d94541b6 100644 --- a/docs/snippets/logger/appendKeys.ts +++ b/docs/snippets/logger/appendKeys.ts @@ -2,15 +2,15 @@ import { Logger } from '@aws-lambda-powertools/logger'; // Add persistent log keys via the constructor const logger = new Logger({ - persistentLogAttributes: { - aws_account_id: '123456789012', - aws_region: 'eu-west-1', - logger: { - name: '@aws-lambda-powertools/logger', - version: '0.0.1', - }, - extra_key: "some-value" - } + persistentLogAttributes: { + aws_account_id: '123456789012', + aws_region: 'eu-west-1', + logger: { + name: '@aws-lambda-powertools/logger', + version: '0.0.1', + }, + extra_key: 'some-value' + } }); // OR add persistent log keys to an existing Logger instance with the appendKeys method: @@ -24,18 +24,18 @@ const logger = new Logger({ // extra_key: "some-value" // }); -export const handler = async (_event: any, _context: any): Promise => { +export const handler = async (_event: unknown, _context: unknown): Promise => { - // If you don't want to log the "extra_key" attribute in your logs, you can remove it - logger.removeKeys(["extra_key"]) + // If you don't want to log the "extra_key" attribute in your logs, you can remove it + logger.removeKeys(['extra_key']); - // This info log will print all extra custom attributes added above - // Extra attributes: logger object with name and version of the logger library, awsAccountId, awsRegion - logger.info('This is an INFO log'); - logger.info('This is another INFO log'); + // This info log will print all extra custom attributes added above + // Extra attributes: logger object with name and version of the logger library, awsAccountId, awsRegion + logger.info('This is an INFO log'); + logger.info('This is another INFO log'); - return { - foo: 'bar' - }; + return { + foo: 'bar' + }; }; \ No newline at end of file diff --git a/docs/snippets/logger/basicUsage.ts b/docs/snippets/logger/basicUsage.ts index 07d02405ae..8fbda33daf 100644 --- a/docs/snippets/logger/basicUsage.ts +++ b/docs/snippets/logger/basicUsage.ts @@ -3,5 +3,5 @@ import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger({ serviceName: 'serverlessAirline' }); export const handler = async (_event, _context): Promise => { - // ... + logger.info('Hello World'); }; \ No newline at end of file diff --git a/docs/snippets/logger/bringYourOwnFormatterClass.ts b/docs/snippets/logger/bringYourOwnFormatterClass.ts index b294ee0dc5..ab7e207cb9 100644 --- a/docs/snippets/logger/bringYourOwnFormatterClass.ts +++ b/docs/snippets/logger/bringYourOwnFormatterClass.ts @@ -1,8 +1,8 @@ -import { LogFormatter } from "@aws-lambda-powertools/logger"; +import { LogFormatter } from '@aws-lambda-powertools/logger'; import { LogAttributes, UnformattedAttributes, -} from "@aws-lambda-powertools/logger/lib/types"; +} from '@aws-lambda-powertools/logger/lib/types'; // Replace this line with your own type type MyCompanyLog = LogAttributes; diff --git a/docs/snippets/logger/bringYourOwnFormatterHandler.ts b/docs/snippets/logger/bringYourOwnFormatterHandler.ts index 0121e1bc64..b565708f9d 100644 --- a/docs/snippets/logger/bringYourOwnFormatterHandler.ts +++ b/docs/snippets/logger/bringYourOwnFormatterHandler.ts @@ -2,23 +2,23 @@ import { Logger } from '@aws-lambda-powertools/logger'; import { MyCompanyLogFormatter } from './utils/formatters/MyCompanyLogFormatter'; const logger = new Logger({ - logFormatter: new MyCompanyLogFormatter(), - logLevel: 'DEBUG', - serviceName: 'serverlessAirline', - sampleRateValue: 0.5, - persistentLogAttributes: { - awsAccountId: process.env.AWS_ACCOUNT_ID, - logger: { - name: '@aws-lambda-powertools/logger', - version: '0.0.1' - } - }, + logFormatter: new MyCompanyLogFormatter(), + logLevel: 'DEBUG', + serviceName: 'serverlessAirline', + sampleRateValue: 0.5, + persistentLogAttributes: { + awsAccountId: process.env.AWS_ACCOUNT_ID, + logger: { + name: '@aws-lambda-powertools/logger', + version: '0.0.1' + } + }, }); export const handler = async (event, context): Promise => { - logger.addContext(context); + logger.addContext(context); - logger.info('This is an INFO log', { correlationIds: { myCustomCorrelationId: 'foo-bar-baz' } }); + logger.info('This is an INFO log', { correlationIds: { myCustomCorrelationId: 'foo-bar-baz' } }); }; \ No newline at end of file diff --git a/docs/snippets/logger/clearStateDecorator.ts b/docs/snippets/logger/clearStateDecorator.ts index 8251b99fcf..359b63cc29 100644 --- a/docs/snippets/logger/clearStateDecorator.ts +++ b/docs/snippets/logger/clearStateDecorator.ts @@ -4,26 +4,26 @@ import { LambdaInterface } from '@aws-lambda-powertools/commons'; // Persistent attributes added outside the handler will be // cached across invocations const logger = new Logger({ - logLevel: 'DEBUG', - persistentLogAttributes: { - foo: "bar", - biz: "baz" - } + logLevel: 'DEBUG', + persistentLogAttributes: { + foo: 'bar', + biz: 'baz' + } }); class Lambda implements LambdaInterface { - // Enable the clear state flag - @logger.injectLambdaContext({ clearState: true }) - public async handler(_event: any, _context: any): Promise { - // Persistent attributes added inside the handler will NOT be cached - // across invocations - if (event['special_key'] === '123456'){ - logger.appendKeys({ - details: { special_key: '123456' } - }); - } - logger.debug('This is a DEBUG log'); + // Enable the clear state flag + @logger.injectLambdaContext({ clearState: true }) + public async handler(event: unknown, _context: unknown): Promise { + // Persistent attributes added inside the handler will NOT be cached + // across invocations + if (event['special_key'] === '123456'){ + logger.appendKeys({ + details: { special_key: '123456' } + }); } + logger.debug('This is a DEBUG log'); + } } diff --git a/docs/snippets/logger/clearStateMiddy.ts b/docs/snippets/logger/clearStateMiddy.ts index 2c68403d22..f9e1f55ff7 100644 --- a/docs/snippets/logger/clearStateMiddy.ts +++ b/docs/snippets/logger/clearStateMiddy.ts @@ -4,24 +4,24 @@ import middy from '@middy/core'; // Persistent attributes added outside the handler will be // cached across invocations const logger = new Logger({ - logLevel: 'DEBUG', - persistentLogAttributes: { - foo: "bar", - biz: "baz" - } + logLevel: 'DEBUG', + persistentLogAttributes: { + foo: 'bar', + biz: 'baz' + } }); -const lambdaHandler = async (event: { special_key: string }, _context: any): Promise => { - // Persistent attributes added inside the handler will NOT be cached - // across invocations - if (event['special_key'] === '123456') { - logger.appendKeys({ - details: { special_key: event['special_key'] } - }); - } - logger.debug('This is a DEBUG log'); +const lambdaHandler = async (event: { special_key: string }, _context: unknown): Promise => { + // Persistent attributes added inside the handler will NOT be cached + // across invocations + if (event['special_key'] === '123456') { + logger.appendKeys({ + details: { special_key: event['special_key'] } + }); + } + logger.debug('This is a DEBUG log'); }; // Enable the clear state flag export const handler = middy(lambdaHandler) - .use(injectLambdaContext(logger, { clearState: true })); \ No newline at end of file + .use(injectLambdaContext(logger, { clearState: true })); \ No newline at end of file diff --git a/docs/snippets/logger/createChild.ts b/docs/snippets/logger/createChild.ts index db18c5b9a3..7b9e7780e3 100644 --- a/docs/snippets/logger/createChild.ts +++ b/docs/snippets/logger/createChild.ts @@ -2,20 +2,20 @@ import { Logger } from '@aws-lambda-powertools/logger'; // With this logger, all the INFO logs will be printed const logger = new Logger({ - logLevel: 'INFO' + logLevel: 'INFO' }); // With this logger, only the ERROR logs will be printed const childLogger = logger.createChild({ - logLevel: 'ERROR' + logLevel: 'ERROR' }); -export const handler = async (_event: any, _context: any): Promise => { +export const handler = async (_event: unknown, _context: unknown): Promise => { - logger.info('This is an INFO log, from the parent logger'); - logger.error('This is an ERROR log, from the parent logger'); + logger.info('This is an INFO log, from the parent logger'); + logger.error('This is an ERROR log, from the parent logger'); - childLogger.info('This is an INFO log, from the child logger'); - childLogger.error('This is an ERROR log, from the child logger'); + childLogger.info('This is an INFO log, from the child logger'); + childLogger.error('This is an ERROR log, from the child logger'); }; \ No newline at end of file diff --git a/docs/snippets/logger/decorator.ts b/docs/snippets/logger/decorator.ts index 92122a691b..0e725bd517 100644 --- a/docs/snippets/logger/decorator.ts +++ b/docs/snippets/logger/decorator.ts @@ -4,11 +4,11 @@ import { LambdaInterface } from '@aws-lambda-powertools/commons'; const logger = new Logger(); class Lambda implements LambdaInterface { - // Decorate your handler class method - @logger.injectLambdaContext() - public async handler(_event: any, _context: any): Promise { - logger.info('This is an INFO log with some context'); - } + // Decorate your handler class method + @logger.injectLambdaContext() + public async handler(_event: unknown, _context: unknown): Promise { + logger.info('This is an INFO log with some context'); + } } diff --git a/docs/snippets/logger/eventDecorator.ts b/docs/snippets/logger/eventDecorator.ts index 57d8ce927c..d99668a04b 100644 --- a/docs/snippets/logger/eventDecorator.ts +++ b/docs/snippets/logger/eventDecorator.ts @@ -4,11 +4,11 @@ import { LambdaInterface } from '@aws-lambda-powertools/commons'; const logger = new Logger(); class Lambda implements LambdaInterface { - // Set the log event flag to true - @logger.injectLambdaContext({ logEvent: true }) - public async handler(_event: any, _context: any): Promise { - logger.info('This is an INFO log with some context'); - } + // Set the log event flag to true + @logger.injectLambdaContext({ logEvent: true }) + public async handler(_event: unknown, _context: unknown): Promise { + logger.info('This is an INFO log with some context'); + } } diff --git a/docs/snippets/logger/eventMiddy.ts b/docs/snippets/logger/eventMiddy.ts index 34c68207fb..4118903d33 100644 --- a/docs/snippets/logger/eventMiddy.ts +++ b/docs/snippets/logger/eventMiddy.ts @@ -3,9 +3,9 @@ import middy from '@middy/core'; const logger = new Logger(); -const lambdaHandler = async (_event: any, _context: any): Promise => { - logger.info('This is an INFO log with some context'); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + logger.info('This is an INFO log with some context'); }; export const handler = middy(lambdaHandler) - .use(injectLambdaContext(logger, { logEvent: true })); \ No newline at end of file + .use(injectLambdaContext(logger, { logEvent: true })); \ No newline at end of file diff --git a/docs/snippets/logger/extraData.ts b/docs/snippets/logger/extraData.ts index fd315e3f2e..5a536307d8 100644 --- a/docs/snippets/logger/extraData.ts +++ b/docs/snippets/logger/extraData.ts @@ -2,37 +2,37 @@ import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); -export const handler = async (event: any, _context: any): Promise => { +export const handler = async (event: unknown, _context: unknown): Promise => { - const myImportantVariable = { - foo: 'bar' - }; + const myImportantVariable = { + foo: 'bar' + }; - // Log additional data in single log items + // Log additional data in single log items - // As second parameter - logger.info('This is a log with an extra variable', { data: myImportantVariable }); + // As second parameter + logger.info('This is a log with an extra variable', { data: myImportantVariable }); - // You can also pass multiple parameters containing arbitrary objects - logger.info('This is a log with 3 extra objects', - { data: myImportantVariable }, - { correlationIds: { myCustomCorrelationId: 'foo-bar-baz' } }, - { lambdaEvent: event } - ); + // You can also pass multiple parameters containing arbitrary objects + logger.info('This is a log with 3 extra objects', + { data: myImportantVariable }, + { correlationIds: { myCustomCorrelationId: 'foo-bar-baz' } }, + { lambdaEvent: event } + ); - // Simply pass a string for logging additional data - logger.info('This is a log with additional string value', 'string value'); + // Simply pass a string for logging additional data + logger.info('This is a log with additional string value', 'string value'); - // Directly passing an object containing both the message and the additional info - const logObject = { - message: 'This is a log message', - additionalValue: 42 - }; + // Directly passing an object containing both the message and the additional info + const logObject = { + message: 'This is a log message', + additionalValue: 42 + }; - logger.info(logObject); + logger.info(logObject); - return { - foo: 'bar' - }; + return { + foo: 'bar' + }; }; \ No newline at end of file diff --git a/docs/snippets/logger/logError.ts b/docs/snippets/logger/logError.ts index c41c4a58a5..230fb7cbe7 100644 --- a/docs/snippets/logger/logError.ts +++ b/docs/snippets/logger/logError.ts @@ -2,20 +2,20 @@ import { Logger } from '@aws-lambda-powertools/logger'; const logger = new Logger(); -export const handler = async (_event: any, _context: any): Promise => { +export const handler = async (_event: unknown, _context: unknown): Promise => { - try { - throw new Error('Unexpected error #1'); - } catch (error) { - // Log information about the error using the default "error" key - logger.error('This is the first error', error as Error); - } + try { + throw new Error('Unexpected error #1'); + } catch (error) { + // Log information about the error using the default "error" key + logger.error('This is the first error', error as Error); + } - try { - throw new Error('Unexpected error #2'); - } catch (error) { - // Log information about the error using a custom "myCustomErrorKey" key - logger.error('This is the second error', { myCustomErrorKey: error as Error } ); - } + try { + throw new Error('Unexpected error #2'); + } catch (error) { + // Log information about the error using a custom "myCustomErrorKey" key + logger.error('This is the second error', { myCustomErrorKey: error as Error } ); + } }; \ No newline at end of file diff --git a/docs/snippets/logger/logSampling.ts b/docs/snippets/logger/logSampling.ts index eea4af5f07..4b566f33ec 100644 --- a/docs/snippets/logger/logSampling.ts +++ b/docs/snippets/logger/logSampling.ts @@ -2,23 +2,23 @@ import { Logger } from '@aws-lambda-powertools/logger'; // Notice the log level set to 'ERROR' const logger = new Logger({ - logLevel: 'ERROR', - sampleRateValue: 0.5 + logLevel: 'ERROR', + sampleRateValue: 0.5 }); -export const handler = async (_event: any, _context: any): Promise => { +export const handler = async (_event: unknown, _context: unknown): Promise => { - // This log item (equal to log level 'ERROR') will be printed to standard output - // in all Lambda invocations - logger.error('This is an ERROR log'); + // This log item (equal to log level 'ERROR') will be printed to standard output + // in all Lambda invocations + logger.error('This is an ERROR log'); - // These log items (below the log level 'ERROR') have ~50% chance - // of being printed in a Lambda invocation - logger.debug('This is a DEBUG log that has 50% chance of being printed'); - logger.info('This is an INFO log that has 50% chance of being printed'); - logger.warn('This is a WARN log that has 50% chance of being printed'); + // These log items (below the log level 'ERROR') have ~50% chance + // of being printed in a Lambda invocation + logger.debug('This is a DEBUG log that has 50% chance of being printed'); + logger.info('This is an INFO log that has 50% chance of being printed'); + logger.warn('This is a WARN log that has 50% chance of being printed'); - // Optional: refresh sample rate calculation on runtime - // logger.refreshSampleRateCalculation(); + // Optional: refresh sample rate calculation on runtime + // logger.refreshSampleRateCalculation(); }; \ No newline at end of file diff --git a/docs/snippets/logger/manual.ts b/docs/snippets/logger/manual.ts index e8544919b9..b7c271be35 100644 --- a/docs/snippets/logger/manual.ts +++ b/docs/snippets/logger/manual.ts @@ -4,8 +4,8 @@ const logger = new Logger(); export const handler = async (_event, context): Promise => { - logger.addContext(context); + logger.addContext(context); - logger.info('This is an INFO log with some context'); + logger.info('This is an INFO log with some context'); }; \ No newline at end of file diff --git a/docs/snippets/logger/middy.ts b/docs/snippets/logger/middy.ts index 5d48839133..83b723bf7f 100644 --- a/docs/snippets/logger/middy.ts +++ b/docs/snippets/logger/middy.ts @@ -3,9 +3,9 @@ import middy from '@middy/core'; const logger = new Logger(); -const lambdaHandler = async (_event: any, _context: any): Promise => { - logger.info('This is an INFO log with some context'); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + logger.info('This is an INFO log with some context'); }; export const handler = middy(lambdaHandler) - .use(injectLambdaContext(logger)); \ No newline at end of file + .use(injectLambdaContext(logger)); \ No newline at end of file diff --git a/docs/snippets/logger/sam.ts b/docs/snippets/logger/sam.ts index 0970b4e125..12cc9cc7eb 100644 --- a/docs/snippets/logger/sam.ts +++ b/docs/snippets/logger/sam.ts @@ -2,6 +2,7 @@ import { Logger } from '@aws-lambda-powertools/logger'; // Logger parameters fetched from the environment variables (see template.yaml tab) const logger = new Logger(); +logger.info('Hello World'); // You can also pass the parameters in the constructor // const logger = new Logger({ diff --git a/docs/snippets/logger/unitTesting.ts b/docs/snippets/logger/unitTesting.ts index b47352ab20..4c09ab7285 100644 --- a/docs/snippets/logger/unitTesting.ts +++ b/docs/snippets/logger/unitTesting.ts @@ -1,25 +1,12 @@ -const dummyContext = { - callbackWaitsForEmptyEventLoop: true, - functionVersion: '$LATEST', - functionName: 'foo-bar-function', - memoryLimitInMB: '128', - logGroupName: '/aws/lambda/foo-bar-function', - logStreamName: '2021/03/09/[$LATEST]abcdef123456abcdef123456abcdef123456', - invokedFunctionArn: 'arn:aws:lambda:eu-west-1:123456789012:function:foo-bar-function', - awsRequestId: 'c6af9ac6-7b61-11e6-9a41-93e812345678', - getRemainingTimeInMillis: () => 1234, - done: () => console.log('Done!'), - fail: () => console.log('Failed!'), - succeed: () => console.log('Succeeded!'), -}; +import { ContextExamples as dummyContext } from '@aws-lambda-powertools/commons'; describe('MyUnitTest', () => { - test('Lambda invoked successfully', async () => { + test('Lambda invoked successfully', async () => { - const testEvent = { test: 'test' }; - await handler(testEvent, dummyContext); + const testEvent = { test: 'test' }; + await handler(testEvent, dummyContext); - }); + }); }); \ No newline at end of file diff --git a/docs/snippets/metrics/addMetadata.ts b/docs/snippets/metrics/addMetadata.ts index ce56cac80d..adbe592b90 100644 --- a/docs/snippets/metrics/addMetadata.ts +++ b/docs/snippets/metrics/addMetadata.ts @@ -3,10 +3,10 @@ import middy from '@middy/core'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); - metrics.addMetadata('bookingId', '7051cd10-6283-11ec-90d6-0242ac120003'); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.addMetadata('bookingId', '7051cd10-6283-11ec-90d6-0242ac120003'); }; export const handler = middy(lambdaHandler) - .use(logMetrics(metrics)); \ No newline at end of file + .use(logMetrics(metrics)); \ No newline at end of file diff --git a/docs/snippets/metrics/basicUsage.ts b/docs/snippets/metrics/basicUsage.ts index ea4d5a53ec..15388d2c82 100644 --- a/docs/snippets/metrics/basicUsage.ts +++ b/docs/snippets/metrics/basicUsage.ts @@ -1,7 +1,7 @@ -import { Metrics } from '@aws-lambda-powertools/metrics'; +import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); export const handler = async (_event, _context): Promise => { - // ... + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; \ No newline at end of file diff --git a/docs/snippets/metrics/captureColdStartMetricDecorator.ts b/docs/snippets/metrics/captureColdStartMetricDecorator.ts index 3161b074cb..8817d6a799 100644 --- a/docs/snippets/metrics/captureColdStartMetricDecorator.ts +++ b/docs/snippets/metrics/captureColdStartMetricDecorator.ts @@ -5,8 +5,8 @@ const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orde export class MyFunction implements LambdaInterface { - @metrics.logMetrics({ captureColdStartMetric: true }) - public async handler(_event: any, _context: any): Promise { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); - } + @metrics.logMetrics({ captureColdStartMetric: true }) + public async handler(_event: unknown, _context: unknown): Promise { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + } } \ No newline at end of file diff --git a/docs/snippets/metrics/captureColdStartMetricMiddy.ts b/docs/snippets/metrics/captureColdStartMetricMiddy.ts index 092e06b50b..3b84cb7194 100644 --- a/docs/snippets/metrics/captureColdStartMetricMiddy.ts +++ b/docs/snippets/metrics/captureColdStartMetricMiddy.ts @@ -3,9 +3,9 @@ import middy from '@middy/core'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; export const handler = middy(lambdaHandler) - .use(logMetrics(metrics, { captureColdStartMetric: true })); \ No newline at end of file + .use(logMetrics(metrics, { captureColdStartMetric: true })); \ No newline at end of file diff --git a/docs/snippets/metrics/createMetrics.ts b/docs/snippets/metrics/createMetrics.ts index 072966690a..640afe1ada 100644 --- a/docs/snippets/metrics/createMetrics.ts +++ b/docs/snippets/metrics/createMetrics.ts @@ -2,7 +2,7 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -export const handler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); - metrics.publishStoredMetrics(); +export const handler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.publishStoredMetrics(); }; \ No newline at end of file diff --git a/docs/snippets/metrics/customDimensions.ts b/docs/snippets/metrics/customDimensions.ts index 8c4dd883d7..95d25f9cab 100644 --- a/docs/snippets/metrics/customDimensions.ts +++ b/docs/snippets/metrics/customDimensions.ts @@ -2,8 +2,8 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -export const handler = async (_event: any, _context: any): Promise => { - metrics.addDimension('environment', 'prod'); - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); - metrics.publishStoredMetrics(); +export const handler = async (_event: unknown, _context: unknown): Promise => { + metrics.addDimension('environment', 'prod'); + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + metrics.publishStoredMetrics(); }; \ No newline at end of file diff --git a/docs/snippets/metrics/decorator.ts b/docs/snippets/metrics/decorator.ts index a3430414bc..f64d842d5e 100644 --- a/docs/snippets/metrics/decorator.ts +++ b/docs/snippets/metrics/decorator.ts @@ -5,10 +5,10 @@ const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orde class Lambda implements LambdaInterface { - @metrics.logMetrics() - public async handler(_event: any, _context: any): Promise { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); - } + @metrics.logMetrics() + public async handler(_event: unknown, _context: unknown): Promise { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + } } const handlerClass = new Lambda(); diff --git a/docs/snippets/metrics/defaultDimensions.ts b/docs/snippets/metrics/defaultDimensions.ts index 3d48bd6bb6..509bdda170 100644 --- a/docs/snippets/metrics/defaultDimensions.ts +++ b/docs/snippets/metrics/defaultDimensions.ts @@ -1,11 +1,11 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; const metrics = new Metrics({ - namespace: 'serverlessAirline', - serviceName: 'orders', - defaultDimensions: { 'environment': 'prod', 'foo': 'bar' } + namespace: 'serverlessAirline', + serviceName: 'orders', + defaultDimensions: { 'environment': 'prod', 'foo': 'bar' } }); -export const handler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); +export const handler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; \ No newline at end of file diff --git a/docs/snippets/metrics/defaultDimensionsDecorator.ts b/docs/snippets/metrics/defaultDimensionsDecorator.ts index ed2631e321..d31c8cde6b 100644 --- a/docs/snippets/metrics/defaultDimensionsDecorator.ts +++ b/docs/snippets/metrics/defaultDimensionsDecorator.ts @@ -5,11 +5,11 @@ const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orde const DEFAULT_DIMENSIONS = { 'environment': 'prod', 'foo': 'bar' }; export class Lambda implements LambdaInterface { - // Decorate your handler class method - @metrics.logMetrics({ defaultDimensions: DEFAULT_DIMENSIONS }) - public async handler(_event: any, _context: any): Promise { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); - } + // Decorate your handler class method + @metrics.logMetrics({ defaultDimensions: DEFAULT_DIMENSIONS }) + public async handler(_event: unknown, _context: unknown): Promise { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); + } } const handlerClass = new Lambda(); diff --git a/docs/snippets/metrics/defaultDimensionsMiddy.ts b/docs/snippets/metrics/defaultDimensionsMiddy.ts index aedfc554e3..dc9035e937 100644 --- a/docs/snippets/metrics/defaultDimensionsMiddy.ts +++ b/docs/snippets/metrics/defaultDimensionsMiddy.ts @@ -3,11 +3,11 @@ import middy from '@middy/core'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; // Wrap the handler with middy export const handler = middy(lambdaHandler) - // Use the middleware by passing the Metrics instance as a parameter - .use(logMetrics(metrics, { defaultDimensions:{ 'environment': 'prod', 'foo': 'bar' } })); \ No newline at end of file +// Use the middleware by passing the Metrics instance as a parameter + .use(logMetrics(metrics, { defaultDimensions:{ 'environment': 'prod', 'foo': 'bar' } })); \ No newline at end of file diff --git a/docs/snippets/metrics/manual.ts b/docs/snippets/metrics/manual.ts index 00e552a294..7df2301fdd 100644 --- a/docs/snippets/metrics/manual.ts +++ b/docs/snippets/metrics/manual.ts @@ -2,7 +2,7 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -export const handler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 10); - metrics.publishStoredMetrics(); +export const handler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 10); + metrics.publishStoredMetrics(); }; \ No newline at end of file diff --git a/docs/snippets/metrics/middy.ts b/docs/snippets/metrics/middy.ts index 6af8f3827b..088186002b 100644 --- a/docs/snippets/metrics/middy.ts +++ b/docs/snippets/metrics/middy.ts @@ -3,9 +3,9 @@ import middy from '@middy/core'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; export const handler = middy(lambdaHandler) - .use(logMetrics(metrics)); \ No newline at end of file + .use(logMetrics(metrics)); \ No newline at end of file diff --git a/docs/snippets/metrics/multiValueMetrics.ts b/docs/snippets/metrics/multiValueMetrics.ts index aea850b62e..6214940c39 100644 --- a/docs/snippets/metrics/multiValueMetrics.ts +++ b/docs/snippets/metrics/multiValueMetrics.ts @@ -1,10 +1,9 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; -import { Context } from 'aws-lambda'; const metrics = new Metrics({ namespace:'serverlessAirline', serviceName:'orders' }); -export const handler = async (event: any, context: Context): Promise => { - metrics.addMetric('performedActionA', MetricUnits.Count, 2); - // do something else... - metrics.addMetric('performedActionA', MetricUnits.Count, 1); +export const handler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('performedActionA', MetricUnits.Count, 2); + // do something else... + metrics.addMetric('performedActionA', MetricUnits.Count, 1); }; \ No newline at end of file diff --git a/docs/snippets/metrics/sam.ts b/docs/snippets/metrics/sam.ts index 5a2c910529..8acd0b6ba5 100644 --- a/docs/snippets/metrics/sam.ts +++ b/docs/snippets/metrics/sam.ts @@ -1,7 +1,8 @@ -import { Metrics } from '@aws-lambda-powertools/metrics'; +import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; // Metrics parameters fetched from the environment variables (see template.yaml tab) const metrics = new Metrics(); +metrics.addMetric('successfulBooking', MetricUnits.Count, 1); // You can also pass the parameters in the constructor // const metrics = new Metrics({ diff --git a/docs/snippets/metrics/setDefaultDimensions.ts b/docs/snippets/metrics/setDefaultDimensions.ts index c6a5eb7d97..1491d709ae 100644 --- a/docs/snippets/metrics/setDefaultDimensions.ts +++ b/docs/snippets/metrics/setDefaultDimensions.ts @@ -3,6 +3,6 @@ import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); metrics.setDefaultDimensions({ 'environment': 'prod', 'foo': 'bar' }); -export const handler = async (event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); +export const handler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; \ No newline at end of file diff --git a/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts b/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts index 84d1dde551..758a1aba2c 100644 --- a/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts +++ b/docs/snippets/metrics/singleMetricDifferentDimsDecorator.ts @@ -5,17 +5,17 @@ const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orde class Lambda implements LambdaInterface { - @metrics.logMetrics() - public async handler(_event: any, _context: any): Promise { - metrics.addDimension('metricUnit', 'milliseconds'); - // This metric will have the "metricUnit" dimension, and no "metricType" dimension: - metrics.addMetric('latency', MetricUnits.Milliseconds, 56); + @metrics.logMetrics() + public async handler(_event: unknown, _context: unknown): Promise { + metrics.addDimension('metricUnit', 'milliseconds'); + // This metric will have the "metricUnit" dimension, and no "metricType" dimension: + metrics.addMetric('latency', MetricUnits.Milliseconds, 56); - const singleMetric = metrics.singleMetric(); - // This metric will have the "metricType" dimension, and no "metricUnit" dimension: - singleMetric.addDimension('metricType', 'business'); - singleMetric.addMetric('orderSubmitted', MetricUnits.Count, 1); - } + const singleMetric = metrics.singleMetric(); + // This metric will have the "metricType" dimension, and no "metricUnit" dimension: + singleMetric.addDimension('metricType', 'business'); + singleMetric.addMetric('orderSubmitted', MetricUnits.Count, 1); + } } const handlerClass = new Lambda(); diff --git a/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts b/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts index c15f5f717f..62ed3863b7 100644 --- a/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts +++ b/docs/snippets/metrics/singleMetricDifferentDimsMiddy.ts @@ -3,16 +3,16 @@ import middy from '@middy/core'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - metrics.addDimension('metricUnit', 'milliseconds'); - // This metric will have the "metricUnit" dimension, and no "metricType" dimension: - metrics.addMetric('latency', MetricUnits.Milliseconds, 56); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + metrics.addDimension('metricUnit', 'milliseconds'); + // This metric will have the "metricUnit" dimension, and no "metricType" dimension: + metrics.addMetric('latency', MetricUnits.Milliseconds, 56); - const singleMetric = metrics.singleMetric(); - // This metric will have the "metricType" dimension, and no "metricUnit" dimension: - singleMetric.addDimension('metricType', 'business'); - singleMetric.addMetric('orderSubmitted', MetricUnits.Count, 1); + const singleMetric = metrics.singleMetric(); + // This metric will have the "metricType" dimension, and no "metricUnit" dimension: + singleMetric.addDimension('metricType', 'business'); + singleMetric.addMetric('orderSubmitted', MetricUnits.Count, 1); }; export const handler = middy(lambdaHandler) - .use(logMetrics(metrics)); \ No newline at end of file + .use(logMetrics(metrics)); \ No newline at end of file diff --git a/docs/snippets/metrics/throwOnEmptyMetrics.ts b/docs/snippets/metrics/throwOnEmptyMetrics.ts index 2b3f8bb4a4..3b9784f7b1 100644 --- a/docs/snippets/metrics/throwOnEmptyMetrics.ts +++ b/docs/snippets/metrics/throwOnEmptyMetrics.ts @@ -3,9 +3,9 @@ import middy from '@middy/core'; const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - metrics.addMetric('successfulBooking', MetricUnits.Count, 1); +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + metrics.addMetric('successfulBooking', MetricUnits.Count, 1); }; export const handler = middy(lambdaHandler) - .use(logMetrics(metrics, { throwOnEmptyMetrics: true })); \ No newline at end of file + .use(logMetrics(metrics, { throwOnEmptyMetrics: true })); \ No newline at end of file diff --git a/docs/snippets/package.json b/docs/snippets/package.json index 33aeb1247c..48cb3fa3da 100644 --- a/docs/snippets/package.json +++ b/docs/snippets/package.json @@ -10,8 +10,8 @@ "test": "echo 'Not Applicable'", "test:e2e": "echo 'Not Applicable'", "build": "echo 'Not Applicable'", - "lint": "echo 'Not Applicable'", - "lint-fix": "echo 'Not Applicable'" + "lint": "eslint --ext .ts --no-error-on-unmatched-pattern logger tracer metrics parameters", + "lint-fix": "eslint --fix --ext .ts --no-error-on-unmatched-pattern logger tracer metrics parameters" }, "license": "MIT-0", "repository": { @@ -27,6 +27,7 @@ "@aws-sdk/client-dynamodb": "^3.245.0", "@aws-sdk/client-secrets-manager": "^3.250.0", "@aws-sdk/client-ssm": "^3.245.0", - "@aws-sdk/util-dynamodb": "^3.245.0" + "@aws-sdk/util-dynamodb": "^3.245.0", + "axios": "^1.2.4" } -} \ No newline at end of file +} diff --git a/docs/snippets/tracer/accessRootTraceId.ts b/docs/snippets/tracer/accessRootTraceId.ts index c385e39b7c..f40b797346 100644 --- a/docs/snippets/tracer/accessRootTraceId.ts +++ b/docs/snippets/tracer/accessRootTraceId.ts @@ -2,17 +2,17 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (event: unknown, context: Context): Promise => { - try { +export const handler = async (_event: unknown, _context: unknown): Promise => { + try { - } catch (err) { - const rootTraceId = tracer.getRootXrayTraceId(); + } catch (err) { + const rootTraceId = tracer.getRootXrayTraceId(); - // Example of returning an error response - return { - statusCode: 500, - body: `Internal Error - Please contact support and quote the following id: ${rootTraceId}`, - headers: { '_X_AMZN_TRACE_ID': rootTraceId }, - }; - } + // Example of returning an error response + return { + statusCode: 500, + body: `Internal Error - Please contact support and quote the following id: ${rootTraceId}`, + headers: { '_X_AMZN_TRACE_ID': rootTraceId }, + }; + } }; \ No newline at end of file diff --git a/docs/snippets/tracer/basicUsage.ts b/docs/snippets/tracer/basicUsage.ts index a8c830e78b..b44814eb41 100644 --- a/docs/snippets/tracer/basicUsage.ts +++ b/docs/snippets/tracer/basicUsage.ts @@ -3,5 +3,5 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); export const handler = async (_event, _context): Promise => { - // ... + tracer.getSegment(); }; \ No newline at end of file diff --git a/docs/snippets/tracer/captureAWS.ts b/docs/snippets/tracer/captureAWS.ts index b94151c014..5155f569b9 100644 --- a/docs/snippets/tracer/captureAWS.ts +++ b/docs/snippets/tracer/captureAWS.ts @@ -2,4 +2,4 @@ import { S3 } from 'aws-sdk'; import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -const s3 = tracer.captureAWSClient(new S3()); \ No newline at end of file +tracer.captureAWSClient(new S3()); \ No newline at end of file diff --git a/docs/snippets/tracer/captureAWSAll.ts b/docs/snippets/tracer/captureAWSAll.ts index d758e1dd7c..a5aca36989 100644 --- a/docs/snippets/tracer/captureAWSAll.ts +++ b/docs/snippets/tracer/captureAWSAll.ts @@ -1,4 +1,5 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; +import AWS from 'aws-sdk'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -const AWS = tracer.captureAWS(require('aws-sdk')); \ No newline at end of file +tracer.captureAWS(AWS); \ No newline at end of file diff --git a/docs/snippets/tracer/captureAWSv3.ts b/docs/snippets/tracer/captureAWSv3.ts index 8270d10c0a..dd1ca6870a 100644 --- a/docs/snippets/tracer/captureAWSv3.ts +++ b/docs/snippets/tracer/captureAWSv3.ts @@ -1,5 +1,5 @@ -import { S3Client } from '@aws-sdk/client-s3'; +import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager'; import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -const client = tracer.captureAWSv3Client(new S3Client({})); \ No newline at end of file +tracer.captureAWSv3Client(new SecretsManagerClient({})); \ No newline at end of file diff --git a/docs/snippets/tracer/captureHTTP.ts b/docs/snippets/tracer/captureHTTP.ts index cf4cae3cdb..15ca0adef4 100644 --- a/docs/snippets/tracer/captureHTTP.ts +++ b/docs/snippets/tracer/captureHTTP.ts @@ -3,6 +3,7 @@ import axios from 'axios'; // (1) const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (event: unknown, context: Context): Promise => { - await axios.get('https://httpbin.org/status/200'); +export const handler = async (_event: unknown, _context: unknown): Promise => { + const { data } = await axios.get('https://httpbin.org/status/200'); + tracer.addResponseAsMetadata(data); }; \ No newline at end of file diff --git a/docs/snippets/tracer/captureMethodDecorator.ts b/docs/snippets/tracer/captureMethodDecorator.ts index 6c580f3e5d..69b997b265 100644 --- a/docs/snippets/tracer/captureMethodDecorator.ts +++ b/docs/snippets/tracer/captureMethodDecorator.ts @@ -4,16 +4,16 @@ import { LambdaInterface } from '@aws-lambda-powertools/commons'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); class Lambda implements LambdaInterface { - // Decorate your class method - @tracer.captureMethod() // (1) - public async getChargeId(): Promise { - /* ... */ - return 'foo bar'; - } + // Decorate your class method + @tracer.captureMethod() // (1) + public async getChargeId(): Promise { + /* ... */ + return 'foo bar'; + } - public async handler(_event: any, _context: any): Promise { - /* ... */ - } + public async handler(_event: unknown, _context: unknown): Promise { + await this.getChargeId(); + } } const handlerClass = new Lambda(); diff --git a/docs/snippets/tracer/captureMethodManual.ts b/docs/snippets/tracer/captureMethodManual.ts index af8c0a1dc8..8e8a6e07ed 100644 --- a/docs/snippets/tracer/captureMethodManual.ts +++ b/docs/snippets/tracer/captureMethodManual.ts @@ -3,32 +3,31 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); const getChargeId = async (): Promise => { - const parentSubsegment = tracer.getSegment(); // This is the subsegment currently active - // Create subsegment for the function & set it as active - const subsegment = parentSubsegment.addNewSubsegment(`### chargeId`); - tracer.setSegment(subsegment); + const parentSubsegment = tracer.getSegment(); // This is the subsegment currently active + // Create subsegment for the function & set it as active + const subsegment = parentSubsegment.addNewSubsegment(`### chargeId`); + tracer.setSegment(subsegment); - let res; - try { - /* ... */ - // Add the response as metadata - tracer.addResponseAsMetadata(res, 'chargeId'); - } catch (err) { - // Add the error as metadata - tracer.addErrorAsMetadata(err as Error); - throw err; - } + let res; + try { + /* ... */ + // Add the response as metadata + tracer.addResponseAsMetadata(res, 'chargeId'); + } catch (err) { + // Add the error as metadata + tracer.addErrorAsMetadata(err as Error); + throw err; + } - // Close subsegment (the AWS Lambda one is closed automatically) - subsegment.close(); - // Set the facade segment as active again - tracer.setSegment(parentSubsegment); + // Close subsegment (the AWS Lambda one is closed automatically) + subsegment.close(); + // Set the facade segment as active again + tracer.setSegment(parentSubsegment); - return res; + return res; }; -export const handler = async (_event: any, _context: any): Promise => { - const chargeId = getChargeId(); - const payment = collectPayment(chargeId); - /* ... */ +export const handler = async (_event: unknown, _context: unknown): Promise => { + await getChargeId(); + }; \ No newline at end of file diff --git a/docs/snippets/tracer/decorator.ts b/docs/snippets/tracer/decorator.ts index 1e17ea6af0..5373433f6f 100644 --- a/docs/snippets/tracer/decorator.ts +++ b/docs/snippets/tracer/decorator.ts @@ -4,11 +4,11 @@ import { LambdaInterface } from '@aws-lambda-powertools/commons'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); class Lambda implements LambdaInterface { - // Decorate your handler class method - @tracer.captureLambdaHandler() - public async handler(_event: any, _context: any): Promise { - /* ... */ - } + // Decorate your handler class method + @tracer.captureLambdaHandler() + public async handler(_event: unknown, _context: unknown): Promise { + tracer.getSegment(); + } } const handlerClass = new Lambda(); diff --git a/docs/snippets/tracer/disableCaptureResponseHandler.ts b/docs/snippets/tracer/disableCaptureResponseHandler.ts index de9549c22c..0191f51b02 100644 --- a/docs/snippets/tracer/disableCaptureResponseHandler.ts +++ b/docs/snippets/tracer/disableCaptureResponseHandler.ts @@ -4,10 +4,10 @@ import { LambdaInterface } from '@aws-lambda-powertools/commons'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); class Lambda implements LambdaInterface { - @tracer.captureLambdaHandler({ captureResponse: false }) - async handler(_event: any, _context: any): Promise { - /* ... */ - } + @tracer.captureLambdaHandler({ captureResponse: false }) + public async handler(_event: unknown, _context: unknown): Promise { + tracer.getSegment(); + } } const handlerClass = new Lambda(); diff --git a/docs/snippets/tracer/disableCaptureResponseMethod.ts b/docs/snippets/tracer/disableCaptureResponseMethod.ts index 7386d75338..7828d3b264 100644 --- a/docs/snippets/tracer/disableCaptureResponseMethod.ts +++ b/docs/snippets/tracer/disableCaptureResponseMethod.ts @@ -1,17 +1,18 @@ +import { LambdaInterface } from '@aws-lambda-powertools/commons'; import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); class Lambda implements LambdaInterface { - @tracer.captureMethod({ captureResponse: false }) - public async getChargeId(): Promise { - /* ... */ - return 'foo bar'; - } + @tracer.captureMethod({ captureResponse: false }) + public async getChargeId(): Promise { + /* ... */ + return 'foo bar'; + } - public async handler(_event: any, _context: any): Promise { - /* ... */ - } + public async handler(_event: unknown, _context: unknown): Promise { + /* ... */ + } } const handlerClass = new Lambda(); diff --git a/docs/snippets/tracer/disableCaptureResponseMiddy.ts b/docs/snippets/tracer/disableCaptureResponseMiddy.ts index b0916d00fc..567b38036a 100644 --- a/docs/snippets/tracer/disableCaptureResponseMiddy.ts +++ b/docs/snippets/tracer/disableCaptureResponseMiddy.ts @@ -3,12 +3,12 @@ import middy from '@middy/core'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - /* ... */ +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + /* ... */ }; // Wrap the handler with middy export const handler = middy(lambdaHandler) - // Use the middleware by passing the Tracer instance as a parameter, - // but specify the captureResponse option as false. - .use(captureLambdaHandler(tracer, { captureResponse: false })); \ No newline at end of file +// Use the middleware by passing the Tracer instance as a parameter, +// but specify the captureResponse option as false. + .use(captureLambdaHandler(tracer, { captureResponse: false })); \ No newline at end of file diff --git a/docs/snippets/tracer/manual.ts b/docs/snippets/tracer/manual.ts index de0fe064e9..a17be6a900 100644 --- a/docs/snippets/tracer/manual.ts +++ b/docs/snippets/tracer/manual.ts @@ -2,31 +2,30 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: any, context: any): Promise => { - const segment = tracer.getSegment(); // This is the facade segment (the one that is created by AWS Lambda) - // Create subsegment for the function & set it as active - const subsegment = segment.addNewSubsegment(`## ${process.env._HANDLER}`); - tracer.setSegment(subsegment); +export const handler = async (_event: unknown, _context: unknown): Promise => { + const segment = tracer.getSegment(); // This is the facade segment (the one that is created by AWS Lambda) + // Create subsegment for the function & set it as active + const subsegment = segment.addNewSubsegment(`## ${process.env._HANDLER}`); + tracer.setSegment(subsegment); - // Annotate the subsegment with the cold start & serviceName - tracer.annotateColdStart(); - tracer.addServiceNameAnnotation(); + // Annotate the subsegment with the cold start & serviceName + tracer.annotateColdStart(); + tracer.addServiceNameAnnotation(); + + try { + + // Add the response as metadata + tracer.addResponseAsMetadata({}, process.env._HANDLER); + } catch (err) { + // Add the error as metadata + tracer.addErrorAsMetadata(err as Error); + throw err; + } finally { + // Close subsegment (the AWS Lambda one is closed automatically) + subsegment.close(); + // Set back the facade segment as active again + tracer.setSegment(segment); + } - let res; - try { - /* ... */ - // Add the response as metadata - tracer.addResponseAsMetadata(res, process.env._HANDLER); - } catch (err) { - // Add the error as metadata - tracer.addErrorAsMetadata(err as Error); - throw err; - } finally { - // Close subsegment (the AWS Lambda one is closed automatically) - subsegment.close(); - // Set back the facade segment as active again - tracer.setSegment(segment); - } - - return res; + return {}; }; \ No newline at end of file diff --git a/docs/snippets/tracer/middy.ts b/docs/snippets/tracer/middy.ts index 0318b099f6..0ca33cec20 100644 --- a/docs/snippets/tracer/middy.ts +++ b/docs/snippets/tracer/middy.ts @@ -3,11 +3,11 @@ import middy from '@middy/core'; // (1) const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -const lambdaHandler = async (_event: any, _context: any): Promise => { - /* ... */ +const lambdaHandler = async (_event: unknown, _context: unknown): Promise => { + tracer.putAnnotation('successfulBooking', true); }; // Wrap the handler with middy export const handler = middy(lambdaHandler) - // Use the middleware by passing the Tracer instance as a parameter - .use(captureLambdaHandler(tracer)); \ No newline at end of file +// Use the middleware by passing the Tracer instance as a parameter + .use(captureLambdaHandler(tracer)); \ No newline at end of file diff --git a/docs/snippets/tracer/putAnnotation.ts b/docs/snippets/tracer/putAnnotation.ts index 5b48d831af..399049046b 100644 --- a/docs/snippets/tracer/putAnnotation.ts +++ b/docs/snippets/tracer/putAnnotation.ts @@ -2,6 +2,6 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: any, _context: any): Promise => { - tracer.putAnnotation('successfulBooking', true); +export const handler = async (_event: unknown, _context: unknown): Promise => { + tracer.putAnnotation('successfulBooking', true); }; \ No newline at end of file diff --git a/docs/snippets/tracer/putMetadata.ts b/docs/snippets/tracer/putMetadata.ts index c69a307373..e9d873a632 100644 --- a/docs/snippets/tracer/putMetadata.ts +++ b/docs/snippets/tracer/putMetadata.ts @@ -2,7 +2,9 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; const tracer = new Tracer({ serviceName: 'serverlessAirline' }); -export const handler = async (_event: any, _context: any): Promise => { - const res; /* ... */ - tracer.putMetadata('paymentResponse', res); +export const handler = async (_event: unknown, _context: unknown): Promise => { + + tracer.putMetadata('paymentResponse', { + 'foo': 'bar' + }); }; \ No newline at end of file diff --git a/docs/snippets/tracer/sam.ts b/docs/snippets/tracer/sam.ts index 881471c80b..407c1ac863 100644 --- a/docs/snippets/tracer/sam.ts +++ b/docs/snippets/tracer/sam.ts @@ -2,6 +2,7 @@ import { Tracer } from '@aws-lambda-powertools/tracer'; // Tracer parameter fetched from the environment variables (see template.yaml tab) const tracer = new Tracer(); +tracer.getSegment(); // You can also pass the parameter in the constructor // const tracer = new Tracer({ diff --git a/package-lock.json b/package-lock.json index 1c7a720b79..17a8ec3afb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,7 +68,8 @@ "@aws-sdk/client-dynamodb": "^3.245.0", "@aws-sdk/client-secrets-manager": "^3.250.0", "@aws-sdk/client-ssm": "^3.245.0", - "@aws-sdk/util-dynamodb": "^3.245.0" + "@aws-sdk/util-dynamodb": "^3.245.0", + "axios": "^1.2.4" } }, "docs/snippets/node_modules/@aws-sdk/util-dynamodb": { @@ -5805,9 +5806,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1279.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1279.0.tgz", - "integrity": "sha512-52NbHEZTLlrld6XDLvVaOwEI0p4nYTYVuninX8s4kdkBXeTezaBahsufWT7LmeYh10gp70dnwaUxvja1TjmeRA==", + "version": "2.1302.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1302.0.tgz", + "integrity": "sha512-OeP31meLGCcBJel2Re1yRsrjqDT3FvLFMQwPVtKHkXnws6QpgVg1FPiEjz4emEREUi6NfbqGNVExOGLsKiz0YA==", "dev": true, "dependencies": { "buffer": "4.9.2", @@ -6077,9 +6078,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz", - "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.4.tgz", + "integrity": "sha512-lIQuCfBJvZB/Bv7+RWUqEJqNShGOVpk9v7P0ZWx5Ip0qY6u7JBAU6dzQPMLasU9vHL2uD8av/1FDJXj7n6c39w==", "dev": true, "dependencies": { "follow-redirects": "^1.15.0", @@ -21244,9 +21245,9 @@ } }, "aws-sdk": { - "version": "2.1279.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1279.0.tgz", - "integrity": "sha512-52NbHEZTLlrld6XDLvVaOwEI0p4nYTYVuninX8s4kdkBXeTezaBahsufWT7LmeYh10gp70dnwaUxvja1TjmeRA==", + "version": "2.1302.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1302.0.tgz", + "integrity": "sha512-OeP31meLGCcBJel2Re1yRsrjqDT3FvLFMQwPVtKHkXnws6QpgVg1FPiEjz4emEREUi6NfbqGNVExOGLsKiz0YA==", "dev": true, "requires": { "buffer": "4.9.2", @@ -21465,9 +21466,9 @@ "dev": true }, "axios": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz", - "integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.4.tgz", + "integrity": "sha512-lIQuCfBJvZB/Bv7+RWUqEJqNShGOVpk9v7P0ZWx5Ip0qY6u7JBAU6dzQPMLasU9vHL2uD8av/1FDJXj7n6c39w==", "dev": true, "requires": { "follow-redirects": "^1.15.0", @@ -23275,11 +23276,13 @@ "docs": { "version": "file:docs/snippets", "requires": { + "@aws-sdk/client-appconfigdata": "^3.245.0", "@aws-sdk/client-appconfigdata": "^3.245.0", "@aws-sdk/client-dynamodb": "^3.245.0", "@aws-sdk/client-secrets-manager": "^3.250.0", "@aws-sdk/client-ssm": "^3.245.0", - "@aws-sdk/util-dynamodb": "^3.245.0" + "@aws-sdk/util-dynamodb": "^3.245.0", + "axios": "^1.2.4" }, "dependencies": { "@aws-sdk/util-dynamodb": {