in src/plugins/AWS2SNSPlugin.ts [38:92]
function SNS(this: any) {
const sns = _SNS.apply(this, arguments);
function instrument(name: string, addTraceId: any): void {
const _func = sns[name];
sns[name] = function (params: any, callback: any) {
const to = params.TopicArn
? `Topic/${params.TopicArn.slice(params.TopicArn.lastIndexOf(':') + 1)}`
: params.TargetArn
? `Target/${params.TargetArn.slice(params.TargetArn.lastIndexOf(':') + 1)}`
: params.PhoneNumber
? `Phone/${params.PhoneNumber}`
: '???';
const operation = `AWS/SNS/${name}/${to}`;
const span = ContextManager.current.newExitSpan(operation, Component.AWS_SNS, Component.HTTP);
const arn = params.TopicArn || params.TargetArn;
span.component = Component.AWS_SNS;
span.layer = SpanLayer.MQ;
if (arn) span.tag(Tag.arn(arn));
if (params.TopicArn) params = addTraceId(params, span);
return execute(span, this, _func, params, callback, 'mqBroker');
};
}
instrument('publish', (params: any, span: Span) => {
params = Object.assign({}, params);
params.MessageAttributes = params.MessageAttributes ? Object.assign({}, params.MessageAttributes) : {};
params.MessageAttributes.__revdTraceId = {
DataType: 'String',
StringValue: `${span.inject().value}/${hostname()}`,
};
return params;
});
instrument('publishBatch', (params: any, span: Span) => {
const traceId = { __revdTraceId: { DataType: 'String', StringValue: `${span.inject().value}/${hostname()}` } };
params = Object.assign({}, params);
params.PublishBatchRequestEntries = params.PublishBatchRequestEntries.map(
(e: any) =>
(e = Object.assign({}, e, {
MessageAttributes: e.MessageAttributes ? Object.assign({}, e.MessageAttributes, traceId) : traceId,
})),
);
return params;
});
return sns;
}