serverless-plugin-datadog 5.1.2 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. package/dist/package.json +1 -1
  2. package/dist/src/index.js +4 -4
  3. package/dist/src/index.js.map +1 -1
  4. package/dist/src/layers-gov.json +18 -18
  5. package/dist/src/layers.json +189 -189
  6. package/dist/src/source-code-integration.d.ts +4 -1
  7. package/dist/src/source-code-integration.d.ts.map +1 -1
  8. package/dist/src/source-code-integration.js +1 -1
  9. package/dist/src/source-code-integration.js.map +1 -1
  10. package/package.json +1 -1
  11. package/dist/env.d.ts +0 -17
  12. package/dist/env.d.ts.map +0 -1
  13. package/dist/env.js +0 -63
  14. package/dist/env.js.map +0 -1
  15. package/dist/forwarder.d.ts +0 -14
  16. package/dist/forwarder.d.ts.map +0 -1
  17. package/dist/forwarder.js +0 -87
  18. package/dist/forwarder.js.map +0 -1
  19. package/dist/index.d.ts +0 -10
  20. package/dist/index.d.ts.map +0 -1
  21. package/dist/index.js +0 -161
  22. package/dist/index.js.map +0 -1
  23. package/dist/layer.d.ts +0 -26
  24. package/dist/layer.d.ts.map +0 -1
  25. package/dist/layer.js +0 -65
  26. package/dist/layer.js.map +0 -1
  27. package/dist/layers.json +0 -156
  28. package/dist/templates/node-es6-template.d.ts +0 -2
  29. package/dist/templates/node-es6-template.d.ts.map +0 -1
  30. package/dist/templates/node-es6-template.js +0 -25
  31. package/dist/templates/node-es6-template.js.map +0 -1
  32. package/dist/templates/node-js-template.d.ts +0 -2
  33. package/dist/templates/node-js-template.d.ts.map +0 -1
  34. package/dist/templates/node-js-template.js +0 -24
  35. package/dist/templates/node-js-template.js.map +0 -1
  36. package/dist/templates/node-ts-template.d.ts +0 -2
  37. package/dist/templates/node-ts-template.d.ts.map +0 -1
  38. package/dist/templates/node-ts-template.js +0 -26
  39. package/dist/templates/node-ts-template.js.map +0 -1
  40. package/dist/templates/python-template.d.ts +0 -2
  41. package/dist/templates/python-template.d.ts.map +0 -1
  42. package/dist/templates/python-template.js +0 -25
  43. package/dist/templates/python-template.js.map +0 -1
  44. package/dist/tracing.d.ts +0 -9
  45. package/dist/tracing.d.ts.map +0 -1
  46. package/dist/tracing.js +0 -36
  47. package/dist/tracing.js.map +0 -1
  48. package/dist/util.d.ts +0 -9
  49. package/dist/util.d.ts.map +0 -1
  50. package/dist/util.js +0 -72
  51. package/dist/util.js.map +0 -1
  52. package/dist/wrapper.d.ts +0 -11
  53. package/dist/wrapper.d.ts.map +0 -1
  54. package/dist/wrapper.js +0 -57
  55. package/dist/wrapper.js.map +0 -1
  56. package/dist/yarn.lock +0 -3703
package/dist/env.d.ts DELETED
@@ -1,17 +0,0 @@
1
- import Service from "serverless/classes/Service";
2
- export interface Configuration {
3
- addLayers: boolean;
4
- apiKey?: string;
5
- apiKMSKey?: string;
6
- site: string;
7
- logLevel: string;
8
- flushMetricsToLogs: boolean;
9
- enableXrayTracing: boolean;
10
- enableDDTracing: boolean;
11
- forwarder?: string;
12
- enableTags: boolean;
13
- }
14
- export declare const defaultConfiguration: Configuration;
15
- export declare function setEnvConfiguration(config: Configuration, service: Service): void;
16
- export declare function getConfig(service: Service): Configuration;
17
- //# sourceMappingURL=env.d.ts.map
package/dist/env.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":"AAQA,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAEjD,MAAM,WAAW,aAAa;IAE5B,SAAS,EAAE,OAAO,CAAC;IAEnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,MAAM,CAAC;IAEjB,kBAAkB,EAAE,OAAO,CAAC;IAE5B,iBAAiB,EAAE,OAAO,CAAC;IAE3B,eAAe,EAAE,OAAO,CAAC;IAGzB,SAAS,CAAC,EAAE,MAAM,CAAC;IAInB,UAAU,EAAE,OAAO,CAAC;CACrB;AASD,eAAO,MAAM,oBAAoB,EAAE,aAQlC,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,QAyB1E;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAczD"}
package/dist/env.js DELETED
@@ -1,63 +0,0 @@
1
- "use strict";
2
- /*
3
- * Unless explicitly stated otherwise all files in this repository are licensed
4
- * under the Apache License Version 2.0.
5
- *
6
- * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
- * Copyright 2019 Datadog, Inc.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- const apiKeyEnvVar = "DD_API_KEY";
11
- const apiKeyKMSEnvVar = "DD_KMS_API_KEY";
12
- const siteURLEnvVar = "DD_SITE";
13
- const logLevelEnvVar = "DD_LOG_LEVEL";
14
- const logForwardingEnvVar = "DD_FLUSH_TO_LOG";
15
- const ddTracingEnabledEnvVar = "DD_TRACE_ENABLED";
16
- exports.defaultConfiguration = {
17
- addLayers: true,
18
- flushMetricsToLogs: true,
19
- logLevel: "info",
20
- site: "datadoghq.com",
21
- enableXrayTracing: false,
22
- enableDDTracing: true,
23
- enableTags: true,
24
- };
25
- function setEnvConfiguration(config, service) {
26
- const provider = service.provider;
27
- if (provider.environment === undefined) {
28
- provider.environment = {};
29
- }
30
- const environment = provider.environment;
31
- if (config.apiKey !== undefined && environment[apiKeyEnvVar] === undefined) {
32
- environment[apiKeyEnvVar] = config.apiKey;
33
- }
34
- if (config.apiKMSKey !== undefined && environment[apiKeyKMSEnvVar] === undefined) {
35
- environment[apiKeyKMSEnvVar] = config.apiKMSKey;
36
- }
37
- if (environment[siteURLEnvVar] === undefined) {
38
- environment[siteURLEnvVar] = config.site;
39
- }
40
- if (environment[logLevelEnvVar] === undefined) {
41
- environment[logLevelEnvVar] = config.logLevel;
42
- }
43
- if (environment[logForwardingEnvVar] === undefined) {
44
- environment[logForwardingEnvVar] = config.flushMetricsToLogs;
45
- }
46
- if (config.enableDDTracing !== undefined && environment[ddTracingEnabledEnvVar] === undefined) {
47
- environment[ddTracingEnabledEnvVar] = config.enableDDTracing;
48
- }
49
- }
50
- exports.setEnvConfiguration = setEnvConfiguration;
51
- function getConfig(service) {
52
- let custom = service.custom;
53
- if (custom === undefined) {
54
- custom = {};
55
- }
56
- let datadog = custom.datadog;
57
- if (datadog === undefined) {
58
- datadog = {};
59
- }
60
- return Object.assign(Object.assign({}, exports.defaultConfiguration), datadog);
61
- }
62
- exports.getConfig = getConfig;
63
- //# sourceMappingURL=env.js.map
package/dist/env.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"env.js","sourceRoot":"","sources":["../src/env.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AA8BH,MAAM,YAAY,GAAG,YAAY,CAAC;AAClC,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,cAAc,GAAG,cAAc,CAAC;AACtC,MAAM,mBAAmB,GAAG,iBAAiB,CAAC;AAC9C,MAAM,sBAAsB,GAAG,kBAAkB,CAAC;AAErC,QAAA,oBAAoB,GAAkB;IACjD,SAAS,EAAE,IAAI;IACf,kBAAkB,EAAE,IAAI;IACxB,QAAQ,EAAE,MAAM;IAChB,IAAI,EAAE,eAAe;IACrB,iBAAiB,EAAE,KAAK;IACxB,eAAe,EAAE,IAAI;IACrB,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,SAAgB,mBAAmB,CAAC,MAAqB,EAAE,OAAgB;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAe,CAAC;IAEzC,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE;QACtC,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC;KAC3B;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAkB,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,WAAW,CAAC,YAAY,CAAC,KAAK,SAAS,EAAE;QAC1E,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;KAC3C;IACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE;QAChF,WAAW,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;KACjD;IACD,IAAI,WAAW,CAAC,aAAa,CAAC,KAAK,SAAS,EAAE;QAC5C,WAAW,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;KAC1C;IACD,IAAI,WAAW,CAAC,cAAc,CAAC,KAAK,SAAS,EAAE;QAC7C,WAAW,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;KAC/C;IACD,IAAI,WAAW,CAAC,mBAAmB,CAAC,KAAK,SAAS,EAAE;QAClD,WAAW,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,kBAAkB,CAAC;KAC9D;IACD,IAAI,MAAM,CAAC,eAAe,KAAK,SAAS,IAAI,WAAW,CAAC,sBAAsB,CAAC,KAAK,SAAS,EAAE;QAC7F,WAAW,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC;KAC9D;AACH,CAAC;AAzBD,kDAyBC;AAED,SAAgB,SAAS,CAAC,OAAgB;IACxC,IAAI,MAAM,GAAG,OAAO,CAAC,MAAa,CAAC;IACnC,IAAI,MAAM,KAAK,SAAS,EAAE;QACxB,MAAM,GAAG,EAAE,CAAC;KACb;IAED,IAAI,OAAO,GAAG,MAAM,CAAC,OAA6C,CAAC;IACnE,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,GAAG,EAAE,CAAC;KACd;IACD,uCACK,4BAAoB,GACpB,OAAO,EACV;AACJ,CAAC;AAdD,8BAcC"}
@@ -1,14 +0,0 @@
1
- import Service from "serverless/classes/Service";
2
- import Aws = require("serverless/plugins/aws/provider/awsProvider");
3
- export declare function addCloudWatchForwarderSubscriptions(service: Service, aws: Aws, functionArn: string): Promise<string[]>;
4
- export declare function canSubscribeLogGroup(aws: Aws, logGroupName: string, expectedSubName: string): Promise<boolean>;
5
- export declare function describeSubscriptionFilters(aws: Aws, logGroupName: string): Promise<{
6
- creationTime: number;
7
- destinationArn: string;
8
- distribution: string;
9
- filterName: string;
10
- filterPattern: string;
11
- logGroupName: string;
12
- roleArn: string;
13
- }[]>;
14
- //# sourceMappingURL=forwarder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"forwarder.d.ts","sourceRoot":"","sources":["../src/forwarder.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,4BAA4B,CAAC;AACjD,OAAO,GAAG,GAAG,QAAQ,6CAA6C,CAAC,CAAC;AA4BpE,wBAAsB,mCAAmC,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,qBAuCxG;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,oBAejG;AAED,wBAAsB,2BAA2B,CAAC,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM;;;;;;;;KAc/E"}
package/dist/forwarder.js DELETED
@@ -1,87 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- const logGroupKey = "AWS::Logs::LogGroup";
13
- const logGroupSubscriptionKey = "AWS::Logs::SubscriptionFilter";
14
- function isLogGroup(value) {
15
- return value.Type === logGroupKey;
16
- }
17
- function addCloudWatchForwarderSubscriptions(service, aws, functionArn) {
18
- var _a;
19
- return __awaiter(this, void 0, void 0, function* () {
20
- const resources = (_a = service.provider.compiledCloudFormationTemplate) === null || _a === void 0 ? void 0 : _a.Resources;
21
- if (resources === undefined) {
22
- return ["No cloudformation stack available. Skipping subscribing Datadog forwarder."];
23
- }
24
- const errors = [];
25
- for (const [name, resource] of Object.entries(resources)) {
26
- if (!isLogGroup(resource) || !resource.Properties.LogGroupName.startsWith("/aws/lambda/")) {
27
- continue;
28
- }
29
- const logGroupName = resource.Properties.LogGroupName;
30
- const scopedSubName = `${name}Subscription`;
31
- let expectedSubName = `${service.getServiceName()}-${aws.getStage()}-${scopedSubName}-`;
32
- const stackName = aws.naming.getStackName();
33
- if (stackName) {
34
- expectedSubName = `${stackName}-${scopedSubName}-`;
35
- }
36
- const canSub = yield canSubscribeLogGroup(aws, logGroupName, expectedSubName);
37
- if (!canSub) {
38
- errors.push(`Subscription already exists for log group ${logGroupName}. Skipping subscribing Datadog forwarder.`);
39
- continue;
40
- }
41
- const subscription = {
42
- Type: logGroupSubscriptionKey,
43
- Properties: {
44
- DestinationArn: functionArn,
45
- FilterPattern: "",
46
- LogGroupName: { Ref: name },
47
- },
48
- };
49
- resources[scopedSubName] = subscription;
50
- }
51
- return errors;
52
- });
53
- }
54
- exports.addCloudWatchForwarderSubscriptions = addCloudWatchForwarderSubscriptions;
55
- function canSubscribeLogGroup(aws, logGroupName, expectedSubName) {
56
- return __awaiter(this, void 0, void 0, function* () {
57
- const subscriptionFilters = yield describeSubscriptionFilters(aws, logGroupName);
58
- let hasUnknownSubscriptions = false;
59
- for (const subscription of subscriptionFilters) {
60
- const filterName = subscription.filterName;
61
- if (filterName.startsWith(expectedSubName)) {
62
- return true;
63
- }
64
- // We don't own this log group. It might not be possible to set a forwarder
65
- hasUnknownSubscriptions = true;
66
- }
67
- // No log groups, so it's possible to subscribe.
68
- return !hasUnknownSubscriptions;
69
- });
70
- }
71
- exports.canSubscribeLogGroup = canSubscribeLogGroup;
72
- function describeSubscriptionFilters(aws, logGroupName) {
73
- return __awaiter(this, void 0, void 0, function* () {
74
- try {
75
- const result = yield aws.request("CloudWatchLogs", "describeSubscriptionFilters", {
76
- logGroupName,
77
- });
78
- return result.subscriptionFilters;
79
- }
80
- catch (err) {
81
- // An error will occur if the log group doesn't exist, so we swallow this and return an empty list.
82
- return [];
83
- }
84
- });
85
- }
86
- exports.describeSubscriptionFilters = describeSubscriptionFilters;
87
- //# sourceMappingURL=forwarder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"forwarder.js","sourceRoot":"","sources":["../src/forwarder.ts"],"names":[],"mappings":";;;;;;;;;;;AAGA,MAAM,WAAW,GAAG,qBAAqB,CAAC;AAC1C,MAAM,uBAAuB,GAAG,+BAA+B,CAAC;AAqBhE,SAAS,UAAU,CAAC,KAAU;IAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC;AACpC,CAAC;AAED,SAAsB,mCAAmC,CAAC,OAAgB,EAAE,GAAQ,EAAE,WAAmB;;;QACvG,MAAM,SAAS,SAAG,OAAO,CAAC,QAAQ,CAAC,8BAA8B,0CAAE,SAAS,CAAC;QAC7E,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,OAAO,CAAC,4EAA4E,CAAC,CAAC;SACvF;QACD,MAAM,MAAM,GAAG,EAAE,CAAC;QAElB,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YACxD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;gBACzF,SAAS;aACV;YAED,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;YACtD,MAAM,aAAa,GAAG,GAAG,IAAI,cAAc,CAAC;YAE5C,IAAI,eAAe,GAAG,GAAG,OAAO,CAAC,cAAc,EAAE,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,aAAa,GAAG,CAAC;YAExF,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC5C,IAAI,SAAS,EAAE;gBACb,eAAe,GAAG,GAAG,SAAS,IAAI,aAAa,GAAG,CAAC;aACpD;YAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,GAAG,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;YAC9E,IAAI,CAAC,MAAM,EAAE;gBACX,MAAM,CAAC,IAAI,CAAC,6CAA6C,YAAY,2CAA2C,CAAC,CAAC;gBAClH,SAAS;aACV;YAED,MAAM,YAAY,GAAG;gBACnB,IAAI,EAAE,uBAAuB;gBAC7B,UAAU,EAAE;oBACV,cAAc,EAAE,WAAW;oBAC3B,aAAa,EAAE,EAAE;oBACjB,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;iBAC5B;aACF,CAAC;YACF,SAAS,CAAC,aAAa,CAAC,GAAG,YAAY,CAAC;SACzC;QACD,OAAO,MAAM,CAAC;;CACf;AAvCD,kFAuCC;AAED,SAAsB,oBAAoB,CAAC,GAAQ,EAAE,YAAoB,EAAE,eAAuB;;QAChG,MAAM,mBAAmB,GAAG,MAAM,2BAA2B,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAEjF,IAAI,uBAAuB,GAAG,KAAK,CAAC;QAEpC,KAAK,MAAM,YAAY,IAAI,mBAAmB,EAAE;YAC9C,MAAM,UAAU,GAAG,YAAY,CAAC,UAAU,CAAC;YAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;gBAC1C,OAAO,IAAI,CAAC;aACb;YACD,2EAA2E;YAC3E,uBAAuB,GAAG,IAAI,CAAC;SAChC;QACD,gDAAgD;QAChD,OAAO,CAAC,uBAAuB,CAAC;IAClC,CAAC;CAAA;AAfD,oDAeC;AAED,SAAsB,2BAA2B,CAAC,GAAQ,EAAE,YAAoB;;QAC9E,IAAI;YACF,MAAM,MAAM,GAAwC,MAAM,GAAG,CAAC,OAAO,CACnE,gBAAgB,EAChB,6BAA6B,EAC7B;gBACE,YAAY;aACb,CACF,CAAC;YACF,OAAO,MAAM,CAAC,mBAAmB,CAAC;SACnC;QAAC,OAAO,GAAG,EAAE;YACZ,mGAAmG;YACnG,OAAO,EAAE,CAAC;SACX;IACH,CAAC;CAAA;AAdD,kEAcC"}
package/dist/index.d.ts DELETED
@@ -1,10 +0,0 @@
1
- import { FunctionDefinition } from "serverless";
2
- export interface ExtendedFunctionDefinition extends FunctionDefinition {
3
- tags?: {
4
- [key: string]: string;
5
- };
6
- environment?: {
7
- [key: string]: string;
8
- };
9
- }
10
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,MAAM,WAAW,0BAA2B,SAAQ,kBAAkB;IACpE,IAAI,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IACjC,WAAW,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACzC"}
package/dist/index.js DELETED
@@ -1,161 +0,0 @@
1
- "use strict";
2
- /*
3
- * Unless explicitly stated otherwise all files in this repository are licensed
4
- * under the Apache License Version 2.0.
5
- *
6
- * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
- * Copyright 2019 Datadog, Inc.
8
- */
9
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
- return new (P || (P = Promise))(function (resolve, reject) {
12
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
- step((generator = generator.apply(thisArg, _arguments || [])).next());
16
- });
17
- };
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
22
- result["default"] = mod;
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const layers = __importStar(require("./layers.json"));
27
- const env_1 = require("./env");
28
- const layer_1 = require("./layer");
29
- const tracing_1 = require("./tracing");
30
- const wrapper_1 = require("./wrapper");
31
- const forwarder_1 = require("./forwarder");
32
- var TagKeys;
33
- (function (TagKeys) {
34
- TagKeys["Service"] = "service";
35
- TagKeys["Env"] = "env";
36
- })(TagKeys || (TagKeys = {}));
37
- module.exports = class ServerlessPlugin {
38
- constructor(serverless, _) {
39
- this.serverless = serverless;
40
- this.hooks = {
41
- "after:datadog:clean:init": this.afterPackageFunction.bind(this),
42
- "after:datadog:generate:init": this.beforePackageFunction.bind(this),
43
- "after:deploy:function:packageFunction": this.afterPackageFunction.bind(this),
44
- "after:package:createDeploymentArtifacts": this.afterPackageFunction.bind(this),
45
- "after:package:initialize": this.beforePackageFunction.bind(this),
46
- "before:deploy:function:packageFunction": this.beforePackageFunction.bind(this),
47
- "before:offline:start:init": this.beforePackageFunction.bind(this),
48
- "before:step-functions-offline:start": this.beforePackageFunction.bind(this),
49
- };
50
- this.commands = {
51
- datadog: {
52
- commands: {
53
- clean: {
54
- lifecycleEvents: ["init"],
55
- usage: "Cleans up wrapper handler functions for DataDog, not necessary in most cases",
56
- },
57
- generate: {
58
- lifecycleEvents: ["init"],
59
- usage: "Generates wrapper handler functions for DataDog, not necessary in most cases",
60
- },
61
- },
62
- lifecycleEvents: ["clean", "generate"],
63
- usage: "Automatically instruments your lambdas with DataDog",
64
- },
65
- };
66
- }
67
- beforePackageFunction() {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- this.serverless.cli.log("Auto instrumenting functions with Datadog");
70
- const config = env_1.getConfig(this.serverless.service);
71
- env_1.setEnvConfiguration(config, this.serverless.service);
72
- const defaultRuntime = this.serverless.service.provider.runtime;
73
- const handlers = layer_1.findHandlers(this.serverless.service, defaultRuntime);
74
- if (config.addLayers) {
75
- this.serverless.cli.log("Adding Lambda Layers to functions");
76
- this.debugLogHandlers(handlers);
77
- layer_1.applyLayers(this.serverless.service.provider.region, handlers, layers);
78
- }
79
- else {
80
- this.serverless.cli.log("Skipping adding Lambda Layers, make sure you are packaging them yourself");
81
- }
82
- let tracingMode = tracing_1.TracingMode.NONE;
83
- if (config.enableXrayTracing && config.enableDDTracing) {
84
- tracingMode = tracing_1.TracingMode.HYBRID;
85
- }
86
- else if (config.enableDDTracing) {
87
- tracingMode = tracing_1.TracingMode.DD_TRACE;
88
- }
89
- else if (config.enableXrayTracing) {
90
- tracingMode = tracing_1.TracingMode.XRAY;
91
- }
92
- tracing_1.enableTracing(this.serverless.service, tracingMode);
93
- });
94
- }
95
- afterPackageFunction() {
96
- return __awaiter(this, void 0, void 0, function* () {
97
- const config = env_1.getConfig(this.serverless.service);
98
- if (config.forwarder) {
99
- const aws = this.serverless.getProvider("aws");
100
- const errors = yield forwarder_1.addCloudWatchForwarderSubscriptions(this.serverless.service, aws, config.forwarder);
101
- for (const error of errors) {
102
- this.serverless.cli.log(error);
103
- }
104
- }
105
- if (config.enableTags) {
106
- this.serverless.cli.log("Adding service and environment tags to functions");
107
- this.addServiceAndEnvTags();
108
- }
109
- const defaultRuntime = this.serverless.service.provider.runtime;
110
- const handlers = layer_1.findHandlers(this.serverless.service, defaultRuntime);
111
- wrapper_1.redirectHandlers(handlers, config.addLayers);
112
- });
113
- }
114
- debugLogHandlers(handlers) {
115
- for (const handler of handlers) {
116
- if (handler.type === layer_1.RuntimeType.UNSUPPORTED) {
117
- if (handler.runtime === undefined) {
118
- this.serverless.cli.log(`Unable to determine runtime for function ${handler.name}`);
119
- }
120
- else {
121
- this.serverless.cli.log(`Unable to add Lambda Layers to function ${handler.name} with runtime ${handler.runtime}`);
122
- }
123
- }
124
- }
125
- }
126
- /**
127
- * Check for service and env tags on provider level (under tags and stackTags),
128
- * as well as function level. Automatically create tags for service and env with
129
- * properties from deployment configurations if needed; does not override any existing values.
130
- */
131
- addServiceAndEnvTags() {
132
- let providerServiceTagExists = false;
133
- let providerEnvTagExists = false;
134
- const provider = this.serverless.service.provider;
135
- const providerTags = provider.tags;
136
- if (providerTags !== undefined) {
137
- providerServiceTagExists = providerTags[TagKeys.Service] !== undefined;
138
- providerEnvTagExists = providerTags[TagKeys.Env] !== undefined;
139
- }
140
- const providerStackTags = provider.stackTags;
141
- if (providerStackTags !== undefined) {
142
- providerServiceTagExists = providerServiceTagExists || providerStackTags[TagKeys.Service] !== undefined;
143
- providerEnvTagExists = providerEnvTagExists || providerStackTags[TagKeys.Env] !== undefined;
144
- }
145
- if (!providerServiceTagExists || !providerEnvTagExists) {
146
- this.serverless.service.getAllFunctions().forEach((functionName) => {
147
- const functionDefintion = this.serverless.service.getFunction(functionName);
148
- if (!functionDefintion.tags) {
149
- functionDefintion.tags = {};
150
- }
151
- if (!providerServiceTagExists && !functionDefintion.tags[TagKeys.Service]) {
152
- functionDefintion.tags[TagKeys.Service] = this.serverless.service.getServiceName();
153
- }
154
- if (!providerEnvTagExists && !functionDefintion.tags[TagKeys.Env]) {
155
- functionDefintion.tags[TagKeys.Env] = this.serverless.getProvider("aws").getStage();
156
- }
157
- });
158
- }
159
- }
160
- };
161
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/layer.d.ts DELETED
@@ -1,26 +0,0 @@
1
- import { FunctionDefinition } from "serverless";
2
- import Service from "serverless/classes/Service";
3
- export declare enum RuntimeType {
4
- NODE = 0,
5
- PYTHON = 1,
6
- UNSUPPORTED = 2
7
- }
8
- export interface FunctionInfo {
9
- name: string;
10
- type: RuntimeType;
11
- handler: FunctionDefinition;
12
- runtime?: string;
13
- }
14
- export interface LayerJSON {
15
- regions: {
16
- [region: string]: {
17
- [runtime: string]: string | undefined;
18
- } | undefined;
19
- };
20
- }
21
- export declare const runtimeLookup: {
22
- [key: string]: RuntimeType;
23
- };
24
- export declare function findHandlers(service: Service, defaultRuntime?: string): FunctionInfo[];
25
- export declare function applyLayers(region: string, handlers: FunctionInfo[], layers: LayerJSON): void;
26
- //# sourceMappingURL=layer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAEjD,oBAAY,WAAW;IACrB,IAAI,IAAA;IACJ,MAAM,IAAA;IACN,WAAW,IAAA;CACZ;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE;QACP,CAAC,MAAM,EAAE,MAAM,GACX;YACE,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;SACvC,GACD,SAAS,CAAC;KACf,CAAC;CACH;AAED,eAAO,MAAM,aAAa,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAA;CAQvD,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAetF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,QAqBtF"}
package/dist/layer.js DELETED
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- var RuntimeType;
4
- (function (RuntimeType) {
5
- RuntimeType[RuntimeType["NODE"] = 0] = "NODE";
6
- RuntimeType[RuntimeType["PYTHON"] = 1] = "PYTHON";
7
- RuntimeType[RuntimeType["UNSUPPORTED"] = 2] = "UNSUPPORTED";
8
- })(RuntimeType = exports.RuntimeType || (exports.RuntimeType = {}));
9
- exports.runtimeLookup = {
10
- "nodejs10.x": RuntimeType.NODE,
11
- "nodejs12.x": RuntimeType.NODE,
12
- "nodejs8.10": RuntimeType.NODE,
13
- "python2.7": RuntimeType.PYTHON,
14
- "python3.6": RuntimeType.PYTHON,
15
- "python3.7": RuntimeType.PYTHON,
16
- "python3.8": RuntimeType.PYTHON,
17
- };
18
- function findHandlers(service, defaultRuntime) {
19
- const funcs = service.functions;
20
- return Object.entries(funcs)
21
- .map(([name, handler]) => {
22
- let { runtime } = handler;
23
- if (runtime === undefined) {
24
- runtime = defaultRuntime;
25
- }
26
- if (runtime !== undefined && runtime in exports.runtimeLookup) {
27
- return { type: exports.runtimeLookup[runtime], runtime, name, handler };
28
- }
29
- return { type: RuntimeType.UNSUPPORTED, runtime, name, handler };
30
- })
31
- .filter((result) => result !== undefined);
32
- }
33
- exports.findHandlers = findHandlers;
34
- function applyLayers(region, handlers, layers) {
35
- const regionRuntimes = layers.regions[region];
36
- if (regionRuntimes === undefined) {
37
- return;
38
- }
39
- for (const handler of handlers) {
40
- if (handler.type === RuntimeType.UNSUPPORTED) {
41
- continue;
42
- }
43
- const { runtime } = handler;
44
- const layerARN = runtime !== undefined ? regionRuntimes[runtime] : undefined;
45
- if (layerARN !== undefined) {
46
- const currentLayers = getLayers(handler);
47
- if (!new Set(currentLayers).has(layerARN)) {
48
- currentLayers.push(layerARN);
49
- }
50
- setLayers(handler, currentLayers);
51
- }
52
- }
53
- }
54
- exports.applyLayers = applyLayers;
55
- function getLayers(handler) {
56
- const layersList = handler.handler.layers;
57
- if (layersList === undefined) {
58
- return [];
59
- }
60
- return layersList;
61
- }
62
- function setLayers(handler, layers) {
63
- handler.handler.layers = layers;
64
- }
65
- //# sourceMappingURL=layer.js.map
package/dist/layer.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.js","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":";;AAUA,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,6CAAI,CAAA;IACJ,iDAAM,CAAA;IACN,2DAAW,CAAA;AACb,CAAC,EAJW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAItB;AAmBY,QAAA,aAAa,GAAmC;IAC3D,YAAY,EAAE,WAAW,CAAC,IAAI;IAC9B,YAAY,EAAE,WAAW,CAAC,IAAI;IAC9B,YAAY,EAAE,WAAW,CAAC,IAAI;IAC9B,WAAW,EAAE,WAAW,CAAC,MAAM;IAC/B,WAAW,EAAE,WAAW,CAAC,MAAM;IAC/B,WAAW,EAAE,WAAW,CAAC,MAAM;IAC/B,WAAW,EAAE,WAAW,CAAC,MAAM;CAChC,CAAC;AAEF,SAAgB,YAAY,CAAC,OAAgB,EAAE,cAAuB;IACpE,MAAM,KAAK,GAAI,OAAe,CAAC,SAAkD,CAAC;IAElF,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE;QACvB,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC1B,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO,GAAG,cAAc,CAAC;SAC1B;QACD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,qBAAa,EAAE;YACrD,OAAO,EAAE,IAAI,EAAE,qBAAa,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAkB,CAAC;SACjF;QACD,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAkB,CAAC;IACnF,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,SAAS,CAAmB,CAAC;AAChE,CAAC;AAfD,oCAeC;AAED,SAAgB,WAAW,CAAC,MAAc,EAAE,QAAwB,EAAE,MAAiB;IACrF,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,IAAI,cAAc,KAAK,SAAS,EAAE;QAChC,OAAO;KACR;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,WAAW,EAAE;YAC5C,SAAS;SACV;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAC5B,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7E,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACzC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B;YACD,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;SACnC;KACF;AACH,CAAC;AArBD,kCAqBC;AAED,SAAS,SAAS,CAAC,OAAqB;IACtC,MAAM,UAAU,GAAI,OAAO,CAAC,OAAe,CAAC,MAA8B,CAAC;IAC3E,IAAI,UAAU,KAAK,SAAS,EAAE;QAC5B,OAAO,EAAE,CAAC;KACX;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,OAAqB,EAAE,MAAgB;IACvD,OAAO,CAAC,OAAe,CAAC,MAAM,GAAG,MAAM,CAAC;AAC3C,CAAC"}