MCPcopy Create free account
hub / github.com/apache/skywalking-nodejs / AWS2LambdaPlugin

Class AWS2LambdaPlugin

src/plugins/AWS2LambdaPlugin.ts:31–98  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

29import { getAWS, execute } from '../aws/SDK2';
30
31class AWS2LambdaPlugin implements SwPlugin {
32 readonly module = 'aws-sdk';
33 readonly versions = '2.*';
34
35 install(installer: PluginInstaller): void {
36 const AWS = getAWS(installer);
37 const _Lambda = AWS.Lambda;
38
39 function Lambda(this: any) {
40 const lambda = _Lambda.apply(this, arguments);
41 const _invoke = lambda.invoke;
42
43 lambda.invoke = function (params: any, callback: any) {
44 if (params.InvocationType === 'DryRun') return _invoke.call(this, params, callback);
45
46 let funcName = params.FunctionName;
47 const li = funcName.lastIndexOf(':');
48 let name;
49
50 if (li === -1) name = funcName;
51 else {
52 // my-function:v1
53 if (funcName.indexOf(':') === -1) name = funcName.slice(li);
54 else name = funcName.slice(li + 1); // 123456789012:function:my-function, arn:aws:lambda:us-west-2:123456789012:function:my-function
55 }
56
57 const span = ContextManager.current.newExitSpan(
58 `AWS/Lambda/invoke/${name || ''}`,
59 Component.AWSLAMBDA_FUNCTION,
60 Component.HTTP,
61 );
62
63 span.component = Component.AWSLAMBDA_FUNCTION;
64 span.layer = SpanLayer.HTTP;
65
66 if (li !== -1) span.tag(Tag.arn(funcName));
67
68 if (config.awsLambdaChain) {
69 let payload = params.Payload;
70
71 if (payload instanceof Buffer) payload = payload.toString();
72
73 if (typeof payload === 'string') {
74 const traceid = JSON.stringify(`${span.inject().value}/${hostname()}`);
75 const keyTrace = JSON.stringify(KeyTrace);
76 const keyParams = JSON.stringify(KeyParams);
77
78 if (payload.match(/^\s*{\s*}\s*$/)) payload = `{${keyTrace}:${traceid}}`;
79 else if (payload.match(/^\s*{/))
80 payload = `{${keyTrace}:${traceid},${payload.slice(payload.indexOf('{') + 1)}`;
81 else payload = `{${keyTrace}:${traceid},${keyParams}:${payload}}`;
82
83 params = Object.assign({}, params, { Payload: payload });
84 }
85 }
86
87 return execute(span, this, _invoke, params, callback);
88 };

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected