import { defineIntegration } from '@sentry/core';
import { startInactiveSpan } from '@sentry/core';
import type { Client, Integration, IntegrationFn } from '@sentry/types';
const _databaseIntegration = (() => {
return {
name: 'DatabaseIntegration',
setup(client: Client) {
// Monkey-patch database library
const originalQuery = Database.prototype.query;
Database.prototype.query = function(sql: string, ...args: any[]) {
// Create span for database query
return startInactiveSpan({
name: sql,
op: 'db.query',
attributes: {
'db.system': 'postgresql',
'db.statement': sql
}
}, (span) => {
try {
const result = originalQuery.call(this, sql, ...args);
span?.setStatus({ code: 1 }); // OK
return result;
} catch (error) {
span?.setStatus({ code: 2 }); // ERROR
throw error;
}
});
};
}
} satisfies Integration;
}) satisfies IntegrationFn;
export const databaseIntegration = defineIntegration(_databaseIntegration);