Skip to content

Instantly share code, notes, and snippets.

@khoatran
Created April 29, 2020 04:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save khoatran/de41f74d244aaa7a64ac4bff34175e0c to your computer and use it in GitHub Desktop.
Save khoatran/de41f74d244aaa7a64ac4bff34175e0c to your computer and use it in GitHub Desktop.
Xray
import * as AWSXRay from "aws-xray-sdk";
import { logger } from "./logger";
export function trace(name: string) {
return (target: any, key: string, descriptor: PropertyDescriptor) => {
const originalMethod = descriptor.value;
descriptor.value = async function() {
let segment: AWSXRay.Subsegment | null = null;
try {
try {
segment = AWSXRay.getSegment()!.addNewSubsegment(`${name}.${key}`);
} catch (err) {
// ignores this (only happens locally)
logError(err);
}
return await originalMethod.apply(this, arguments);
} catch (err) {
try {
segment!.addError(err);
} catch (err) {
// ignores this (only happens locally)
logError(err);
}
throw err;
} finally {
try {
segment!.close();
} catch (err) {
// ignores this (only happens locally)
logError(err);
}
}
};
return descriptor;
};
}
function logError(err: any) {
logger.warn("AWSXRay error", err);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment