@sentry/node
Version:
Sentry Node SDK using OpenTelemetry for performance instrumentation
78 lines (74 loc) • 2.59 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
const instrumentation = require('./vendored/instrumentation.js');
const core = require('@sentry/core');
const nodeCore = require('@sentry/node-core');
const debugBuild = require('../../../debug-build.js');
const INTEGRATION_NAME = "Hapi";
const instrumentHapi = nodeCore.generateInstrumentOnce(INTEGRATION_NAME, () => new instrumentation.HapiInstrumentation());
const _hapiIntegration = (() => {
return {
name: INTEGRATION_NAME,
setupOnce() {
instrumentHapi();
}
};
});
const hapiIntegration = core.defineIntegration(_hapiIntegration);
function isErrorEvent(event) {
return !!(event && typeof event === "object" && "error" in event && event.error);
}
function sendErrorToSentry(errorData) {
core.captureException(errorData, {
mechanism: {
type: "auto.function.hapi",
handled: false
}
});
}
const hapiErrorPlugin = {
name: "SentryHapiErrorPlugin",
version: core.SDK_VERSION,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
register: async function(serverArg) {
const server = serverArg;
server.events.on({ name: "request", channels: ["error"] }, (request, event) => {
if (core.getIsolationScope() !== core.getDefaultIsolationScope()) {
const route = request.route;
if (route.path) {
core.getIsolationScope().setTransactionName(`${route.method.toUpperCase()} ${route.path}`);
}
} else {
debugBuild.DEBUG_BUILD && core.debug.warn("Isolation scope is still the default isolation scope - skipping setting transactionName");
}
if (isErrorEvent(event)) {
sendErrorToSentry(event.error);
}
});
}
};
async function setupHapiErrorHandler(server) {
await server.register(hapiErrorPlugin);
const client = core.getClient();
if (client) {
client.on("spanStart", (span) => {
addHapiSpanAttributes(span);
});
}
nodeCore.ensureIsWrapped(server.register, "hapi");
}
function addHapiSpanAttributes(span) {
const attributes = core.spanToJSON(span).data;
const type = attributes["hapi.type"];
if (attributes[core.SEMANTIC_ATTRIBUTE_SENTRY_OP] || !type) {
return;
}
span.setAttributes({
[core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.http.otel.hapi",
[core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: `${type}.hapi`
});
}
exports.hapiErrorPlugin = hapiErrorPlugin;
exports.hapiIntegration = hapiIntegration;
exports.instrumentHapi = instrumentHapi;
exports.setupHapiErrorHandler = setupHapiErrorHandler;
//# sourceMappingURL=index.js.map