diff --git a/common/scripts/esbuild.js b/common/scripts/esbuild.js index 26cba9a4c7..cacd97971b 100644 --- a/common/scripts/esbuild.js +++ b/common/scripts/esbuild.js @@ -1,9 +1,9 @@ -const esbuild = require('esbuild'); -const path = require('path'); -const fs = require('fs'); -const { execSync } = require('child_process'); +const esbuild = require('esbuild') +const path = require('path') +const fs = require('fs') +const { execSync } = require('child_process') -const SCRIPT_DIR = __dirname; +const SCRIPT_DIR = __dirname const defaultConfig = { entryPoint: 'src/index.ts', @@ -14,31 +14,31 @@ const defaultConfig = { sourcemap: false, logLevel: 'error', external: ['snappy'], - define: {}, -}; + define: {} +} function getGitRevision() { try { - return '"' + execSync('git describe --all --long').toString().trim() + '"'; + return '"' + execSync('git describe --all --long').toString().trim() + '"' } catch (error) { - console.warn('Failed to get git revision:', error.message); - return ''; + console.warn('Failed to get git revision:', error.message) + return '' } } function getVersionFromScript(scriptPath) { try { - const absoluteScriptPath = path.resolve(SCRIPT_DIR, scriptPath); - return execSync(`node "${absoluteScriptPath}"`).toString().trim(); + const absoluteScriptPath = path.resolve(SCRIPT_DIR, scriptPath) + return execSync(`node "${absoluteScriptPath}"`).toString().trim() } catch (error) { - console.warn(`Failed to get version from ${scriptPath}:`, error.message); - return ''; + console.warn(`Failed to get version from ${scriptPath}:`, error.message) + return '' } } async function bundle(config) { // Ensure output directory exists - fs.mkdirSync(config.outdir, { recursive: true }); + fs.mkdirSync(config.outdir, { recursive: true }) try { await esbuild.build({ @@ -51,64 +51,64 @@ async function bundle(config) { keepNames: config.keepNames, sourcemap: config.sourcemap, external: config.external, - define: config.define, - }); - - console.log('Build completed successfully!'); + define: config.define + }) + + console.log('Build completed successfully!') } catch (error) { - console.error('Build failed:', error.message); - process.exit(1); + console.error('Build failed:', error.message) + process.exit(1) } } async function main() { - const args = process.argv.slice(2); - const config = { ...defaultConfig }; + const args = process.argv.slice(2) + const config = { ...defaultConfig } - const define = {}; + const define = {} - args.forEach(arg => { + args.forEach((arg) => { if (arg.startsWith('--')) { - const [key, value] = arg.slice(2).split('='); + const [key, value] = arg.slice(2).split('=') switch (key) { case 'entry': - config.entryPoint = value; - break; + config.entryPoint = value + break case 'minify': - config.minify = value !== 'false'; - break; + config.minify = value !== 'false' + break case 'keep-names': - config.keepNames = value !== 'false'; - break; + config.keepNames = value !== 'false' + break case 'external': - config.external.push(value); - break; + config.external.push(value) + break case 'sourcemap': - config.sourcemap = value !== 'false'; - break; + config.sourcemap = value !== 'false' + break case 'define': - define[value] = true; - break; + define[value] = true + break } } - }); + }) const env = { MODEL_VERSION: define['MODEL_VERSION'] ? getVersionFromScript('./show_version.js') : undefined, - VERSION: define['VERSION'] ? getVersionFromScript('./show_tag.js') : undefined, - GIT_REVISION: define['GIT_REVISION'] ? getGitRevision() : undefined, - }; + VERSION: getVersionFromScript('./show_tag.js'), + GIT_REVISION: define['GIT_REVISION'] ? getGitRevision() : undefined + } Object.entries(env).forEach(([key, value]) => { if (value) { - config.define[`process.env.${key}`] = value; + config.define[`process.env.${key}`] = value } - }); + }) - await bundle(config); + await bundle(config) } -main().catch(error => { - console.error('Unexpected error:', error); - process.exit(1); -}); \ No newline at end of file +main().catch((error) => { + console.error('Unexpected error:', error) + process.exit(1) +}) diff --git a/packages/analytics-service/package.json b/packages/analytics-service/package.json index 1a85c91f42..0e9795cb6a 100644 --- a/packages/analytics-service/package.json +++ b/packages/analytics-service/package.json @@ -43,8 +43,7 @@ "@hcengineering/analytics": "^0.6.0", "@hcengineering/measurements-otlp": "^0.6.0", "winston": "^3.11.0", - "winston-daily-rotate-file": "^5.0.0", - "@sentry/node": "^9.22.0" + "winston-daily-rotate-file": "^5.0.0" }, "repository": "https://github.com/hcengineering/platform", "publishConfig": { diff --git a/packages/analytics-service/src/index.ts b/packages/analytics-service/src/index.ts index 93e56f8768..3f7c9a2ff6 100644 --- a/packages/analytics-service/src/index.ts +++ b/packages/analytics-service/src/index.ts @@ -3,17 +3,39 @@ // import { AnalyticProvider, Analytics } from '@hcengineering/analytics' -import { SentryAnalyticProvider } from './sentry' +import { initOpenTelemetrySDK, reportOTELError } from '@hcengineering/measurements-otlp' -export * from './logging' -export * from './sentry' export * from '@hcengineering/measurements-otlp' +export * from './logging' -export function configureAnalytics (sentryDSN: string | undefined, config?: Record): void { - const providers: AnalyticProvider[] = [] - if (sentryDSN !== undefined && sentryDSN !== '') { - providers.push(new SentryAnalyticProvider(sentryDSN)) +class OTELAnalyticsProvider implements AnalyticProvider { + init (config: Record): boolean { + return true } + + setUser: (email: string, data: any) => void = (email, data) => {} + + setAlias: (distinctId: string, alias: string) => void = (distinctId, alias) => {} + + setTag: (key: string, value: string) => void = (key, value) => {} + + setWorkspace: (ws: string, guest: boolean) => void = (ws, guest) => {} + + handleEvent: (event: string, params: Record) => void = (event, params) => {} + + handleError (error: Error): void { + reportOTELError(error) + } + + navigate (path: string): void {} + + logout (): void {} +} + +export function configureAnalytics (serviceName: string, serviceVersion: string, config?: Record): void { + const providers: AnalyticProvider[] = [new OTELAnalyticsProvider()] + + initOpenTelemetrySDK(serviceName, serviceVersion) for (const provider of providers) { Analytics.init(provider, config ?? {}) } diff --git a/packages/analytics-service/src/sentry.ts b/packages/analytics-service/src/sentry.ts deleted file mode 100644 index 40446e7984..0000000000 --- a/packages/analytics-service/src/sentry.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { AnalyticProvider } from '@hcengineering/analytics' -import * as Sentry from '@sentry/node' - -export class SentryAnalyticProvider implements AnalyticProvider { - constructor (readonly SENTRY_DSN: string) {} - - init (config: Record): boolean { - Sentry.init({ - dsn: this.SENTRY_DSN, - integrations: (integrations) => { - // integrations will be all default integrations - return [ - ...integrations.filter((integration) => integration.name !== 'Console'), - Sentry.onUncaughtExceptionIntegration(), - Sentry.onUnhandledRejectionIntegration() - ] - }, - - // Set tracesSampleRate to 1.0 to capture 100% - // of transactions for performance monitoring. - // We recommend adjusting this value in production - tracesSampleRate: 1.0 - }) - return true - } - - setUser (socialId: string): void { - Sentry.setUser({ email: socialId }) - } - - setAlias (distinctId: string, alias: string): void { - // Sentry does not support aliasing like PostHog or Mixpanel - // This method is left empty intentionally - } - - setTag (key: string, value: string): void { - Sentry.setTag(key, value) - } - - setWorkspace (ws: string, guest: boolean): void { - const prop: string = guest ? 'visited-workspace' : 'workspace' - this.setTag(prop, ws) - } - - handleEvent (event: string): void { - // currently we don't need it, but maybe in future - // Sentry.captureMessage(event, 'log') - } - - handleError (error: Error): void { - Sentry.captureException(error) - } - - navigate (path: string): void {} - logout (): void {} -} diff --git a/packages/measurements-otlp/package.json b/packages/measurements-otlp/package.json index ace3b7b174..8ffa1ad9d2 100644 --- a/packages/measurements-otlp/package.json +++ b/packages/measurements-otlp/package.json @@ -39,7 +39,6 @@ }, "dependencies": { "@hcengineering/measurements": "^0.6.0", - "@sentry/node": "^9.22.0", "@opentelemetry/sdk-node": "^0.203.0", "@opentelemetry/sdk-logs": "^0.203.0", "@opentelemetry/auto-instrumentations-node": "^0.62.0", diff --git a/packages/measurements-otlp/src/telemetry.ts b/packages/measurements-otlp/src/telemetry.ts index 516ff0a7c4..aff65196e3 100644 --- a/packages/measurements-otlp/src/telemetry.ts +++ b/packages/measurements-otlp/src/telemetry.ts @@ -247,8 +247,12 @@ export class OpenTelemetryMetricsContext implements MeasureContext { this.otlpLogger.emit({ severityNumber: SeverityNumber.ERROR, severityText: 'error', + context: this.context, body: message, - attributes: args ?? {} + attributes: { + 'service.name': sdkServiceName, + ...(args ?? {}) + } }) } this.logger.error(message, { ...this.params, ...args, ...(this.logParams ?? {}) }) @@ -257,10 +261,14 @@ export class OpenTelemetryMetricsContext implements MeasureContext { info (message: string, args?: Record): void { if (this.otlpLogger !== undefined) { this.otlpLogger.emit({ + context: this.context, severityNumber: SeverityNumber.INFO, severityText: 'info', body: message, - attributes: args ?? {} + attributes: { + 'service.name': sdkServiceName, + ...(args ?? {}) + } }) } this.logger.info(message, { ...this.params, ...args, ...(this.logParams ?? {}) }) @@ -271,8 +279,12 @@ export class OpenTelemetryMetricsContext implements MeasureContext { this.otlpLogger.emit({ severityNumber: SeverityNumber.WARN, severityText: 'warn', + context: this.context, body: message, - attributes: args ?? {} + attributes: { + 'service.name': sdkServiceName, + ...(args ?? {}) + } }) } this.logger.warn(message, { ...this.params, ...args, ...(this.logParams ?? {}) }) @@ -336,20 +348,24 @@ function parseBaggage (baggageHeader?: string): Record { return result } -export function createOpenTelemetryMetricsContext ( - name: string, - params: ParamsType, - fullParams: FullParamsType | (() => FullParamsType) = {}, - metrics: Metrics = newMetrics(), - logger?: MeasureLogger, - version?: string -): MeasureContext { - // Traces +let sdk: NodeSDK | undefined +let sdkServiceName: string | undefined +let sdkServiceVersion: string | undefined +let loggerProvider: LoggerProvider | undefined + +export function initOpenTelemetrySDK (serviceName: string, version: string): boolean { + if (sdk !== undefined) { + return true + } + process.env.OTEL_SERVICE_NAME = serviceName + process.env.OTEL_SERVICE_VERSION = version + + sdkServiceName = serviceName + sdkServiceVersion = version const tracesUrl = getTracesUrl() if (tracesUrl === undefined) { - console.warn('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT is not set, OpenTelemetry metrics will not be sent') - return new MeasureMetricsContext(name, params, fullParams, metrics, logger) + return false } const traceHeaders = parseTraceExporterHeaders() @@ -402,12 +418,12 @@ export function createOpenTelemetryMetricsContext ( // SDK - const sdk = new NodeSDK({ + sdk = new NodeSDK({ spanProcessors: [batchSpanProcessor], - serviceName: name, + serviceName, traceExporter: exporter, resource: resourceFromAttributes({ - 'service-name': name, + 'service-name': serviceName, 'service-version': version ?? '0.7', 'deployment-environment': process.env.OTEL_ENVIRONMENT }), @@ -419,10 +435,14 @@ export function createOpenTelemetryMetricsContext ( sdk.start() + loggerProvider = new LoggerProvider({ + processors: [batchLogProcessor] + }) + // Graceful shutdown process.on('SIGTERM', () => { sdk - .shutdown() + ?.shutdown() .then(() => { console.log('Tracing terminated') }) @@ -431,14 +451,50 @@ export function createOpenTelemetryMetricsContext ( }) .finally(() => process.exit(0)) }) + console.log('Using open telemetry metrics context', { + traceEndpoint: tracesUrl, + tracerHeadersSet: Array.from(Object.keys(traceHeaders)), + logsEndpoint, + logHeadersSet: Array.from(Object.keys(logHeaders)) + }) + return true +} + +export function reportOTELError (error: Error): void { + if (sdkServiceName !== undefined && sdkServiceVersion !== undefined && loggerProvider !== undefined) { + const otlpLogger = loggerProvider?.getLogger(sdkServiceName, sdkServiceVersion) + otlpLogger?.emit({ + severityNumber: SeverityNumber.ERROR, + severityText: 'error', + body: error.message, + context: context.active(), + attributes: { + 'service.name': sdkServiceName, + 'service.version': sdkServiceVersion, + 'error.stack': error.stack + } + }) + } +} + +export function createOpenTelemetryMetricsContext ( + name: string, + params: ParamsType, + fullParams: FullParamsType | (() => FullParamsType) = {}, + metrics: Metrics = newMetrics(), + logger?: MeasureLogger, + version?: string +): MeasureContext { + if (!initOpenTelemetrySDK(name, version ?? '')) { + console.warn('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT is not set, OpenTelemetry metrics will not be sent') + return new MeasureMetricsContext(name, params, fullParams, metrics, logger) + } + + // Traces const tracer = trace.getTracer(name) - const loggerProvider = new LoggerProvider({ - processors: [batchLogProcessor] - }) - - const otlpLogger: Logger = loggerProvider.getLogger(name) + const otlpLogger = loggerProvider?.getLogger(sdkServiceName ?? name, version) const meter = otelMetrics.getMeter(name, version) @@ -457,12 +513,6 @@ export function createOpenTelemetryMetricsContext ( otlpLogger, new MetricsContext(meter) ) - ctx.info('Using open telemetry metrics context', { - traceEndpoint: tracesUrl, - tracerHeadersSet: Array.from(Object.keys(traceHeaders)), - logsEndpoint, - logHeadersSet: Array.from(Object.keys(logHeaders)) - }) return ctx } function parseTraceExporterHeaders (): Record { diff --git a/pods/account/src/__start.ts b/pods/account/src/__start.ts index af8564206e..c629131d53 100644 --- a/pods/account/src/__start.ts +++ b/pods/account/src/__start.ts @@ -8,7 +8,7 @@ import { newMetrics } from '@hcengineering/core' import { initStatisticsContext, loadBrandingMap } from '@hcengineering/server-core' import { join } from 'path' -configureAnalytics(process.env.SENTRY_DSN, {}) +configureAnalytics('account', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'account') const metricsContext = initStatisticsContext('account', { diff --git a/pods/backup/src/index.ts b/pods/backup/src/index.ts index a840fde315..cf2cca9689 100644 --- a/pods/backup/src/index.ts +++ b/pods/backup/src/index.ts @@ -68,9 +68,7 @@ const metricsContext = initStatisticsContext('backup', { ) }) -const sentryDSN = process.env.SENTRY_DSN - -configureAnalytics(sentryDSN, {}) +configureAnalytics('backup', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'backup-service') const usePrepare = (process.env.DB_PREPARE ?? 'true') === 'true' diff --git a/pods/collaborator/src/__start.ts b/pods/collaborator/src/__start.ts index f306be085c..f5caadee26 100644 --- a/pods/collaborator/src/__start.ts +++ b/pods/collaborator/src/__start.ts @@ -20,7 +20,7 @@ import { newMetrics } from '@hcengineering/core' import { initStatisticsContext } from '@hcengineering/server-core' import { join } from 'path' -configureAnalytics(process.env.SENTRY_DSN, {}) +configureAnalytics('collaborator', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'collaborator') const metricsContext = initStatisticsContext('collaborator', { diff --git a/pods/front/src/__start.ts b/pods/front/src/__start.ts index 1688559e8c..340cc76e0c 100644 --- a/pods/front/src/__start.ts +++ b/pods/front/src/__start.ts @@ -9,7 +9,7 @@ import { startFront } from '@hcengineering/front/src/starter' import { initStatisticsContext } from '@hcengineering/server-core' import { join } from 'path' -configureAnalytics(process.env.SENTRY_DSN, {}) +configureAnalytics('front', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'front') const metricsContext = initStatisticsContext('front', { diff --git a/pods/fulltext/src/index.ts b/pods/fulltext/src/index.ts index 146ac2b504..660ebea402 100644 --- a/pods/fulltext/src/index.ts +++ b/pods/fulltext/src/index.ts @@ -39,6 +39,7 @@ if (serverSecret === undefined) { setMetadata(serverToken.metadata.Secret, serverSecret) setMetadata(serverToken.metadata.Service, 'fulltext') +configureAnalytics('fulltext', process.env.VERSION ?? '0.7.0') const metricsContext = initStatisticsContext('fulltext', { factory: () => createOpenTelemetryMetricsContext( @@ -53,9 +54,6 @@ const metricsContext = initStatisticsContext('fulltext', { ) }) -const sentryDSN = process.env.SENTRY_DSN - -configureAnalytics(sentryDSN, {}) Analytics.setTag('application', 'fulltext') const dbURL = process.env.DB_URL diff --git a/pods/media/src/index.ts b/pods/media/src/index.ts index 4f5409172c..6bc1704ca6 100644 --- a/pods/media/src/index.ts +++ b/pods/media/src/index.ts @@ -41,7 +41,7 @@ const setupMetadata = (): void => { async function main (): Promise { setupMetadata() - configureAnalytics(process.env.SENTRY_DSN, {}) + configureAnalytics(application, process.env.VERSION ?? '0.7.0') Analytics.setTag('application', application) const ctx = initStatisticsContext(application, { diff --git a/pods/server/src/__start.ts b/pods/server/src/__start.ts index 943cfef16f..571982573c 100644 --- a/pods/server/src/__start.ts +++ b/pods/server/src/__start.ts @@ -26,7 +26,7 @@ import { join } from 'path' import { start } from '.' import { profileStart, profileStop } from './inspector' -configureAnalytics(process.env.SENTRY_DSN, {}) +configureAnalytics('server', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'transactor') let getStats: () => WorkspaceStatistics[] = () => { diff --git a/pods/stats/src/__start.ts b/pods/stats/src/__start.ts index d4f7fc2cbf..d43abaae18 100644 --- a/pods/stats/src/__start.ts +++ b/pods/stats/src/__start.ts @@ -8,7 +8,7 @@ import { writeFile } from 'fs/promises' import { join } from 'path' import { serveStats } from './stats' -configureAnalytics(process.env.SENTRY_DSN, {}) +configureAnalytics('stats', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'stats') const metricsContext = new MeasureMetricsContext( diff --git a/pods/workspace/src/__start.ts b/pods/workspace/src/__start.ts index 0ffb6762e4..c8c0228320 100644 --- a/pods/workspace/src/__start.ts +++ b/pods/workspace/src/__start.ts @@ -12,7 +12,7 @@ import { join } from 'path' const txes = JSON.parse(JSON.stringify(builder().getTxes())) as Tx[] -configureAnalytics(process.env.SENTRY_DSN, {}) +configureAnalytics('workspace', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'workspace') // Force create server metrics context with proper logging diff --git a/services/analytics-collector/pod-analytics-collector/src/main.ts b/services/analytics-collector/pod-analytics-collector/src/main.ts index 645d802e1f..08bce2b2a5 100644 --- a/services/analytics-collector/pod-analytics-collector/src/main.ts +++ b/services/analytics-collector/pod-analytics-collector/src/main.ts @@ -26,6 +26,7 @@ import { initStatisticsContext } from '@hcengineering/server-core' import config from './config' import { createServer, listen } from './server' +configureAnalytics('analytics-collector', process.env.VERSION ?? '0.7.0') const ctx = initStatisticsContext('analytics-collector', { factory: () => createOpenTelemetryMetricsContext( @@ -40,7 +41,6 @@ const ctx = initStatisticsContext('analytics-collector', { ) }) -configureAnalytics(config.SentryDSN, config) Analytics.setTag('application', 'analytics-collector-service') export const main = async (): Promise => { diff --git a/services/backup/backup-api-pod/src/main.ts b/services/backup/backup-api-pod/src/main.ts index 3b68a48505..fcbc388681 100644 --- a/services/backup/backup-api-pod/src/main.ts +++ b/services/backup/backup-api-pod/src/main.ts @@ -32,7 +32,7 @@ const setupMetadata = (): void => { export const main = async (): Promise => { setupMetadata() - configureAnalytics(process.env.SENTRY_DSN, {}) + configureAnalytics('backup-api', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'backup-api') const metricsContext = initStatisticsContext('backup-api', { diff --git a/services/billing/pod-billing/src/main.ts b/services/billing/pod-billing/src/main.ts index a89255cda8..20f3bbb3fb 100644 --- a/services/billing/pod-billing/src/main.ts +++ b/services/billing/pod-billing/src/main.ts @@ -33,7 +33,7 @@ const setupMetadata = (): void => { export const main = async (): Promise => { setupMetadata() - configureAnalytics(process.env.SENTRY_DSN, {}) + configureAnalytics('billing', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'billing') const metricsContext = initStatisticsContext('billing', { diff --git a/services/calendar/pod-calendar-mailer/src/index.ts b/services/calendar/pod-calendar-mailer/src/index.ts index 0371727679..a3d247b54d 100644 --- a/services/calendar/pod-calendar-mailer/src/index.ts +++ b/services/calendar/pod-calendar-mailer/src/index.ts @@ -26,6 +26,7 @@ import { eventCreated, eventDeleted, eventMixin, eventUpdated } from './handlers import { EventCUDMessage } from './types' async function main (): Promise { + configureAnalytics('calendar-mailer', process.env.VERSION ?? '0.7.0') const ctx = initStatisticsContext('calendar-mailer', { factory: () => createOpenTelemetryMetricsContext( @@ -40,7 +41,6 @@ async function main (): Promise { ) }) - configureAnalytics(config.sentryDSN, config) Analytics.setTag('application', 'calendar-mailer') setMetadata(serverToken.metadata.Secret, config.secret) setMetadata(serverToken.metadata.Service, 'calendar-mailer') diff --git a/services/datalake/pod-datalake/src/main.ts b/services/datalake/pod-datalake/src/main.ts index 261cef6ba5..2e4a217864 100644 --- a/services/datalake/pod-datalake/src/main.ts +++ b/services/datalake/pod-datalake/src/main.ts @@ -33,7 +33,7 @@ const setupMetadata = (): void => { export const main = async (): Promise => { setupMetadata() - configureAnalytics(process.env.SENTRY_DSN, {}) + configureAnalytics('datalake', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'datalake') const metricsContext = initStatisticsContext('datalake', { diff --git a/services/github/pod-github/src/index.ts b/services/github/pod-github/src/index.ts index 1824fc1e47..4cb28cc223 100644 --- a/services/github/pod-github/src/index.ts +++ b/services/github/pod-github/src/index.ts @@ -17,6 +17,7 @@ import { start } from './server' setMetadata(serverToken.metadata.Secret, config.ServerSecret) setMetadata(serverToken.metadata.Service, 'github') +configureAnalytics('github', process.env.VERSION ?? '0.7.0') const metricsContext = initStatisticsContext('github', { factory: () => createOpenTelemetryMetricsContext( @@ -31,7 +32,6 @@ const metricsContext = initStatisticsContext('github', { ) }) -configureAnalytics(config.SentryDSN, config) Analytics.setTag('application', 'github-service') let doOnClose: () => Promise = async () => {} diff --git a/services/mail/pod-mail/src/main.ts b/services/mail/pod-mail/src/main.ts index 87110b1bbd..1b70994c06 100644 --- a/services/mail/pod-mail/src/main.ts +++ b/services/mail/pod-mail/src/main.ts @@ -29,7 +29,7 @@ import { createServer, listen } from './server' import { Endpoint } from './types' export const main = async (): Promise => { - configureAnalytics(process.env.SENTRY_DSN, {}) + configureAnalytics('mail', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'mail') const measureCtx = initStatisticsContext('mail', { factory: () => diff --git a/services/telegram-bot/pod-telegram-bot/src/start.ts b/services/telegram-bot/pod-telegram-bot/src/start.ts index abfdccebcd..7c07c7a798 100644 --- a/services/telegram-bot/pod-telegram-bot/src/start.ts +++ b/services/telegram-bot/pod-telegram-bot/src/start.ts @@ -44,7 +44,7 @@ const ctx = initStatisticsContext('telegram-bot', { ) }) -configureAnalytics(config.SentryDSN, config) +configureAnalytics('telegram-bot-service', process.env.VERSION ?? '0.7.0') Analytics.setTag('application', 'telegram-bot-service') export const start = async (): Promise => {