Skip to content

feat(metrics): add esmodule support #1739

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Oct 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/cdk/functions/get-all-items.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware';
import { logMetrics } from '@aws-lambda-powertools/metrics';
import { logMetrics } from '@aws-lambda-powertools/metrics/middleware';
import { captureLambdaHandler } from '@aws-lambda-powertools/tracer';
import { ScanCommand } from '@aws-sdk/lib-dynamodb';
import middy from '@middy/core';
Expand Down
2 changes: 1 addition & 1 deletion examples/sam/src/get-all-items.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
import middy from '@middy/core';
import { tableName } from './common/constants';
import { logger, tracer, metrics } from './common/powertools';
import { logMetrics } from '@aws-lambda-powertools/metrics';
import { logMetrics } from '@aws-lambda-powertools/metrics/middleware';
import { injectLambdaContext } from '@aws-lambda-powertools/logger/middleware';
import { captureLambdaHandler } from '@aws-lambda-powertools/tracer';
import { docClient } from './common/dynamodb-client';
Expand Down
2 changes: 1 addition & 1 deletion layers/tests/e2e/layerPublisher.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import { App } from 'aws-cdk-lib';
import { LayerVersion } from 'aws-cdk-lib/aws-lambda';
import { LayerPublisherStack } from '../../src/layer-publisher-stack';
import {
TestNodejsFunction,
TestStack,
TestInvocationLogs,
invokeFunctionOnce,
generateTestUniqueName,
} from '@aws-lambda-powertools/testing-utils';
import { TestNodejsFunction } from '@aws-lambda-powertools/testing-utils/resources/lambda';
import {
RESOURCE_NAME_PREFIX,
SETUP_TIMEOUT,
Expand Down
10 changes: 9 additions & 1 deletion packages/commons/src/types/LambdaInterface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,12 @@ interface LambdaInterface {
handler: SyncHandler<Handler> | AsyncHandler<Handler>;
}

export { LambdaInterface };
type HandlerMethodDecorator = (
target: LambdaInterface,
propertyKey: string | symbol,
descriptor:
| TypedPropertyDescriptor<SyncHandler<Handler>>
| TypedPropertyDescriptor<AsyncHandler<Handler>>
) => void;

export { LambdaInterface, HandlerMethodDecorator };
17 changes: 13 additions & 4 deletions packages/commons/src/types/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
export * from './middy.js';
export * from './awsSdk.js';
export * from './json.js';
export * from './LambdaInterface.js';
export {
MiddlewareLikeObj,
MiddyLikeRequest,
CleanupFunction,
} from './middy.js';
export { SdkClient, MiddlewareArgsLike } from './awsSdk.js';
export { JSONPrimitive, JSONValue, JSONObject, JSONArray } from './json.js';
export {
SyncHandler,
AsyncHandler,
LambdaInterface,
HandlerMethodDecorator,
} from './LambdaInterface.js';
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ module.exports = {
},
runner: 'groups',
preset: 'ts-jest',
moduleNameMapper: {
'^(\\.{1,2}/.*)\\.js$': '$1',
},
transform: {
'^.+\\.ts?$': 'ts-jest',
},
Expand All @@ -14,7 +17,7 @@ module.exports = {
roots: ['<rootDir>/src', '<rootDir>/tests'],
testPathIgnorePatterns: ['/node_modules/'],
testEnvironment: 'node',
coveragePathIgnorePatterns: ['/node_modules/'],
coveragePathIgnorePatterns: ['/node_modules/', '/types/'],
coverageThreshold: {
global: {
statements: 100,
Expand Down
43 changes: 39 additions & 4 deletions packages/metrics/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,54 @@
"test:e2e:nodejs18x": "RUNTIME=nodejs18x jest --group=e2e",
"test:e2e": "jest --group=e2e",
"watch": "jest --group=unit --watch ",
"build": "tsc --build --force",
"build:cjs": "tsc --build --force && echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json",
"build:esm": "tsc --project tsconfig.esm.json && echo '{ \"type\": \"module\" }' > lib/esm/package.json",
"build": "npm run build:esm & npm run build:cjs",
"lint": "eslint --ext .ts,.js --no-error-on-unmatched-pattern .",
"lint-fix": "eslint --fix --ext .ts,.js --no-error-on-unmatched-pattern .",
"prebuild": "rimraf ./lib",
"prepack": "node ../../.github/scripts/release_patch_package_json.js ."
"prepack": "rimraf ./lib/*.tsbuildinfo && node ../../.github/scripts/release_patch_package_json.js ."
},
"lint-staged": {
"*.{js,ts}": "npm run lint-fix"
},
"homepage": "https://github.com/aws-powertools/powertools-lambda-typescript/tree/main/packages/metrics#readme",
"license": "MIT-0",
"main": "./lib/index.js",
"types": "./lib/index.d.ts",
"type": "module",
"exports": {
".": {
"require": {
"types": "./lib/cjs/index.d.ts",
"default": "./lib/cjs/index.js"
},
"import": {
"types": "./lib/esm/index.d.ts",
"default": "./lib/esm/index.js"
}
},
"./middleware": {
"import": "./lib/esm/middleware/middy.js",
"require": "./lib/cjs/middleware/middy.js"
},
"./types": {
"import": "./lib/esm/types/index.js",
"require": "./lib/cjs/types/index.js"
}
},
"typesVersions": {
"*": {
"middleware": [
"lib/cjs/middleware/middy.d.ts",
"lib/esm/middleware/middy.d.ts"
],
"types": [
"lib/cjs/types/index.d.ts",
"lib/esm/types/index.d.ts"
]
}
},
"types": "./lib/cjs/index.d.ts",
"main": "./lib/cjs/index.js",
"devDependencies": {
"@aws-lambda-powertools/testing-utils": "file:../testing",
"@aws-sdk/client-cloudwatch": "^3.413.0",
Expand Down
61 changes: 30 additions & 31 deletions packages/metrics/src/Metrics.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,28 @@
import type { Callback, Context, Handler } from 'aws-lambda';
import { Utility } from '@aws-lambda-powertools/commons';
import type { MetricsInterface } from './MetricsInterface';
import {
type ConfigServiceInterface,
EnvironmentVariablesService,
} from './config';
import type { HandlerMethodDecorator } from '@aws-lambda-powertools/commons/types';
import { EnvironmentVariablesService } from './config/EnvironmentVariablesService.js';
import {
MAX_DIMENSION_COUNT,
MAX_METRICS_SIZE,
DEFAULT_NAMESPACE,
COLD_START_METRIC,
MAX_METRIC_VALUES_SIZE,
} from './constants';
MetricUnit as MetricUnits,
MetricResolution as MetricResolutions,
} from './constants.js';
import {
MetricsOptions,
Dimensions,
EmfOutput,
HandlerMethodDecorator,
StoredMetrics,
ExtraOptions,
MetricUnit,
MetricUnits,
MetricResolution,
MetricDefinition,
} from './types';
type MetricsOptions,
type Dimensions,
type EmfOutput,
type StoredMetrics,
type ExtraOptions,
type MetricDefinition,
type ConfigServiceInterface,
type MetricsInterface,
type MetricUnit,
type MetricResolution,
} from './types/index.js';

/**
* ## Intro
Expand Down Expand Up @@ -83,7 +82,7 @@ import {
* @metrics.logMetrics({ captureColdStartMetric: true, throwOnEmptyMetrics: true })
* public handler(_event: any, _context: any): Promise<void> {
* // ...
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
* // ...
* }
* }
Expand All @@ -99,13 +98,13 @@ import {
* @example
*
* ```typescript
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
*
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
*
* export const handler = async (_event: any, _context: any): Promise<void> => {
* metrics.captureColdStartMetric();
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
* metrics.publishStoredMetrics();
* };
* ```
Expand Down Expand Up @@ -188,15 +187,15 @@ class Metrics extends Utility implements MetricsInterface {
* or when calling {@link Metrics.publishStoredMetrics}.
*
* You can add a metric by specifying the metric name, unit, and value. For convenience,
* we provide a set of constants for the most common units in {@link MetricUnits}.
* we provide a set of constants for the most common units in {@link MetricUnit}.
*
* @example
* ```typescript
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
*
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
*
* metrics.addMetric('successfulBooking', MetricUnits.Count, 1);
* metrics.addMetric('successfulBooking', MetricUnit.Count, 1);
* ```
*
* Optionally, you can specify the metric resolution, which can be either `High` or `Standard`.
Expand All @@ -205,11 +204,11 @@ class Metrics extends Utility implements MetricsInterface {
*
* @example
* ```typescript
* import { Metrics, MetricUnits, MetricResolution } from '@aws-lambda-powertools/metrics';
* import { Metrics, MetricUnit, MetricResolution } from '@aws-lambda-powertools/metrics';
*
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' });
*
* metrics.addMetric('successfulBooking', MetricUnits.Count, 1, MetricResolution.High);
* metrics.addMetric('successfulBooking', MetricUnit.Count, 1, MetricResolution.High);
* ```
*
* @param name - The metric name
Expand All @@ -221,7 +220,7 @@ class Metrics extends Utility implements MetricsInterface {
name: string,
unit: MetricUnit,
value: number,
resolution: MetricResolution = MetricResolution.Standard
resolution: MetricResolution = MetricResolutions.Standard
): void {
this.storeMetric(name, unit, value, resolution);
if (this.isSingleMetric) this.publishStoredMetrics();
Expand Down Expand Up @@ -369,12 +368,12 @@ class Metrics extends Utility implements MetricsInterface {
* @example
*
* ```typescript
* import { Metrics, MetricUnits } from '@aws-lambda-powertools/metrics';
* import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
*
* const metrics = new Metrics({ namespace: 'serverlessAirline', serviceName: 'orders' }); // Sets metric namespace, and service as a metric dimension
*
* export const handler = async (_event: any, _context: any): Promise<void> => {
* metrics.addMetric('test-metric', MetricUnits.Count, 10);
* metrics.addMetric('test-metric', MetricUnit.Count, 10);
* metrics.publishStoredMetrics();
* };
* ```
Expand Down Expand Up @@ -413,7 +412,7 @@ class Metrics extends Utility implements MetricsInterface {
).map((metricDefinition) => ({
Name: metricDefinition.name,
Unit: metricDefinition.unit,
...(metricDefinition.resolution === MetricResolution.High
...(metricDefinition.resolution === MetricResolutions.High
? { StorageResolution: metricDefinition.resolution }
: {}),
}));
Expand Down Expand Up @@ -499,7 +498,7 @@ class Metrics extends Utility implements MetricsInterface {
* ```typescript
* const singleMetric = metrics.singleMetric();
* singleMetric.addDimension('InnerDimension', 'true');
* singleMetric.addMetric('single-metric', MetricUnits.Percent, 50);
* singleMetric.addMetric('single-metric', MetricUnit.Percent, 50);
* ```
*
* @returns the Metrics
Expand Down Expand Up @@ -706,4 +705,4 @@ class Metrics extends Utility implements MetricsInterface {
}
}

export { Metrics, MetricUnits, MetricResolution };
export { Metrics };
2 changes: 1 addition & 1 deletion packages/metrics/src/config/EnvironmentVariablesService.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import type { ConfigServiceInterface } from './ConfigServiceInterface';
import type { ConfigServiceInterface } from '../types/ConfigServiceInterface.js';
import { EnvironmentVariablesService as CommonEnvironmentVariablesService } from '@aws-lambda-powertools/commons';

class EnvironmentVariablesService
Expand Down
2 changes: 0 additions & 2 deletions packages/metrics/src/config/index.ts

This file was deleted.

36 changes: 36 additions & 0 deletions packages/metrics/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,46 @@ const MAX_METRICS_SIZE = 100;
const MAX_METRIC_VALUES_SIZE = 100;
const MAX_DIMENSION_COUNT = 29;

const MetricUnit = {
Seconds: 'Seconds',
Microseconds: 'Microseconds',
Milliseconds: 'Milliseconds',
Bytes: 'Bytes',
Kilobytes: 'Kilobytes',
Megabytes: 'Megabytes',
Gigabytes: 'Gigabytes',
Terabytes: 'Terabytes',
Bits: 'Bits',
Kilobits: 'Kilobits',
Megabits: 'Megabits',
Gigabits: 'Gigabits',
Terabits: 'Terabits',
Percent: 'Percent',
Count: 'Count',
BytesPerSecond: 'Bytes/Second',
KilobytesPerSecond: 'Kilobytes/Second',
MegabytesPerSecond: 'Megabytes/Second',
GigabytesPerSecond: 'Gigabytes/Second',
TerabytesPerSecond: 'Terabytes/Second',
BitsPerSecond: 'Bits/Second',
KilobitsPerSecond: 'Kilobits/Second',
MegabitsPerSecond: 'Megabits/Second',
GigabitsPerSecond: 'Gigabits/Second',
TerabitsPerSecond: 'Terabits/Second',
CountPerSecond: 'Count/Second',
} as const;

const MetricResolution = {
Standard: 60,
High: 1,
} as const;

export {
COLD_START_METRIC,
DEFAULT_NAMESPACE,
MAX_METRICS_SIZE,
MAX_METRIC_VALUES_SIZE,
MAX_DIMENSION_COUNT,
MetricUnit,
MetricResolution,
};
5 changes: 2 additions & 3 deletions packages/metrics/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
export * from './Metrics';
export * from './MetricsInterface';
export * from './middleware';
export { Metrics } from './Metrics.js';
export { MetricUnit, MetricResolution } from './constants.js';
1 change: 0 additions & 1 deletion packages/metrics/src/middleware/index.ts

This file was deleted.

4 changes: 2 additions & 2 deletions packages/metrics/src/middleware/middy.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { METRICS_KEY } from '@aws-lambda-powertools/commons';
import type { Metrics } from '../Metrics';
import type { ExtraOptions } from '../types';
import type { Metrics } from '../Metrics.js';
import type { ExtraOptions } from '../types/Metrics.js';
import type {
MiddlewareLikeObj,
MiddyLikeRequest,
Expand Down
9 changes: 0 additions & 9 deletions packages/metrics/src/types/MetricResolution.ts

This file was deleted.

Loading