From 54da9551d684dc7c6b0812611898e723b51fecc2 Mon Sep 17 00:00:00 2001 From: Rodrigo Nascimento Date: Thu, 18 Jul 2024 18:55:42 -0300 Subject: [PATCH] Start using open telemetry --- .gitignore | 1 + apps/meteor/app/api/server/api.ts | 20 +- apps/meteor/app/lib/server/lib/debug.js | 20 + .../app/metrics/server/lib/collectMetrics.ts | 18 +- .../server/NotificationQueue.ts | 30 +- apps/meteor/package.json | 4 + apps/meteor/server/cron/statistics.ts | 19 +- apps/meteor/server/main.ts | 1 + apps/meteor/server/models/raw/BaseRaw.ts | 131 +- apps/meteor/tracing.otel.grpc.js | 65 + development/agent.yml | 16 + development/collector.config.yml | 24 + development/docker-compose-monitoring.yml | 79 + development/grafana-datasources.yml | 30 + development/prometheus.yml | 11 + development/tempo.yml | 60 + package.json | 3 + packages/core-services/package.json | 1 + .../src/lib/asyncMethodCallContext.ts | 35 +- packages/instance-status/package.json | 3 +- packages/instance-status/src/index.ts | 13 +- packages/tracing/.eslintrc.json | 4 + packages/tracing/CHANGELOG.md | 1 + packages/tracing/package.json | 33 + packages/tracing/src/index.ts | 17 + packages/tracing/tsconfig.json | 8 + yarn.lock | 1460 ++++++++++++++++- 27 files changed, 1998 insertions(+), 109 deletions(-) create mode 100644 apps/meteor/tracing.otel.grpc.js create mode 100644 development/agent.yml create mode 100644 development/collector.config.yml create mode 100644 development/docker-compose-monitoring.yml create mode 100644 development/grafana-datasources.yml create mode 100644 development/prometheus.yml create mode 100644 development/tempo.yml create mode 100644 packages/tracing/.eslintrc.json create mode 100644 packages/tracing/CHANGELOG.md create mode 100644 packages/tracing/package.json create mode 100644 packages/tracing/src/index.ts create mode 100644 packages/tracing/tsconfig.json diff --git a/.gitignore b/.gitignore index 8ca2d018f92e5..8741b33f36c35 100644 --- a/.gitignore +++ b/.gitignore @@ -58,3 +58,4 @@ data/ registration.yaml storybook-static +development/tempo-data/ diff --git a/apps/meteor/app/api/server/api.ts b/apps/meteor/app/api/server/api.ts index bd81912af348f..58387b54667c2 100644 --- a/apps/meteor/app/api/server/api.ts +++ b/apps/meteor/app/api/server/api.ts @@ -1,9 +1,9 @@ -import { asyncMethodCallContextStore } from '@rocket.chat/core-services'; import type { IMethodConnection, IUser, IRoom } from '@rocket.chat/core-typings'; import { Logger } from '@rocket.chat/logger'; import { Users } from '@rocket.chat/models'; import { Random } from '@rocket.chat/random'; import type { JoinPathPattern, Method } from '@rocket.chat/rest-typings'; +import { trace, context, ROOT_CONTEXT } from '@rocket.chat/tracing'; import { Accounts } from 'meteor/accounts-base'; import { DDP } from 'meteor/ddp'; import { DDPCommon } from 'meteor/ddp-common'; @@ -38,6 +38,8 @@ import type { import { getUserInfo } from './helpers/getUserInfo'; import { parseJsonQuery } from './helpers/parseJsonQuery'; +const tracer = trace.getTracer('core'); + const logger = new Logger('API'); interface IAPIProperties { @@ -646,15 +648,23 @@ export class APIClass extends Restivus { this.queryFields = options.queryFields; this.parseJsonQuery = api.parseJsonQuery.bind(this as PartialThis); - // TODO: UUID - const store = [{ type: 'rest', route: this.request.route, method: this.request.method, userId: this.userId }]; + const span = tracer.startSpan(`${this.request.method} ${this.request.url}`, { + attributes: { + url: this.request.url, + route: this.request.route, + method: this.request.method, + userId: this.userId, + }, + }); - result = await asyncMethodCallContextStore.run(store, async () => { + result = await context.with(trace.setSpan(ROOT_CONTEXT, span), async () => { return ( (await DDP._CurrentInvocation.withValue(invocation as any, async () => originalAction.apply(this))) || API.v1.success() ); }); - console.log('api', this.request.route, { result }, store); + console.log('api', this.request.route, { result }, span.spanContext().traceId); + this.response.setHeader('X-Trace-Id', span.spanContext().traceId); + span.end(); log.http({ status: result.statusCode, diff --git a/apps/meteor/app/lib/server/lib/debug.js b/apps/meteor/app/lib/server/lib/debug.js index cbf38528579f8..26e1643882a77 100644 --- a/apps/meteor/app/lib/server/lib/debug.js +++ b/apps/meteor/app/lib/server/lib/debug.js @@ -1,5 +1,6 @@ import { InstanceStatus } from '@rocket.chat/instance-status'; import { Logger } from '@rocket.chat/logger'; +import { context, trace } from '@rocket.chat/tracing'; import { Meteor } from 'meteor/meteor'; import { WebApp } from 'meteor/webapp'; import _ from 'underscore'; @@ -50,6 +51,8 @@ const traceConnection = (enable, filter, prefix, name, connection, userId) => { } }; +const tracer = trace.getTracer('core'); + const wrapMethods = function (name, originalHandler, methodsMap) { methodsMap[name] = function (...originalArgs) { traceConnection(Log_Trace_Methods, Log_Trace_Methods_Filter, 'method', name, this.connection, this.userId); @@ -72,6 +75,23 @@ const wrapMethods = function (name, originalHandler, methodsMap) { ...getMethodArgs(name, originalArgs), }); + const currentSpan = trace.getSpan(context.active()); + if (currentSpan) { + const span = tracer.startSpan(`Method ${name}`, { + attributes: { + method: name, + userId: this.userId, + }, + }); + + const result = context.with(trace.setSpan(context.active(), span), () => { + return originalHandler.apply(this, originalArgs); + }); + end(); + span.end(); + return result; + } + const result = originalHandler.apply(this, originalArgs); end(); return result; diff --git a/apps/meteor/app/metrics/server/lib/collectMetrics.ts b/apps/meteor/app/metrics/server/lib/collectMetrics.ts index 978b3d59ec98d..fe97122569358 100644 --- a/apps/meteor/app/metrics/server/lib/collectMetrics.ts +++ b/apps/meteor/app/metrics/server/lib/collectMetrics.ts @@ -1,6 +1,7 @@ import http from 'http'; import { Statistics } from '@rocket.chat/models'; +import { trace, ROOT_CONTEXT, context } from '@rocket.chat/tracing'; import connect from 'connect'; import { Facts } from 'meteor/facts-base'; import { Meteor } from 'meteor/meteor'; @@ -16,6 +17,8 @@ import { getAppsStatistics } from '../../../statistics/server/lib/getAppsStatist import { Info } from '../../../utils/rocketchat.info'; import { metrics } from './metrics'; +const tracer = trace.getTracer('core'); + const { mongo } = MongoInternals.defaultRemoteCollectionDriver(); Facts.incrementServerFact = function (pkg: 'pkg' | 'fact', fact: string | number, increment: number): void { @@ -169,7 +172,20 @@ const updatePrometheusConfig = async (): Promise => { host: process.env.BIND_IP || '0.0.0.0', }); - timer = setInterval(setPrometheusData, 5000); + timer = setInterval(async () => { + const span = tracer.startSpan(`setPrometheusData`, { + attributes: { + port: is.port, + host: process.env.BIND_IP || '0.0.0.0', + }, + }); + + await context.with(trace.setSpan(ROOT_CONTEXT, span), async () => { + void setPrometheusData(); + }); + + span.end(); + }, 5000); } clearInterval(resetTimer); diff --git a/apps/meteor/app/notification-queue/server/NotificationQueue.ts b/apps/meteor/app/notification-queue/server/NotificationQueue.ts index f58eaec3f5766..060066cc4db71 100644 --- a/apps/meteor/app/notification-queue/server/NotificationQueue.ts +++ b/apps/meteor/app/notification-queue/server/NotificationQueue.ts @@ -1,11 +1,14 @@ import type { INotification, INotificationItemPush, INotificationItemEmail, NotificationItem, IUser } from '@rocket.chat/core-typings'; import { NotificationQueue, Users } from '@rocket.chat/models'; +import { context, ROOT_CONTEXT, trace } from '@rocket.chat/tracing'; import { Meteor } from 'meteor/meteor'; import { SystemLogger } from '../../../server/lib/logger/system'; import { sendEmailFromData } from '../../lib/server/functions/notifications/email'; import { PushNotification } from '../../push-notifications/server'; +const tracer = trace.getTracer('core'); + const { NOTIFICATIONS_WORKER_TIMEOUT = 2000, NOTIFICATIONS_BATCH_SIZE = 100, @@ -43,7 +46,21 @@ class NotificationClass { setTimeout(async () => { try { - await this.worker(); + const span = tracer.startSpan(`NotificationWorker`, { + attributes: { + a: new Date(), + }, + }); + + const continueLater = await context.with(trace.setSpan(ROOT_CONTEXT, span), async () => { + return this.worker(); + }); + + span.end(); + + if (continueLater) { + this.executeWorkerLater(); + } } catch (err) { SystemLogger.error({ msg: 'Error sending notification', err }); this.executeWorkerLater(); @@ -51,17 +68,17 @@ class NotificationClass { }, this.cyclePause); } - async worker(counter = 0): Promise { + async worker(counter = 0): Promise { const notification = await this.getNextNotification(); if (!notification) { - return this.executeWorkerLater(); + return true; } // Once we start notifying the user we anticipate all the schedules const flush = await NotificationQueue.clearScheduleByUserId(notification.uid); - // start worker again it queue flushed + // start worker again if queue flushed if (flush.modifiedCount) { await NotificationQueue.unsetSendingById(notification._id); return this.worker(counter); @@ -86,9 +103,10 @@ class NotificationClass { } if (counter >= this.maxBatchSize) { - return this.executeWorkerLater(); + return true; } - await this.worker(counter++); + + return this.worker(counter++); } getNextNotification(): Promise { diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 9bee550462737..a53d8f1a89144 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -221,6 +221,9 @@ "@nivo/heatmap": "0.84.0", "@nivo/line": "0.84.0", "@nivo/pie": "0.84.0", + "@opentelemetry/auto-instrumentations-node": "^0.48.0", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.1", + "@opentelemetry/sdk-node": "^0.52.1", "@react-aria/color": "^3.0.0-beta.15", "@react-aria/toolbar": "^3.0.0-beta.1", "@react-pdf/renderer": "^3.1.14", @@ -276,6 +279,7 @@ "@rocket.chat/sha256": "workspace:^", "@rocket.chat/string-helpers": "~0.31.25", "@rocket.chat/tools": "workspace:^", + "@rocket.chat/tracing": "workspace:^", "@rocket.chat/ui-avatar": "workspace:^", "@rocket.chat/ui-client": "workspace:^", "@rocket.chat/ui-composer": "workspace:^", diff --git a/apps/meteor/server/cron/statistics.ts b/apps/meteor/server/cron/statistics.ts index 846fac2c2e514..24b578b22f182 100644 --- a/apps/meteor/server/cron/statistics.ts +++ b/apps/meteor/server/cron/statistics.ts @@ -2,6 +2,7 @@ import { cronJobs } from '@rocket.chat/cron'; import type { Logger } from '@rocket.chat/logger'; import { Statistics } from '@rocket.chat/models'; import { serverFetch as fetch } from '@rocket.chat/server-fetch'; +import { context, trace, ROOT_CONTEXT } from '@rocket.chat/tracing'; import { Meteor } from 'meteor/meteor'; import { getWorkspaceAccessToken } from '../../app/cloud/server'; @@ -34,13 +35,27 @@ async function generateStatistics(logger: Logger): Promise { } } +const tracer = trace.getTracer('core'); + export async function statsCron(logger: Logger): Promise { const name = 'Generate and save statistics'; - await generateStatistics(logger); + const span = tracer.startSpan(`generateStatistics`); + + await context.with(trace.setSpan(ROOT_CONTEXT, span), async () => { + await generateStatistics(logger); + }); + + span.end(); const now = new Date(); await cronJobs.add(name, `12 ${now.getHours()} * * *`, async () => { - await generateStatistics(logger); + const span = tracer.startSpan(`generateStatistics`); + + await context.with(trace.setSpan(ROOT_CONTEXT, span), async () => { + await generateStatistics(logger); + }); + + span.end(); }); } diff --git a/apps/meteor/server/main.ts b/apps/meteor/server/main.ts index 294cdcd4feab8..549504d0e3df4 100644 --- a/apps/meteor/server/main.ts +++ b/apps/meteor/server/main.ts @@ -1,3 +1,4 @@ +import '@rocket.chat/tracing'; import './models/startup'; /** * ./settings uses top level await, in theory the settings creation diff --git a/apps/meteor/server/models/raw/BaseRaw.ts b/apps/meteor/server/models/raw/BaseRaw.ts index 6d9b21366d924..12b4e6e2caac4 100644 --- a/apps/meteor/server/models/raw/BaseRaw.ts +++ b/apps/meteor/server/models/raw/BaseRaw.ts @@ -1,8 +1,9 @@ -import { asyncMethodCallContextStore, traceInstanceMethods } from '@rocket.chat/core-services'; +import { traceInstanceMethods } from '@rocket.chat/core-services'; import type { RocketChatRecordDeleted } from '@rocket.chat/core-typings'; import type { IBaseModel, DefaultFields, ResultFields, FindPaginated, InsertionModel } from '@rocket.chat/model-typings'; import type { Updater } from '@rocket.chat/models'; import { getCollectionName, UpdaterImpl } from '@rocket.chat/models'; +import { context, trace } from '@rocket.chat/tracing'; import { MongoInternals } from 'meteor/mongo'; import { ObjectId } from 'mongodb'; import type { @@ -47,34 +48,51 @@ type ModelOptions = { _updatedAtIndexOptions?: Omit; }; -function getCallerNames(skip = 1, limit = 4) { - // const a = Date.now(); - let data = []; - try { - try { - throw new Error(); - } catch (e) { - // console.log(e.stack); - data = e.stack.match(/(?<=at )[^\(\n]+(?= \()/g).splice(skip, limit); - } - } catch (e) { - // return []; - } - // console.log(Date.now() - a); - return data; -} +// function getCallerNames(skip = 1, limit = 4) { +// // const a = Date.now(); +// let data = []; +// try { +// try { +// throw new Error(); +// } catch (e) { +// // console.log(e.stack); +// data = e.stack.match(/(?<=at )[^\(\n]+(?= \()/g).splice(skip, limit); +// } +// } catch (e) { +// // return []; +// } +// // console.log(Date.now() - a); +// return data; +// } const { client } = MongoInternals.defaultRemoteCollectionDriver().mongo; -// console.log(client); +const tracer = trace.getTracer('core'); +console.log(client); const DurationStart = new Map(); client.on('commandStarted', (event) => { - // const collection = event.command[event.commandName]; + // console.log(event); + const collection = event.command[event.commandName]; // if (collection !== 'rocketchat_settings') return; // console.log(JSON.stringify(event, null, 2)); // console.log('asyncMethodCallContextStore.getStore()', asyncMethodCallContextStore.getStore()); - if (asyncMethodCallContextStore.getStore()) { - DurationStart.set(event.requestId, { event, store: asyncMethodCallContextStore.getStore() }); + // if (asyncMethodCallContextStore.getStore()) { + const currentSpan = trace.getSpan(context.active()); + if (currentSpan) { + const span = tracer.startSpan(`mongodb ${collection}.${event.commandName}`, { + attributes: { + 'db.connection_string': event.address, + 'db.mongodb.collection': collection, + 'db.name': event.databaseName, + 'db.operation': event.commandName, + 'db.statement': JSON.stringify(event.command, null, 2), + 'db.system': 'mongodb', + // net.peer.name + // net.peer.port + }, + }); + + DurationStart.set(event.requestId, { event, span }); // console.log(JSON.stringify(event, 2)); } }); @@ -83,28 +101,31 @@ client.on('commandSucceeded', (event) => { return; } - const { event: startEvent, store } = DurationStart.get(event.requestId); + // const { event: startEvent, span } = DurationStart.get(event.requestId); + const { span } = DurationStart.get(event.requestId); DurationStart.delete(event.requestId); - const number = - event.reply.n ?? event.reply.cursor?.firstBatch?.length ?? event.reply.cursor?.nextBatch?.length ?? event.reply.lastErrorObject?.n ?? 0; - const { duration } = event; - const cmd = - startEvent.command.filter || - startEvent.command.query || - startEvent.command.deletes || - startEvent.command.updates || - startEvent.command.pipeline || - startEvent.command.indexes; - const result = { - type: 'db:command', - collection: startEvent.command[startEvent.commandName], - command: event.commandName, - caller: cmd?.$comment || JSON.stringify(cmd), - duration, - number, - }; - store.push(result); + span.end(); + + // const number = + // event.reply.n ?? event.reply.cursor?.firstBatch?.length ?? event.reply.cursor?.nextBatch?.length ?? event.reply.lastErrorObject?.n ?? 0; + // const { duration } = event; + // const cmd = + // startEvent.command.filter || + // startEvent.command.query || + // startEvent.command.deletes || + // startEvent.command.updates || + // startEvent.command.pipeline || + // startEvent.command.indexes; + // const result = { + // type: 'db:command', + // collection: startEvent.command[startEvent.commandName], + // command: event.commandName, + // caller: cmd?.$comment || JSON.stringify(cmd), + // duration, + // number, + // }; + // store.push(result); // console.log('asyncMethodCallContextStore.getStore()', asyncMethodCallContextStore.getStore()); // console.log('commandSucceeded', { duration, number }); // console.log(result); @@ -128,9 +149,6 @@ client.on('commandSucceeded', (event) => { }); client.on('commandFailed', (event) => DurationStart.delete(event.requestId)); -// const monitorMongoCommands = process.env.MONITOR_MONGO_COMMANDS === 'true'; -const monitorMongoCommands = true; - export abstract class BaseRaw< T extends { _id: string }, C extends DefaultFields = undefined, @@ -277,15 +295,6 @@ export abstract class BaseRaw< async findOne

(query: Filter | T['_id'] = {}, options?: any): Promise | WithId

| null> { const q: Filter = typeof query === 'string' ? ({ _id: query } as Filter) : query; - - // if (monitorMongoCommands) { - // console.log(1, q); - // if (typeof q === 'string') { - // q = { _id: q }; - // } - // q.$comment = getCallerNames().reverse().join(' > '); - // } - const optionsDef = this.doNotMixInclusionAndExclusionFields(options); if (optionsDef) { return this.col.findOne(q, optionsDef); @@ -301,14 +310,6 @@ export abstract class BaseRaw< query: Filter = {}, options?: FindOptions

, ): FindCursor> | FindCursor> { - // if (monitorMongoCommands) { - // console.log(2, query); - // if (typeof query === 'string') { - // query = { _id: query }; - // } - // query.$comment = getCallerNames().reverse().join(' > '); - // } - const optionsDef = this.doNotMixInclusionAndExclusionFields(options); return this.col.find(query, optionsDef); } @@ -316,14 +317,6 @@ export abstract class BaseRaw< findPaginated

(query: Filter, options?: FindOptions

): FindPaginated>>; findPaginated(query: Filter = {}, options?: any): FindPaginated>> { - // if (monitorMongoCommands) { - // console.log(3, query); - // if (typeof query === 'string') { - // query = { _id: query }; - // } - // query.$comment = getCallerNames().reverse().join(' > '); - // } - const optionsDef = this.doNotMixInclusionAndExclusionFields(options); const cursor = optionsDef ? this.col.find(query, optionsDef) : this.col.find(query); diff --git a/apps/meteor/tracing.otel.grpc.js b/apps/meteor/tracing.otel.grpc.js new file mode 100644 index 0000000000000..59e9dc447eb06 --- /dev/null +++ b/apps/meteor/tracing.otel.grpc.js @@ -0,0 +1,65 @@ +const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node'); +const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-grpc'); +const opentelemetry = require('@opentelemetry/sdk-node'); +// const { Resource } = require("@opentelemetry/resources") +// const { SemanticResourceAttributes } = require("@opentelemetry/semantic-conventions") +// const { NodeTracerProvider } = require("@opentelemetry/sdk-trace-node") +// const { BatchSpanProcessor } = require("@opentelemetry/sdk-trace-base") +// const opentelemetryAPI = require('@opentelemetry/api') + +// const dotenv = require("dotenv") +// dotenv.config() + +// const resource = Resource.default().merge( +// new Resource({ +// [SemanticResourceAttributes.SERVICE_NAME]: "quick-start-nodejs-manual-instrumentation", +// [SemanticResourceAttributes.SERVICE_VERSION]: "0.0.1", +// }) +// ) + +// const provider = new NodeTracerProvider({ resource: resource }) +const exporter = new OTLPTraceExporter(); +// const processor = new BatchSpanProcessor(exporter) +// provider.addSpanProcessor(processor) +// provider.register() + +const sdk = new opentelemetry.NodeSDK({ + traceExporter: exporter, + instrumentations: [ + getNodeAutoInstrumentations({ + '@opentelemetry/instrumentation-fs': { + enabled: false, + }, + '@opentelemetry/instrumentation-net': { + enabled: false, + }, + '@opentelemetry/instrumentation-express': { + enabled: false, + }, + '@opentelemetry/instrumentation-dns': { + enabled: false, + }, + '@opentelemetry/instrumentation-http': { + enabled: false, + }, + '@opentelemetry/instrumentation-connect': { + enabled: false, + }, + '@opentelemetry/instrumentation-mongodb': { + enabled: true, + enhancedDatabaseReporting: true, + // responseHook: (span, response) => { + // // console.log({ response }); + // // console.log({ response: JSON.stringify(response, null, 2) }); + // // span.setAttribute('mongodb.response', JSON.stringify(response)); + // span.updateName(span.name + ' ' + span.); + // }, + // dbStatementSerializer: (operation, parameters) => { + // return `${operation} ${parameters}`; + // } + }, + }), + ], + serviceName: 'core', +}); +sdk.start(); diff --git a/development/agent.yml b/development/agent.yml new file mode 100644 index 0000000000000..e40e39401d645 --- /dev/null +++ b/development/agent.yml @@ -0,0 +1,16 @@ +server: + log_level: debug + +traces: + configs: + - name: default + receivers: + otlp: + protocols: + grpc: + remote_write: + - endpoint: tempo:4317 + insecure: true + batch: + timeout: 5s + send_batch_size: 100 diff --git a/development/collector.config.yml b/development/collector.config.yml new file mode 100644 index 0000000000000..a284c46de8077 --- /dev/null +++ b/development/collector.config.yml @@ -0,0 +1,24 @@ +receivers: + otlp: + protocols: + grpc: + http: + +processors: + batch: + timeout: 100ms + +exporters: + logging: + loglevel: debug + otlp/1: + endpoint: tempo:4317 + tls: + insecure: true + +service: + pipelines: + traces: + receivers: [otlp] + processors: [batch] + exporters: [otlp/1] diff --git a/development/docker-compose-monitoring.yml b/development/docker-compose-monitoring.yml new file mode 100644 index 0000000000000..0d19915e05a7d --- /dev/null +++ b/development/docker-compose-monitoring.yml @@ -0,0 +1,79 @@ +services: + # Tempo runs as user 10001, and docker compose creates the volume as root. + # As such, we need to chown the volume in order for Tempo to start correctly. + init: + image: &tempoImage grafana/tempo:latest + user: root + entrypoint: + - "chown" + - "10001:10001" + - "/var/tempo" + volumes: + - ./tempo-data:/var/tempo + + tempo: + image: *tempoImage + command: [ "-config.file=/etc/tempo.yaml" ] + volumes: + - ./tempo.yml:/etc/tempo.yaml + - ./tempo-data:/var/tempo + ports: + - "14268" # jaeger ingest + - "3200" # tempo + - "4317" # otlp grpc + - "4318" # otlp http + - "9411" # zipkin2024-04-23T16:16:57+0000 + depends_on: + - init + + # # Generate fake traces... + # k6-tracing: + # image: ghcr.io/grafana/xk6-client-tracing:v0.0.5 + # environment: + # - ENDPOINT=agent:4317 + # restart: always + # depends_on: + # - tempo + + otel-collector: + image: otel/opentelemetry-collector-contrib:0.100.0 + command: + - "--config" + - "/otel-local-config.yaml" + volumes: + - ./collector.config.yml:/otel-local-config.yaml + ports: + - "4317:4317" + + # And put them in a Grafana Agent pipeline... + agent: + image: grafana/agent:v0.27.1 + volumes: + - ./agent.yml:/etc/agent.yaml + entrypoint: + - /bin/agent + - -config.file=/etc/agent.yaml + + prometheus: + image: prom/prometheus:latest + command: + - --config.file=/etc/prometheus.yaml + - --web.enable-remote-write-receiver + - --enable-feature=exemplar-storage + - --enable-feature=native-histograms + volumes: + - ./prometheus.yml:/etc/prometheus.yaml + ports: + - "9090:9090" + + grafana: + image: grafana/grafana:11.0.0 + volumes: + - ./grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yaml + environment: + - GF_AUTH_ANONYMOUS_ENABLED=true + - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin + - GF_AUTH_DISABLE_LOGIN_FORM=true + - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor + ports: + - "4000:3000" diff --git a/development/grafana-datasources.yml b/development/grafana-datasources.yml new file mode 100644 index 0000000000000..4a3bc2c4e7423 --- /dev/null +++ b/development/grafana-datasources.yml @@ -0,0 +1,30 @@ +apiVersion: 1 + +datasources: +- name: Prometheus + type: prometheus + uid: prometheus + access: proxy + orgId: 1 + url: http://prometheus:9090 + basicAuth: false + isDefault: false + version: 1 + editable: false + jsonData: + httpMethod: GET +- name: Tempo + type: tempo + access: proxy + orgId: 1 + url: http://tempo:3200 + basicAuth: false + isDefault: true + version: 1 + editable: false + apiVersion: 1 + uid: tempo + jsonData: + httpMethod: GET + serviceMap: + datasourceUid: prometheus diff --git a/development/prometheus.yml b/development/prometheus.yml new file mode 100644 index 0000000000000..eda5d0261c8f0 --- /dev/null +++ b/development/prometheus.yml @@ -0,0 +1,11 @@ +global: + scrape_interval: 15s + evaluation_interval: 15s + +scrape_configs: + - job_name: 'prometheus' + static_configs: + - targets: [ 'localhost:9090' ] + - job_name: 'tempo' + static_configs: + - targets: [ 'tempo:3200' ] diff --git a/development/tempo.yml b/development/tempo.yml new file mode 100644 index 0000000000000..b1ab5ce7607b6 --- /dev/null +++ b/development/tempo.yml @@ -0,0 +1,60 @@ +stream_over_http_enabled: true +server: + http_listen_port: 3200 + log_level: info + +query_frontend: + search: + duration_slo: 5s + throughput_bytes_slo: 1.073741824e+09 + trace_by_id: + duration_slo: 5s + +distributor: + receivers: # this configuration will listen on all ports and protocols that tempo is capable of. + jaeger: # the receives all come from the OpenTelemetry collector. more configuration information can + protocols: # be found there: https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver + thrift_http: # + grpc: # for a production deployment you should only enable the receivers you need! + thrift_binary: + thrift_compact: + zipkin: + otlp: + protocols: + http: + grpc: + opencensus: + +ingester: + max_block_duration: 5m # cut the headblock when this much time passes. this is being set for demo purposes and should probably be left alone normally + +compactor: + compaction: + block_retention: 1h # overall Tempo trace retention. set for demo purposes + +metrics_generator: + registry: + external_labels: + source: tempo + cluster: docker-compose + storage: + path: /var/tempo/generator/wal + remote_write: + - url: http://prometheus:9090/api/v1/write + send_exemplars: true + traces_storage: + path: /var/tempo/generator/traces + +storage: + trace: + backend: local # backend configuration to use + wal: + path: /var/tempo/wal # where to store the wal locally + local: + path: /var/tempo/blocks + +overrides: + defaults: + metrics_generator: + processors: [service-graphs, span-metrics, local-blocks] # enables metrics generator + generate_native_histograms: both diff --git a/package.json b/package.json index fd87a3e2b5ad3..907b741a28def 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,9 @@ "moleculer@^0.14.34": "patch:moleculer@npm%3A0.14.34#./.yarn/patches/moleculer-npm-0.14.34-440e26767d.patch" }, "dependencies": { + "@opentelemetry/auto-instrumentations-node": "^0.48.0", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.1", + "@opentelemetry/sdk-node": "^0.52.1", "node-gyp": "^9.4.1" } } diff --git a/packages/core-services/package.json b/packages/core-services/package.json index 8fd497e8c98d9..00ce4b8ab5f99 100644 --- a/packages/core-services/package.json +++ b/packages/core-services/package.json @@ -38,6 +38,7 @@ "@rocket.chat/message-parser": "workspace:^", "@rocket.chat/models": "workspace:^", "@rocket.chat/rest-typings": "workspace:^", + "@rocket.chat/tracing": "workspace:^", "@rocket.chat/ui-kit": "workspace:~" } } diff --git a/packages/core-services/src/lib/asyncMethodCallContext.ts b/packages/core-services/src/lib/asyncMethodCallContext.ts index ca7f4e6a7d4cb..8ea1466252800 100644 --- a/packages/core-services/src/lib/asyncMethodCallContext.ts +++ b/packages/core-services/src/lib/asyncMethodCallContext.ts @@ -1,3 +1,5 @@ +import { trace, context } from '@rocket.chat/tracing'; + import { AsyncContextStore } from './ContextStore'; export type asyncMethodCallContextStoreItem = { @@ -9,6 +11,8 @@ export type asyncMethodCallContextStoreItem = { export const asyncMethodCallContextStore = new AsyncContextStore(); +const tracer = trace.getTracer('core'); + export function traceInstanceMethods(instance: T, ignoreMethods: string[] = []): T { const className = instance.constructor.name; @@ -17,11 +21,34 @@ export function traceInstanceMethods(instance: T, ignoreMethod if (typeof target[prop] === 'function' && !ignoreMethods.includes(prop)) { return new Proxy(target[prop], { apply: (target, thisArg, argumentsList): any => { - const store = asyncMethodCallContextStore.getStore(); - if (store?.push) { - // console.log(store); - store.push({ type: 'model', method: `${className}.${prop}` }); + if (['doNotMixInclusionAndExclusionFields', 'ensureDefaultFields'].includes(prop)) { + return Reflect.apply(target, thisArg, argumentsList); } + + const currentSpan = trace.getSpan(context.active()); + if (currentSpan) { + // console.log(`in model ${className}.${prop}`); + const span = tracer.startSpan(`model ${className}.${prop}`, { + attributes: { + model: className, + method: prop, + parameters: JSON.stringify(argumentsList), + }, + }); + const result = context.with(trace.setSpan(context.active(), span), () => { + return Reflect.apply(target, thisArg, argumentsList); + }); + if (result instanceof Promise) { + result.finally(() => { + span.end(); + }); + return result; + } + span.end(); + return result; + } + + console.log(`out model ${className}.${prop}`, new Error().stack); return Reflect.apply(target, thisArg, argumentsList); }, }); diff --git a/packages/instance-status/package.json b/packages/instance-status/package.json index f369ebfa0cfce..21a1f9a9356b2 100644 --- a/packages/instance-status/package.json +++ b/packages/instance-status/package.json @@ -22,6 +22,7 @@ "/dist" ], "dependencies": { - "@rocket.chat/models": "workspace:^" + "@rocket.chat/models": "workspace:^", + "@rocket.chat/tracing": "workspace:^" } } diff --git a/packages/instance-status/src/index.ts b/packages/instance-status/src/index.ts index 0e74e1a7ef4f3..14b1750514d67 100644 --- a/packages/instance-status/src/index.ts +++ b/packages/instance-status/src/index.ts @@ -2,6 +2,7 @@ import { EventEmitter } from 'events'; import { InstanceStatus as InstanceStatusModel } from '@rocket.chat/models'; +import { context, ROOT_CONTEXT, trace } from '@rocket.chat/tracing'; import { v4 as uuidv4 } from 'uuid'; const events = new EventEmitter(); @@ -108,13 +109,21 @@ async function unregisterInstance() { let pingInterval: NodeJS.Timeout | null; +const tracer = trace.getTracer('core'); + function start(interval?: number) { stop(); interval = interval || defaultPingInterval; - pingInterval = setInterval(function () { - ping(); + pingInterval = setInterval(async function () { + const span = tracer.startSpan(`InstanceStatus.ping`); + + await context.with(trace.setSpan(ROOT_CONTEXT, span), async () => { + await ping(); + }); + + span.end(); }, interval * 1000); } diff --git a/packages/tracing/.eslintrc.json b/packages/tracing/.eslintrc.json new file mode 100644 index 0000000000000..a83aeda48e66d --- /dev/null +++ b/packages/tracing/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "extends": ["@rocket.chat/eslint-config"], + "ignorePatterns": ["**/dist"] +} diff --git a/packages/tracing/CHANGELOG.md b/packages/tracing/CHANGELOG.md new file mode 100644 index 0000000000000..74feff3cddcbe --- /dev/null +++ b/packages/tracing/CHANGELOG.md @@ -0,0 +1 @@ +# @rocket.chat/log-format diff --git a/packages/tracing/package.json b/packages/tracing/package.json new file mode 100644 index 0000000000000..aec850e052e03 --- /dev/null +++ b/packages/tracing/package.json @@ -0,0 +1,33 @@ +{ + "name": "@rocket.chat/tracing", + "version": "0.0.1", + "private": true, + "devDependencies": { + "@types/jest": "~29.5.7", + "eslint": "~8.45.0", + "jest": "~29.6.4", + "ts-jest": "~29.1.1", + "typescript": "~5.3.3" + }, + "scripts": { + "lint": "eslint --ext .js,.jsx,.ts,.tsx .", + "lint:fix": "eslint --ext .js,.jsx,.ts,.tsx . --fix", + "test": "jest", + "build": "rm -rf dist && tsc -p tsconfig.json", + "dev": "tsc -p tsconfig.json --watch --preserveWatchOutput" + }, + "main": "./src/index.ts", + "typings": "./dist/index.d.ts", + "files": [ + "/dist" + ], + "volta": { + "extends": "../../package.json" + }, + "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.48.0", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.1", + "@opentelemetry/sdk-node": "^0.52.1" + } +} diff --git a/packages/tracing/src/index.ts b/packages/tracing/src/index.ts new file mode 100644 index 0000000000000..13ce6e983df7b --- /dev/null +++ b/packages/tracing/src/index.ts @@ -0,0 +1,17 @@ +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-grpc'; +import opentelemetry from '@opentelemetry/sdk-node'; + +export { trace, context, ROOT_CONTEXT } from '@opentelemetry/api'; + +export const startTracing = () => { + const exporter = new OTLPTraceExporter(); + + const sdk = new opentelemetry.NodeSDK({ + traceExporter: exporter, + instrumentations: [], + serviceName: 'core', + }); + sdk.start(); +}; + +startTracing(); diff --git a/packages/tracing/tsconfig.json b/packages/tracing/tsconfig.json new file mode 100644 index 0000000000000..e2be47cf5499f --- /dev/null +++ b/packages/tracing/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.client.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist" + }, + "include": ["./src/**/*"] +} diff --git a/yarn.lock b/yarn.lock index 18b7b6e189d04..7bd8ac9176022 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4454,6 +4454,30 @@ __metadata: languageName: node linkType: hard +"@grpc/grpc-js@npm:^1.7.1": + version: 1.12.2 + resolution: "@grpc/grpc-js@npm:1.12.2" + dependencies: + "@grpc/proto-loader": ^0.7.13 + "@js-sdsl/ordered-map": ^4.4.2 + checksum: ee51317f92ec5331931b68bf3a4e485a6f7a715609b8aaa29573b3a2b211d5f37c48cda084e25e2bf21142925f8ec9ca49a9e613cbbe06b73785150825d171df + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.7.13": + version: 0.7.13 + resolution: "@grpc/proto-loader@npm:0.7.13" + dependencies: + lodash.camelcase: ^4.3.0 + long: ^5.0.0 + protobufjs: ^7.2.5 + yargs: ^17.7.2 + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: 399c1b8a4627f93dc31660d9636ea6bf58be5675cc7581e3df56a249369e5be02c6cd0d642c5332b0d5673bc8621619bc06fb045aa3e8f57383737b5d35930dc + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.11.10": version: 0.11.10 resolution: "@humanwhocodes/config-array@npm:0.11.10" @@ -4649,7 +4673,7 @@ __metadata: languageName: node linkType: hard -"@jest/core@npm:^29.7.0": +"@jest/core@npm:^29.6.4, @jest/core@npm:^29.7.0": version: 29.7.0 resolution: "@jest/core@npm:29.7.0" dependencies: @@ -5020,6 +5044,13 @@ __metadata: languageName: node linkType: hard +"@js-sdsl/ordered-map@npm:^4.4.2": + version: 4.4.2 + resolution: "@js-sdsl/ordered-map@npm:4.4.2" + checksum: a927ae4ff8565ecb75355cc6886a4f8fadbf2af1268143c96c0cce3ba01261d241c3f4ba77f21f3f017a00f91dfe9e0673e95f830255945c80a0e96c6d30508a + languageName: node + linkType: hard + "@juggle/resize-observer@npm:^3.3.1, @juggle/resize-observer@npm:^3.4.0": version: 3.4.0 resolution: "@juggle/resize-observer@npm:3.4.0" @@ -5858,6 +5889,961 @@ __metadata: languageName: node linkType: hard +"@opentelemetry/api-logs@npm:0.52.1, @opentelemetry/api-logs@npm:^0.52.0": + version: 0.52.1 + resolution: "@opentelemetry/api-logs@npm:0.52.1" + dependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 500cd35527580732921d198bd7007224402cb89fef791f0b64bea839c9f2ad796d54486ee9aee0ee6422ded3963cba793408086eda0adfec2bd1d66f9114d96c + languageName: node + linkType: hard + +"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.9.0": + version: 1.9.0 + resolution: "@opentelemetry/api@npm:1.9.0" + checksum: 9e88e59d53ced668f3daaecfd721071c5b85a67dd386f1c6f051d1be54375d850016c881f656ffbe9a03bedae85f7e89c2f2b635313f9c9b195ad033cdc31020 + languageName: node + linkType: hard + +"@opentelemetry/auto-instrumentations-node@npm:^0.48.0": + version: 0.48.0 + resolution: "@opentelemetry/auto-instrumentations-node@npm:0.48.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/instrumentation-amqplib": ^0.39.0 + "@opentelemetry/instrumentation-aws-lambda": ^0.43.0 + "@opentelemetry/instrumentation-aws-sdk": ^0.43.0 + "@opentelemetry/instrumentation-bunyan": ^0.40.0 + "@opentelemetry/instrumentation-cassandra-driver": ^0.40.0 + "@opentelemetry/instrumentation-connect": ^0.38.0 + "@opentelemetry/instrumentation-cucumber": ^0.8.0 + "@opentelemetry/instrumentation-dataloader": ^0.11.0 + "@opentelemetry/instrumentation-dns": ^0.38.0 + "@opentelemetry/instrumentation-express": ^0.41.0 + "@opentelemetry/instrumentation-fastify": ^0.38.0 + "@opentelemetry/instrumentation-fs": ^0.14.0 + "@opentelemetry/instrumentation-generic-pool": ^0.38.0 + "@opentelemetry/instrumentation-graphql": ^0.42.0 + "@opentelemetry/instrumentation-grpc": ^0.52.0 + "@opentelemetry/instrumentation-hapi": ^0.40.0 + "@opentelemetry/instrumentation-http": ^0.52.0 + "@opentelemetry/instrumentation-ioredis": ^0.42.0 + "@opentelemetry/instrumentation-knex": ^0.38.0 + "@opentelemetry/instrumentation-koa": ^0.42.0 + "@opentelemetry/instrumentation-lru-memoizer": ^0.39.0 + "@opentelemetry/instrumentation-memcached": ^0.38.0 + "@opentelemetry/instrumentation-mongodb": ^0.46.0 + "@opentelemetry/instrumentation-mongoose": ^0.40.0 + "@opentelemetry/instrumentation-mysql": ^0.40.0 + "@opentelemetry/instrumentation-mysql2": ^0.40.0 + "@opentelemetry/instrumentation-nestjs-core": ^0.39.0 + "@opentelemetry/instrumentation-net": ^0.38.0 + "@opentelemetry/instrumentation-pg": ^0.43.0 + "@opentelemetry/instrumentation-pino": ^0.41.0 + "@opentelemetry/instrumentation-redis": ^0.41.0 + "@opentelemetry/instrumentation-redis-4": ^0.41.0 + "@opentelemetry/instrumentation-restify": ^0.40.0 + "@opentelemetry/instrumentation-router": ^0.39.0 + "@opentelemetry/instrumentation-socket.io": ^0.41.0 + "@opentelemetry/instrumentation-tedious": ^0.12.0 + "@opentelemetry/instrumentation-undici": ^0.4.0 + "@opentelemetry/instrumentation-winston": ^0.39.0 + "@opentelemetry/resource-detector-alibaba-cloud": ^0.28.10 + "@opentelemetry/resource-detector-aws": ^1.5.2 + "@opentelemetry/resource-detector-azure": ^0.2.9 + "@opentelemetry/resource-detector-container": ^0.3.11 + "@opentelemetry/resource-detector-gcp": ^0.29.10 + "@opentelemetry/resources": ^1.24.0 + "@opentelemetry/sdk-node": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.4.1 + checksum: 5f7ce3e085fabdebd716253c4ac8b4d3d5225a67e4ba8e6d2893428bfe15c1b83eab2bb5c61d087dc6794b7b5491a5e3fd50d412b9d04b7c9c02a56ce8ae67b4 + languageName: node + linkType: hard + +"@opentelemetry/context-async-hooks@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/context-async-hooks@npm:1.25.1" + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: fb2ac7381ea8203a1321e2a4989c193b6eede0b0f46bafc150e452ac5fc4645127f0ca66f60e44ff2816032afc68cbe3ab9cf235fbdffb0ad83f484729b70e82 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/core@npm:1.25.1" + dependencies: + "@opentelemetry/semantic-conventions": 1.25.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: ba1672fde4a1cfd9b55bf6070db71b808702fe59c4a70cda52a6156b2c813827954a6b4d3c3641283d394ff75a69b6359a0487459b4d26cd7d714ab3d21bc780 + languageName: node + linkType: hard + +"@opentelemetry/core@npm:1.26.0, @opentelemetry/core@npm:^1.0.0, @opentelemetry/core@npm:^1.1.0, @opentelemetry/core@npm:^1.25.0, @opentelemetry/core@npm:^1.25.1, @opentelemetry/core@npm:^1.8.0": + version: 1.26.0 + resolution: "@opentelemetry/core@npm:1.26.0" + dependencies: + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: e5b06b4d69605927b850109c6b898f00a6a921171b3bf62335a4e00b9a170c1b93ddef6d7f8cc480a551faeaf81074b594f4462a91d4fbc4b313e64ff9ebd717 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-grpc@npm:0.52.1, @opentelemetry/exporter-trace-otlp-grpc@npm:^0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/exporter-trace-otlp-grpc@npm:0.52.1" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 1.25.1 + "@opentelemetry/otlp-grpc-exporter-base": 0.52.1 + "@opentelemetry/otlp-transformer": 0.52.1 + "@opentelemetry/resources": 1.25.1 + "@opentelemetry/sdk-trace-base": 1.25.1 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: c8f21e7a5802a7089c1f9f01a1f21934da7adf8526f36a16da6ba4f78e1a59e3da7c301070cd6df78d07555babb1853ab23180ea7df02eefea4ece66fccdf3d1 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-http@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/exporter-trace-otlp-http@npm:0.52.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/otlp-exporter-base": 0.52.1 + "@opentelemetry/otlp-transformer": 0.52.1 + "@opentelemetry/resources": 1.25.1 + "@opentelemetry/sdk-trace-base": 1.25.1 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: fa72c84c35268f500b8fdc4d1b388fbf7275170aa67a2b2712c1e6b0d657e208a1e1d222081f0a1860c3f204f12ff78c2f6fe622d08ea8123410f276883659e2 + languageName: node + linkType: hard + +"@opentelemetry/exporter-trace-otlp-proto@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/exporter-trace-otlp-proto@npm:0.52.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/otlp-exporter-base": 0.52.1 + "@opentelemetry/otlp-transformer": 0.52.1 + "@opentelemetry/resources": 1.25.1 + "@opentelemetry/sdk-trace-base": 1.25.1 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 1d46eb5055925fb1f4383bb65ccec7addcf53ab88f2f5e7393e4e99e72d4fe48a1d45027736d534aeb76e37c217f5a4f9deda51351afa614340196a28db55dab + languageName: node + linkType: hard + +"@opentelemetry/exporter-zipkin@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/exporter-zipkin@npm:1.25.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/resources": 1.25.1 + "@opentelemetry/sdk-trace-base": 1.25.1 + "@opentelemetry/semantic-conventions": 1.25.1 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 3ceade67522724642115e008e355b149b606088345c703b39ae4d7a2db3e4d883e9aa22181b49d50444bf0847ff7e0112b3ec4e5feb6acb1411038b3a3e81222 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-amqplib@npm:^0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-amqplib@npm:0.39.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 19e78e32efb42a45e524cafde7fa401433da422e03d8a8ef675d38af3d6c8687290abdc99909a51de445dcf09d37c02ea454a62856d67462602117a96545e322 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-aws-lambda@npm:^0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/instrumentation-aws-lambda@npm:0.43.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/propagator-aws-xray": ^1.3.1 + "@opentelemetry/resources": ^1.8.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + "@types/aws-lambda": 8.10.122 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: f2e7c8ba4a1f5a99f47071d879ac7a9180434a00c7e8db776a803e2a12e90299ad8d1ad3062626f5e8c58dd02232adc07b4a0736a26175b85a951efab5064def + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-aws-sdk@npm:^0.43.0": + version: 0.43.1 + resolution: "@opentelemetry/instrumentation-aws-sdk@npm:0.43.1" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/propagation-utils": ^0.30.10 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: b3c5a3893123cfff6f820be65e515d3d42cb7895a98d5c50b8d072e182dc8b8f475936df78a4180d4fa39b5d8e6e7a84b52952842bf14e7708f2c2d5e415492b + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-bunyan@npm:^0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-bunyan@npm:0.40.0" + dependencies: + "@opentelemetry/api-logs": ^0.52.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@types/bunyan": 1.8.9 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 67c76e0c39305f069b6564f4fe8315a2b91cdedadea66e2506a9cbeaf04de2c6d86fce75fcf982e556be0fa9e4f84baf2c59b02a5870590ecbf3838d41f8b1d5 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-cassandra-driver@npm:^0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-cassandra-driver@npm:0.40.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 6979a3c0c28226ace0071880d05cf0a418c119b3cf8fcea2e0398288dc7d541ac98935d1a6f9a77e80e8ea9f186e5044b9f791cd5668e3ed33406db6c0a9895f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-connect@npm:^0.38.0": + version: 0.38.0 + resolution: "@opentelemetry/instrumentation-connect@npm:0.38.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + "@types/connect": 3.4.36 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 4dff447ff9a7ee2ca94872d904df260213e8e05b27742713f8dce35593ec8f52bcb07adfb7730e7b208b8b49566e032cdee316f0ccea405e42ffc5804d222750 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-cucumber@npm:^0.8.0": + version: 0.8.0 + resolution: "@opentelemetry/instrumentation-cucumber@npm:0.8.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 951b9a1d60dfb33a3b4bdcd381e83fd89c2e820f49f86ff1317bcd1127345ec945702760cbbfdc06af75b67e17d85ab9a5f859d90f45d244e17503d0d1e3363d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dataloader@npm:^0.11.0": + version: 0.11.0 + resolution: "@opentelemetry/instrumentation-dataloader@npm:0.11.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 9aa330d08cd6219ee927ab72db3d2d4d080831251bf5dde49eb6c7a1852ac7ea34b8df88d56c19e2638333b58527a90e7c459c9a1529008b74bd489385119ce1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-dns@npm:^0.38.0": + version: 0.38.0 + resolution: "@opentelemetry/instrumentation-dns@npm:0.38.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + semver: ^7.5.4 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: e2105d6c8211525573657052dc1d64859046ab259de402b39ee901e8bcab2eafd16f6590e667f86e59db105aea7dab2a4130e2fba9c60e4588fa80cd52427360 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-express@npm:^0.41.0": + version: 0.41.1 + resolution: "@opentelemetry/instrumentation-express@npm:0.41.1" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: fe2939ab377cc4b1c6dfe77cae6d23156ccd227cc9984bf03eb5f108fa048815d6dd0be9a8240bb3bd053a271789c9928a9e544725e2e099709e9b2c60d456f0 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fastify@npm:^0.38.0": + version: 0.38.0 + resolution: "@opentelemetry/instrumentation-fastify@npm:0.38.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 3cd7996398d783397782fc327a336e37b1eaabee6c9d8a25daa15d86cf6634408bc790e67207548dcae61f064a4a85780d9ae51bc31414bd61e0291d22a8d3f8 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-fs@npm:^0.14.0": + version: 0.14.0 + resolution: "@opentelemetry/instrumentation-fs@npm:0.14.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: cc6b90e9496bddbbc992adf3cb585b728260e6b22d35e48720e06505e2477e962bd1b62d9d1bf331c877c04ce7b393d87d2f61a3ade08519b73252a342351bf0 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-generic-pool@npm:^0.38.0": + version: 0.38.1 + resolution: "@opentelemetry/instrumentation-generic-pool@npm:0.38.1" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 19183c1d160d4c54d684305f6638163b5d2b84112b69e8281cd507e5ec5fa505431bc9a435f6c537bdea66a2820b4a231ed64c19da847d76e795036fcbfbd393 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-graphql@npm:^0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-graphql@npm:0.42.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: cae523cf75312457dc176a1ae2e4157b41025c5d01d8174467c8a62f8031c3a90151888fcdd804778183f58618ec320a24fe78f5bb0a1a72a119dc37245be676 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-grpc@npm:^0.52.0": + version: 0.52.1 + resolution: "@opentelemetry/instrumentation-grpc@npm:0.52.1" + dependencies: + "@opentelemetry/instrumentation": 0.52.1 + "@opentelemetry/semantic-conventions": 1.25.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: aa14515e5cb8b922f3414540fdaf986bb68f283ab05c57d5f6dad6f9a1f44c6416e5d8e4f6d2467829fb3f4afaf38c5d1c107574481297052477a34e28892cd1 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-hapi@npm:^0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-hapi@npm:0.40.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 71ff845ca2376b5f1cf7514d649f829044dec6486e784351a26278afc092a1cd90eb0eaf34ab79afcae9244e8b126d6059ac0c7c286743ceb8e12126cf7e0255 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-http@npm:^0.52.0": + version: 0.52.1 + resolution: "@opentelemetry/instrumentation-http@npm:0.52.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/instrumentation": 0.52.1 + "@opentelemetry/semantic-conventions": 1.25.1 + semver: ^7.5.2 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 67a31e14d9ee4da745b7529777c1525f717b2ddf09f2a9247acaa9677f32e4a863d8f0712c95917fdbe74d8211cf650065bb3a95ef2fdd9f81630e063cbc2d4f + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-ioredis@npm:^0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-ioredis@npm:0.42.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/redis-common": ^0.36.2 + "@opentelemetry/semantic-conventions": ^1.23.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: ae4804732b4380007b09ba11051aae927da0c53cd74d556916a838fb4de4f3c2aa7156bc05c4f34e6669411835604a4587822b2b585c51042e502d0e5079c143 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-knex@npm:^0.38.0": + version: 0.38.0 + resolution: "@opentelemetry/instrumentation-knex@npm:0.38.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 9ba68b8a0278ea9d1192023c1e28773eb098f7cbd2e71dab4dc9129e646bb1026bfab2c832a79e318519157dc0b0f0c73c535e31c78d72c764810c28a394dbe8 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-koa@npm:^0.42.0": + version: 0.42.0 + resolution: "@opentelemetry/instrumentation-koa@npm:0.42.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 4e41f4b1c2abb4d31151ae3b5999af3247affa99fadcf87ff542a8523f108275d83a54057d79453ff56bc40938a622803562db87c826bfac9f99fb409207c6fd + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-lru-memoizer@npm:^0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-lru-memoizer@npm:0.39.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 4a9b973bbf4fe77b11fafb4215bd9985f6a3c7ce487af965d98e5502e91a3fb78fc70a3f2238ef46a9c065e1555dfc08c22c39f0d1eb3925cd88c3201c8a79e5 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-memcached@npm:^0.38.0": + version: 0.38.0 + resolution: "@opentelemetry/instrumentation-memcached@npm:0.38.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.23.0 + "@types/memcached": ^2.2.6 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 05e8e25c809461e8aedaf3ba37eec1bbed6cec1307a28a93a986ea1828b791dc2488cd2f83b0fec678c402b7e703fc7ab884274036d0b5df48c8e70b9376648b + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongodb@npm:^0.46.0": + version: 0.46.0 + resolution: "@opentelemetry/instrumentation-mongodb@npm:0.46.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/sdk-metrics": ^1.9.1 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: fab5db536e2e95177a0ae0975bd8b9fc76f2d59bf89a6023547ba39071b97789859e1ac0582f86498a263611403a70b5f543b025207180770c07e178b04af5ad + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mongoose@npm:^0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-mongoose@npm:0.40.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 3ee4cdee6afc93b313f013ef35a2d4829244e463dceea9229c71e0d4c9d398051986978591d253129f83ec75c5417837d068c1408296faa6d5566a53a8683270 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql2@npm:^0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-mysql2@npm:0.40.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + "@opentelemetry/sql-common": ^0.40.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: acdb9883d1ab92d0bfbe507736888cc0b0d7b25c3d24c27b51add17abceff4bf15988a3cd2e54b93256f28bbc65aa172f116df9277545143e20e8d7b497e2e63 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-mysql@npm:^0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-mysql@npm:0.40.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + "@types/mysql": 2.15.22 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 6eeba06f7507ab9086ef18b9e37802f12ac0a9f6182d4aba3aaf71a3e0f0759cb51c044247653eb8e359383d922a12a0fc0f129b2982bae17910462450cdb189 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-nestjs-core@npm:^0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-nestjs-core@npm:0.39.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.23.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 4394754ce3ef4747e39a59a602c744112f9d6d3ee7ef43a51f1562a977a8e2bb2944687d3dd199f0a5941517e71a84ff9ea9ce183d94b63a3311e9de6ac8e09c + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-net@npm:^0.38.0": + version: 0.38.0 + resolution: "@opentelemetry/instrumentation-net@npm:0.38.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.23.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 13b4e12272ec3c7c2930a4dfd5eabf843d9e008a651c6a5f778236676526a76c563af7d313bf0edb390377d62112c07382b176f64beeffd534ed4f2c04923ccb + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pg@npm:^0.43.0": + version: 0.43.0 + resolution: "@opentelemetry/instrumentation-pg@npm:0.43.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + "@opentelemetry/sql-common": ^0.40.1 + "@types/pg": 8.6.1 + "@types/pg-pool": 2.0.4 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: d255806b9e5ffd449b7ab3c7c072e919ad8a18118cdf5aec636d89a89d9ac63ef282f280d3b2dd7fa9c57e748fc0c9b38294911bf1aaff35e821079aaeacbd82 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-pino@npm:^0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-pino@npm:0.41.0" + dependencies: + "@opentelemetry/api-logs": ^0.52.0 + "@opentelemetry/core": ^1.25.0 + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 1eb2a67513952e3cd7db0ea5fac39a6dffdf28f8ce514af7f39d70263780d1495773e6554bf386e6935c2f0145ca4a73cb4829f6ee91c630bbc85d5ccd164ce0 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis-4@npm:^0.41.0": + version: 0.41.1 + resolution: "@opentelemetry/instrumentation-redis-4@npm:0.41.1" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/redis-common": ^0.36.2 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: d67c542e9ea30bf7dcfb651eba033636d8ee379a135455c314688327c6bcb6512e7f41b7e1e97cbd62475f4afda2582f9be5ac0fd87cf2e008cdfa337a5b667d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-redis@npm:^0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-redis@npm:0.41.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/redis-common": ^0.36.2 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: a1caf71394ece352da20159e007d938fb22cea6c0c266addfa5e59dcf639c7d16404531edb1a7c94a3464db275927f8886f13e67eacedc3e94d97ff4b55c23aa + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-restify@npm:^0.40.0": + version: 0.40.0 + resolution: "@opentelemetry/instrumentation-restify@npm:0.40.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 813b755bd4510d8eef5322e1c9d0aa93407eea62a9bf4f3a82fa2ba38ecfa7e9fe287299eeef84cd4a2912ae9aceecb6392b40fb763d4329f953cb86a69eae61 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-router@npm:^0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-router@npm:0.39.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 802d4179caab4a0ae40745f200809efe6ed1a0e837483dacddb8dcecfe808f7ca42ddac9358715c8949bd59e91da2e7ef1e2afbd0203e22a48af1620f9437c10 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-socket.io@npm:^0.41.0": + version: 0.41.0 + resolution: "@opentelemetry/instrumentation-socket.io@npm:0.41.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: a50e66dabc1670906dba51bbcbabcdfdb865157b38e7086ce07275b8d3bde3263fa527a1b054ce55d8bbf8bba3ad6aba64319019015eb85299d46f1e3334f8e0 + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-tedious@npm:^0.12.0": + version: 0.12.0 + resolution: "@opentelemetry/instrumentation-tedious@npm:0.12.0" + dependencies: + "@opentelemetry/instrumentation": ^0.52.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + "@types/tedious": ^4.0.10 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: 7e82164311f0e6f474ba0af86445539d4538e46aba469a107fcafaf25faab0a5063c84748da617145f9548d98f20eb7f27c646c4b4bc8962ea466949311bec4d + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-undici@npm:^0.4.0": + version: 0.4.0 + resolution: "@opentelemetry/instrumentation-undici@npm:0.4.0" + dependencies: + "@opentelemetry/core": ^1.8.0 + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.7.0 + checksum: 99ed9a52d39fab430f46e47a4682f40aa58be2754879252600a9eb46551ea93f34274850984eb270a73f8b6ab79d4712132b16bac1a4446eacd7430d9cddf91e + languageName: node + linkType: hard + +"@opentelemetry/instrumentation-winston@npm:^0.39.0": + version: 0.39.0 + resolution: "@opentelemetry/instrumentation-winston@npm:0.39.0" + dependencies: + "@opentelemetry/api-logs": ^0.52.0 + "@opentelemetry/instrumentation": ^0.52.0 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: df2d28ae4dbe65294afeaee36b5b914d96473674e968f939bfd64a2288730b21911c920168b4f2e4961d8b03c988e327ae828b84a5d1875cb424b84b6fd80e1a + languageName: node + linkType: hard + +"@opentelemetry/instrumentation@npm:0.52.1, @opentelemetry/instrumentation@npm:^0.52.0": + version: 0.52.1 + resolution: "@opentelemetry/instrumentation@npm:0.52.1" + dependencies: + "@opentelemetry/api-logs": 0.52.1 + "@types/shimmer": ^1.0.2 + import-in-the-middle: ^1.8.1 + require-in-the-middle: ^7.1.1 + semver: ^7.5.2 + shimmer: ^1.2.1 + peerDependencies: + "@opentelemetry/api": ^1.3.0 + checksum: e8b4f202dc9355ca46714349a5e1663346e162f79706eed38015edf38fc536330fde4cc19ed7d3d6b03258c890c1dc0ba6d658d7aac3f41f1803bd03699d2701 + languageName: node + linkType: hard + +"@opentelemetry/otlp-exporter-base@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/otlp-exporter-base@npm:0.52.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/otlp-transformer": 0.52.1 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: a1629886907a393e24a91ef5adc389e093d3725dd2957bc29903442541b2a30673100b13c200c37fe0a2e2fec53ced8b47ad90064ebc49f2e9382c2b1719d3c3 + languageName: node + linkType: hard + +"@opentelemetry/otlp-grpc-exporter-base@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/otlp-grpc-exporter-base@npm:0.52.1" + dependencies: + "@grpc/grpc-js": ^1.7.1 + "@opentelemetry/core": 1.25.1 + "@opentelemetry/otlp-exporter-base": 0.52.1 + "@opentelemetry/otlp-transformer": 0.52.1 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 22b1eb92ceec038807d60b7341bea7237ea903f0e2cf91b4fefbaf4cc283518b89a819da18b966a4b61915c7143e00ccc51ef909c3de5fa518b0dbe6c78abc5f + languageName: node + linkType: hard + +"@opentelemetry/otlp-transformer@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/otlp-transformer@npm:0.52.1" + dependencies: + "@opentelemetry/api-logs": 0.52.1 + "@opentelemetry/core": 1.25.1 + "@opentelemetry/resources": 1.25.1 + "@opentelemetry/sdk-logs": 0.52.1 + "@opentelemetry/sdk-metrics": 1.25.1 + "@opentelemetry/sdk-trace-base": 1.25.1 + protobufjs: ^7.3.0 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 0e083ee484a79506d8ce41a8dd5d2d4d7669c380ac1ef9c313c348a6af8384365d2b90d99165590cced6453ce9192c0fe270d9cc974e9240e8ca02a6cf70151d + languageName: node + linkType: hard + +"@opentelemetry/propagation-utils@npm:^0.30.10": + version: 0.30.11 + resolution: "@opentelemetry/propagation-utils@npm:0.30.11" + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 4cce9958ca40b042adda8601b651799f1a140a513dd8c085094cb88265470bf40a04ed5f84301d891fef90f59698802e20828311b6189e4ab6c741101d8ac248 + languageName: node + linkType: hard + +"@opentelemetry/propagator-aws-xray@npm:^1.3.1": + version: 1.26.0 + resolution: "@opentelemetry/propagator-aws-xray@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 34a0c208c28a558dbdf4650f7aac40bb93ad4e3be6458bdcbf4db1516f0b2bd16bf59fb05ab2ad00fd066e11c5923767def4d3498ad4dc4d7bc54494a1b04719 + languageName: node + linkType: hard + +"@opentelemetry/propagator-b3@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/propagator-b3@npm:1.25.1" + dependencies: + "@opentelemetry/core": 1.25.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 7aef1e192b33533dfc9fd759efc9cea65cc29f1f35c0e1a2bb4065244ed9a78b18d4a9c843c646484e61f83834d6162ae2a1ebfc40750e4eae844e5dd4b85565 + languageName: node + linkType: hard + +"@opentelemetry/propagator-jaeger@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/propagator-jaeger@npm:1.25.1" + dependencies: + "@opentelemetry/core": 1.25.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 89b1e9f4daa2494ef472a16ddf1eb8cad547f78bf3255cf724113c346fe9be9965fd36ed5ffcb4098ecfec25ebb120d8e3e06a5783999cdf552f164047938028 + languageName: node + linkType: hard + +"@opentelemetry/redis-common@npm:^0.36.2": + version: 0.36.2 + resolution: "@opentelemetry/redis-common@npm:0.36.2" + checksum: b0a6f2c2dc64ba3b655ed944a5a33715d00365865e6f498005527a4ad6c40ca0e7b8ac531791b6d5abfbab9b22d9c6aa1cd8bcc851a7634dfb381ad2d5061b0d + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-alibaba-cloud@npm:^0.28.10": + version: 0.28.10 + resolution: "@opentelemetry/resource-detector-alibaba-cloud@npm:0.28.10" + dependencies: + "@opentelemetry/resources": ^1.0.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 0fc29cdcb618c54f2cb123e03fc1c110de9df176c78adfca531daaabed4502ed4d1b5450e55bfb9efef3053aa8fe25b250dd21c91b52bbdd18911a931aa1cf2b + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-aws@npm:^1.5.2": + version: 1.6.2 + resolution: "@opentelemetry/resource-detector-aws@npm:1.6.2" + dependencies: + "@opentelemetry/core": ^1.0.0 + "@opentelemetry/resources": ^1.10.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 82047c95f4ac1cf9eb6688ac924562cdf5e31bc9ebf4d1f2205e652de92350e6f85b111a220a1156d77fcafdbf513aaabb69919da19c8ce83fc3e6a3dd0dde8e + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-azure@npm:^0.2.9": + version: 0.2.11 + resolution: "@opentelemetry/resource-detector-azure@npm:0.2.11" + dependencies: + "@opentelemetry/core": ^1.25.1 + "@opentelemetry/resources": ^1.10.1 + "@opentelemetry/semantic-conventions": ^1.27.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 13515be1d57f9a9611064224e55766a7a66176d85bcbc62e7313e261c0a40e8c02e6ec024ed51f1e20ce16f3e969a601a756d2130f01b24a1e088743886903b3 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-container@npm:^0.3.11": + version: 0.3.11 + resolution: "@opentelemetry/resource-detector-container@npm:0.3.11" + dependencies: + "@opentelemetry/resources": ^1.0.0 + "@opentelemetry/semantic-conventions": ^1.22.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 900c4f2466899a8a03613b3b6216e2954e8f65232c679dac208d08bcd755bd5c3c2473f61fd265b0b42531bee7d6aae83e96e47e3ebd02d2f5960fef2f340ca3 + languageName: node + linkType: hard + +"@opentelemetry/resource-detector-gcp@npm:^0.29.10": + version: 0.29.12 + resolution: "@opentelemetry/resource-detector-gcp@npm:0.29.12" + dependencies: + "@opentelemetry/core": ^1.0.0 + "@opentelemetry/resources": ^1.10.0 + "@opentelemetry/semantic-conventions": ^1.27.0 + gcp-metadata: ^6.0.0 + peerDependencies: + "@opentelemetry/api": ^1.0.0 + checksum: 5460a3c3cf9484dc38aff5625f7f905c08b380468b1ae3e0677c3b5a9319ba2297fd00a517361c28dcd8812a73e680fe5bf123bbcfdd240bc7d786b681998d3d + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/resources@npm:1.25.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/semantic-conventions": 1.25.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 806e5aabbc93afcab767dc84707f702ca51bbc93e4565eb69a8591ed2fe78439aca19c5ca0d9f044c85ed97b9efb35936fdb65bef01f5f3e68504002c8a07220 + languageName: node + linkType: hard + +"@opentelemetry/resources@npm:1.26.0, @opentelemetry/resources@npm:^1.0.0, @opentelemetry/resources@npm:^1.10.0, @opentelemetry/resources@npm:^1.10.1, @opentelemetry/resources@npm:^1.24.0, @opentelemetry/resources@npm:^1.8.0": + version: 1.26.0 + resolution: "@opentelemetry/resources@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/semantic-conventions": 1.27.0 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: f70b0fdf4fb00c950bc30084818c92a5339f1be5d709bd681ab14453e877d6bb9f700324b8e65a0eabfeea618d01ed071abf9088e00fa0bf7f3305b1abad22cb + languageName: node + linkType: hard + +"@opentelemetry/sdk-logs@npm:0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/sdk-logs@npm:0.52.1" + dependencies: + "@opentelemetry/api-logs": 0.52.1 + "@opentelemetry/core": 1.25.1 + "@opentelemetry/resources": 1.25.1 + peerDependencies: + "@opentelemetry/api": ">=1.4.0 <1.10.0" + checksum: 16bdccd8250d96df0ffcadb63b107135d207072c1da52d056f00b211ca56924413d53a529cc0e362d96bd1bf33aa801eba51b395c5cb290b8c66fb1b988a7ff6 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/sdk-metrics@npm:1.25.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/resources": 1.25.1 + lodash.merge: ^4.6.2 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: efd3902d30e75bfc16e4208ffc92096743148ed8cec84900d05f98cc17ff146c711c398c3a526589433509c82399641b0759b4ba9fffc12be2e5007a55af7517 + languageName: node + linkType: hard + +"@opentelemetry/sdk-metrics@npm:^1.9.1": + version: 1.26.0 + resolution: "@opentelemetry/sdk-metrics@npm:1.26.0" + dependencies: + "@opentelemetry/core": 1.26.0 + "@opentelemetry/resources": 1.26.0 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: c7fd09991bc28c4cfa0eef2e75a9fcfd1465638327e50ce55fb7631c9e333ae27c7c4bfbb4875c8fbb60f94bb60a307af157a898ea21f13fef967ab5e1146ed5 + languageName: node + linkType: hard + +"@opentelemetry/sdk-node@npm:^0.52.0, @opentelemetry/sdk-node@npm:^0.52.1": + version: 0.52.1 + resolution: "@opentelemetry/sdk-node@npm:0.52.1" + dependencies: + "@opentelemetry/api-logs": 0.52.1 + "@opentelemetry/core": 1.25.1 + "@opentelemetry/exporter-trace-otlp-grpc": 0.52.1 + "@opentelemetry/exporter-trace-otlp-http": 0.52.1 + "@opentelemetry/exporter-trace-otlp-proto": 0.52.1 + "@opentelemetry/exporter-zipkin": 1.25.1 + "@opentelemetry/instrumentation": 0.52.1 + "@opentelemetry/resources": 1.25.1 + "@opentelemetry/sdk-logs": 0.52.1 + "@opentelemetry/sdk-metrics": 1.25.1 + "@opentelemetry/sdk-trace-base": 1.25.1 + "@opentelemetry/sdk-trace-node": 1.25.1 + "@opentelemetry/semantic-conventions": 1.25.1 + peerDependencies: + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 601f598fb0c7d50387c4d078a7f0436598c99f3a4c0eda4dd18bae00474d6ee9836adb148fb230b6bc351b8119c5dcba1f9803adfb807d19f30956c0a9a7eba5 + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-base@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/sdk-trace-base@npm:1.25.1" + dependencies: + "@opentelemetry/core": 1.25.1 + "@opentelemetry/resources": 1.25.1 + "@opentelemetry/semantic-conventions": 1.25.1 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: 8ac97f7d8d36bf412c5f47ff98ded07c5dfd11602a6ae7657ec7b5f50bb6ddaa20fc682626afcf74e21b375dbad0d1d47c8e20204d5139431afec25165f6252b + languageName: node + linkType: hard + +"@opentelemetry/sdk-trace-node@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/sdk-trace-node@npm:1.25.1" + dependencies: + "@opentelemetry/context-async-hooks": 1.25.1 + "@opentelemetry/core": 1.25.1 + "@opentelemetry/propagator-b3": 1.25.1 + "@opentelemetry/propagator-jaeger": 1.25.1 + "@opentelemetry/sdk-trace-base": 1.25.1 + semver: ^7.5.2 + peerDependencies: + "@opentelemetry/api": ">=1.0.0 <1.10.0" + checksum: f6835329651f5d888a90d95f6f86d5f660158029af2e01b68a5a0e21b2eb9dd40147dd6b0c321a12f65924c3ec1574d4ed2c6f05eea5c85280a82f3a95436bdb + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.25.1": + version: 1.25.1 + resolution: "@opentelemetry/semantic-conventions@npm:1.25.1" + checksum: fea418a4b09c55121c6da11c49dd2105116533838c484aead17e8acf8029dad711e145849812f9c61f9e48fad8e2b6cf103d2c18847ca993032ce9b27c2f863d + languageName: node + linkType: hard + +"@opentelemetry/semantic-conventions@npm:1.27.0, @opentelemetry/semantic-conventions@npm:^1.22.0, @opentelemetry/semantic-conventions@npm:^1.23.0, @opentelemetry/semantic-conventions@npm:^1.27.0": + version: 1.27.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.27.0" + checksum: 26d85f8d13c8c64024f7a84528cff41d56afc9829e7ff8a654576404f8b2c1a9c264adcc6fa5a9551bacdd938a4a464041fa9493e0a722e5605f2c2ae6752398 + languageName: node + linkType: hard + +"@opentelemetry/sql-common@npm:^0.40.1": + version: 0.40.1 + resolution: "@opentelemetry/sql-common@npm:0.40.1" + dependencies: + "@opentelemetry/core": ^1.1.0 + peerDependencies: + "@opentelemetry/api": ^1.1.0 + checksum: 23529740531937dee137c9680dbd2f7abf6a7d7340fbd48d309707601fa6255a5e8c2626c8e1c285b49c0b3429f2b3a8e6cbf7f7240820ecfeb52e2ba5ed6740 + languageName: node + linkType: hard + "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -5929,6 +6915,79 @@ __metadata: languageName: node linkType: hard +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 011fe7ef0826b0fd1a95935a033a3c0fd08483903e1aa8f8b4e0704e3233406abb9ee25350ec0c20bbecb2aad8da0dcea58b392bbd77d6690736f02c143865d2 + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 67173ac34de1e242c55da52c2f5bdc65505d82453893f9b51dc74af9fe4c065cf4a657a4538e91b0d4a1a1e0a0642215e31894c31650ff6e3831471061e1ee9e + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 59240c850b1d3d0b56d8f8098dd04787dcaec5c5bd8de186fa548de86b86076e1c50e80144b90335e705a044edf5bc8b0998548474c2a10a98c7e004a1547e4b + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 0369163a3d226851682f855f81413cbf166cd98f131edb94a0f67f79e75342d86e89df9d7a1df08ac28be2bc77e0a7f0200526bb6c2a407abbfee1f0262d5fd7 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": ^1.1.1 + "@protobufjs/inquire": ^1.1.0 + checksum: 3fce7e09eb3f1171dd55a192066450f65324fd5f7cc01a431df01bb00d0a895e6bfb5b0c5561ce157ee1d886349c90703d10a4e11a1a256418ff591b969b3477 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 5781e1241270b8bd1591d324ca9e3a3128d2f768077a446187a049e36505e91bc4156ed5ac3159c3ce3d2ba3743dbc757b051b2d723eea9cd367bfd54ab29b2f + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: ca06f02eaf65ca36fb7498fc3492b7fc087bfcc85c702bac5b86fad34b692bdce4990e0ef444c1e2aea8c034227bd1f0484be02810d5d7e931c55445555646f4 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 856eeb532b16a7aac071cacde5c5620df800db4c80cee6dbc56380524736205aae21e5ae47739114bf669ab5e8ba0e767a282ad894f3b5e124197cb9224445ee + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: d6a34fbbd24f729e2a10ee915b74e1d77d52214de626b921b2d77288bd8f2386808da2315080f2905761527cceffe7ec34c7647bd21a5ae41a25e8212ff79451 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: f9bf3163d13aaa3b6f5e6fbf37a116e094ea021c0e1f2a7ccd0e12a29e2ce08dafba4e8b36e13f8ed7397e1591610ce880ed1289af4d66cf4ace8a36a9557278 + languageName: node + linkType: hard + "@radix-ui/number@npm:1.0.1": version: 1.0.1 resolution: "@radix-ui/number@npm:1.0.1" @@ -8894,6 +9953,7 @@ __metadata: "@rocket.chat/message-parser": "workspace:^" "@rocket.chat/models": "workspace:^" "@rocket.chat/rest-typings": "workspace:^" + "@rocket.chat/tracing": "workspace:^" "@rocket.chat/ui-kit": "workspace:~" "@types/jest": ~29.5.13 babel-jest: ^29.5.0 @@ -9367,6 +10427,7 @@ __metadata: dependencies: "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/models": "workspace:^" + "@rocket.chat/tracing": "workspace:^" eslint: ~8.45.0 mongodb: ^4.17.2 prettier: ~2.8.8 @@ -9636,6 +10697,9 @@ __metadata: "@nivo/heatmap": 0.84.0 "@nivo/line": 0.84.0 "@nivo/pie": 0.84.0 + "@opentelemetry/auto-instrumentations-node": ^0.48.0 + "@opentelemetry/exporter-trace-otlp-grpc": ^0.52.1 + "@opentelemetry/sdk-node": ^0.52.1 "@playwright/test": ^1.40.1 "@react-aria/color": ^3.0.0-beta.15 "@react-aria/toolbar": ^3.0.0-beta.1 @@ -9696,6 +10760,7 @@ __metadata: "@rocket.chat/sha256": "workspace:^" "@rocket.chat/string-helpers": ~0.31.25 "@rocket.chat/tools": "workspace:^" + "@rocket.chat/tracing": "workspace:^" "@rocket.chat/ui-avatar": "workspace:^" "@rocket.chat/ui-client": "workspace:^" "@rocket.chat/ui-composer": "workspace:^" @@ -10545,6 +11610,22 @@ __metadata: languageName: unknown linkType: soft +"@rocket.chat/tracing@workspace:^, @rocket.chat/tracing@workspace:packages/tracing": + version: 0.0.0-use.local + resolution: "@rocket.chat/tracing@workspace:packages/tracing" + dependencies: + "@opentelemetry/api": ^1.9.0 + "@opentelemetry/auto-instrumentations-node": ^0.48.0 + "@opentelemetry/exporter-trace-otlp-grpc": ^0.52.1 + "@opentelemetry/sdk-node": ^0.52.1 + "@types/jest": ~29.5.7 + eslint: ~8.45.0 + jest: ~29.6.4 + ts-jest: ~29.1.1 + typescript: ~5.3.3 + languageName: unknown + linkType: soft + "@rocket.chat/ui-avatar@workspace:^, @rocket.chat/ui-avatar@workspace:packages/ui-avatar, @rocket.chat/ui-avatar@workspace:~": version: 0.0.0-use.local resolution: "@rocket.chat/ui-avatar@workspace:packages/ui-avatar" @@ -13366,6 +14447,13 @@ __metadata: languageName: node linkType: hard +"@types/aws-lambda@npm:8.10.122": + version: 8.10.122 + resolution: "@types/aws-lambda@npm:8.10.122" + checksum: 5c2e02ae8fc0eea90fa3b1014f401a8567695e65910fb53452e813b9b58761c956fba50ac7da606b97e07d881d264ff513573d279e7116f3c6b9590fdb093f31 + languageName: node + linkType: hard + "@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14": version: 7.20.3 resolution: "@types/babel__core@npm:7.20.3" @@ -13474,6 +14562,15 @@ __metadata: languageName: node linkType: hard +"@types/bunyan@npm:1.8.9": + version: 1.8.9 + resolution: "@types/bunyan@npm:1.8.9" + dependencies: + "@types/node": "*" + checksum: 0635ca1906acda4fbce5aed0b9ba16c857e13081724ae5d30aae61083f03f80b299f05e8e573e2804e530ec4b7c2a68ee7f2f522afde664a41122d16e0a39db0 + languageName: node + linkType: hard + "@types/busboy@npm:^1.5.4": version: 1.5.4 resolution: "@types/busboy@npm:1.5.4" @@ -13579,6 +14676,15 @@ __metadata: languageName: node linkType: hard +"@types/connect@npm:3.4.36": + version: 3.4.36 + resolution: "@types/connect@npm:3.4.36" + dependencies: + "@types/node": "*" + checksum: 4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172 + languageName: node + linkType: hard + "@types/cookie-parser@npm:^1.4.7": version: 1.4.7 resolution: "@types/cookie-parser@npm:1.4.7" @@ -14329,7 +15435,7 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:~29.5.12, @types/jest@npm:~29.5.13": +"@types/jest@npm:~29.5.12, @types/jest@npm:~29.5.13, @types/jest@npm:~29.5.7": version: 29.5.13 resolution: "@types/jest@npm:29.5.13" dependencies: @@ -14546,6 +15652,15 @@ __metadata: languageName: node linkType: hard +"@types/memcached@npm:^2.2.6": + version: 2.2.10 + resolution: "@types/memcached@npm:2.2.10" + dependencies: + "@types/node": "*" + checksum: c95e2ed494d5df5e45bab024d24ff2ba45930eb9737cb86564a5ac2a0b3fb5dfdc23d8a65061da38ffe2aabe202a8d333764c0c3dc99d2bb205bff8ba620f2c2 + languageName: node + linkType: hard + "@types/meteor-collection-hooks@npm:^0.8.9": version: 0.8.9 resolution: "@types/meteor-collection-hooks@npm:0.8.9" @@ -14641,6 +15756,15 @@ __metadata: languageName: node linkType: hard +"@types/mysql@npm:2.15.22": + version: 2.15.22 + resolution: "@types/mysql@npm:2.15.22" + dependencies: + "@types/node": "*" + checksum: 325120f027b04052b3ed056fef096d186ecc0988d9efe110a52bd3f2233d02e17fb802ea42da7fa1ae1d150b0194cddf56ff71bfb28411bc05361f947b0635af + languageName: node + linkType: hard + "@types/nedb@npm:^1.8.12": version: 1.8.16 resolution: "@types/nedb@npm:1.8.16" @@ -14694,6 +15818,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:>=13.7.0, @types/node@npm:^22.0.0": + version: 22.7.5 + resolution: "@types/node@npm:22.7.5" + dependencies: + undici-types: ~6.19.2 + checksum: 1a8bbb504efaffcef7b8491074a428e5c0b5425b0c0ffb13e7262cb8462c275e8cc5eaf90a38d8fbf52a1eeda7c01ab3b940673c43fc2414140779c973e40ec6 + languageName: node + linkType: hard + "@types/node@npm:^12.7.1": version: 12.20.55 resolution: "@types/node@npm:12.20.55" @@ -14731,15 +15864,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.0.0": - version: 22.7.5 - resolution: "@types/node@npm:22.7.5" - dependencies: - undici-types: ~6.19.2 - checksum: 1a8bbb504efaffcef7b8491074a428e5c0b5425b0c0ffb13e7262cb8462c275e8cc5eaf90a38d8fbf52a1eeda7c01ab3b940673c43fc2414140779c973e40ec6 - languageName: node - linkType: hard - "@types/nodemailer@npm:*": version: 6.4.13 resolution: "@types/nodemailer@npm:6.4.13" @@ -14825,6 +15949,37 @@ __metadata: languageName: node linkType: hard +"@types/pg-pool@npm:2.0.4": + version: 2.0.4 + resolution: "@types/pg-pool@npm:2.0.4" + dependencies: + "@types/pg": "*" + checksum: 5ae1c49fe1820ec011f8e2a877198a62f4c9795d2cc340dff4527c26f24ee22dffe99a8ca5cdec6edb54613bded820cc51256fb668e0eb4d22794181b94fad82 + languageName: node + linkType: hard + +"@types/pg@npm:*": + version: 8.11.10 + resolution: "@types/pg@npm:8.11.10" + dependencies: + "@types/node": "*" + pg-protocol: "*" + pg-types: ^4.0.1 + checksum: b2b481784e44429b284c7fc18121372f8afe747c3ada84aaff55de3aa07e205cecf18e8623c8b61860f8eeb499305bef8f934b62c9a1911bef3f8509febef071 + languageName: node + linkType: hard + +"@types/pg@npm:8.6.1": + version: 8.6.1 + resolution: "@types/pg@npm:8.6.1" + dependencies: + "@types/node": "*" + pg-protocol: "*" + pg-types: ^2.2.0 + checksum: a44710ff06e70f57685ddb88edbb93d4b46e03fed90619f09853ed3868ab28541c4da03eccf6b0b444a7566a0b3c56028543ced43554d51168ca3f8ae15e194f + languageName: node + linkType: hard + "@types/polka@npm:^0.5.7": version: 0.5.7 resolution: "@types/polka@npm:0.5.7" @@ -15098,6 +16253,13 @@ __metadata: languageName: node linkType: hard +"@types/shimmer@npm:^1.0.2": + version: 1.2.0 + resolution: "@types/shimmer@npm:1.2.0" + checksum: f081a31d826ce7bfe8cc7ba8129d2b1dffae44fd580eba4fcf741237646c4c2494ae6de2cada4b7713d138f35f4bc512dbf01311d813dee82020f97d7d8c491c + languageName: node + linkType: hard + "@types/sinon@npm:^10.0.20": version: 10.0.20 resolution: "@types/sinon@npm:10.0.20" @@ -15218,6 +16380,15 @@ __metadata: languageName: node linkType: hard +"@types/tedious@npm:^4.0.10": + version: 4.0.14 + resolution: "@types/tedious@npm:4.0.14" + dependencies: + "@types/node": "*" + checksum: 88505dda8b8e57e1da58ce74fb29bc2b4d64d90e9c34dc1d4b4010116b9785e23ce43f1e8016901bd27037e17d9d148e34d4ebd5f57d060212847e0df91cf024 + languageName: node + linkType: hard + "@types/tern@npm:*": version: 0.23.4 resolution: "@types/tern@npm:0.23.4" @@ -16382,6 +17553,15 @@ __metadata: languageName: node linkType: hard +"agent-base@npm:^7.0.2": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: ^4.3.4 + checksum: 51c158769c5c051482f9ca2e6e1ec085ac72b5a418a9b31b4e82fe6c0a6699adb94c1c42d246699a587b3335215037091c79e0de512c516f73b6ea844202f037 + languageName: node + linkType: hard + "agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" @@ -19602,7 +20782,7 @@ __metadata: languageName: node linkType: hard -"cjs-module-lexer@npm:^1.2.3": +"cjs-module-lexer@npm:^1.2.2, cjs-module-lexer@npm:^1.2.3": version: 1.4.1 resolution: "cjs-module-lexer@npm:1.4.1" checksum: 2556807a99aec1f9daac60741af96cd613a707f343174ae7967da46402c91dced411bf830d209f2e93be4cecea46fc75cecf1f17c799d7d8a9e1dd6204bfcd22 @@ -21597,7 +22777,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^4.3.7": +"debug@npm:^4.3.5, debug@npm:^4.3.7": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -25571,6 +26751,19 @@ __metadata: languageName: node linkType: hard +"gaxios@npm:^6.0.0": + version: 6.7.1 + resolution: "gaxios@npm:6.7.1" + dependencies: + extend: ^3.0.2 + https-proxy-agent: ^7.0.1 + is-stream: ^2.0.0 + node-fetch: ^2.6.9 + uuid: ^9.0.1 + checksum: ed5952655339918e0868c6f4e079d6e9e55b20a242ddb1be25076cdfb0dd1ca5a2cb233da7352baa972c19f898a78fa6ba67e7d848717c9ca9877c269b5b02f7 + languageName: node + linkType: hard + "gc-stats@npm:^1.4.0": version: 1.4.0 resolution: "gc-stats@npm:1.4.0" @@ -25602,6 +26795,16 @@ __metadata: languageName: node linkType: hard +"gcp-metadata@npm:^6.0.0": + version: 6.1.0 + resolution: "gcp-metadata@npm:6.1.0" + dependencies: + gaxios: ^6.0.0 + json-bigint: ^1.0.0 + checksum: 55de8ae4a6b7664379a093abf7e758ae06e82f244d41bd58d881a470bf34db94c4067ce9e1b425d9455b7705636d5f8baad844e49bb73879c338753ba7785b2b + languageName: node + linkType: hard + "generate-function@npm:^2.0.0": version: 2.3.1 resolution: "generate-function@npm:2.3.1" @@ -27180,6 +28383,16 @@ __metadata: languageName: node linkType: hard +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: ^7.0.2 + debug: 4 + checksum: 2e1a28960f13b041a50702ee74f240add8e75146a5c37fc98f1960f0496710f6918b3a9fe1e5aba41e50f58e6df48d107edd9c405c5f0d73ac260dabf2210857 + languageName: node + linkType: hard + "human-id@npm:^1.0.2": version: 1.0.2 resolution: "human-id@npm:1.0.2" @@ -27595,6 +28808,18 @@ __metadata: languageName: node linkType: hard +"import-in-the-middle@npm:^1.8.1": + version: 1.11.2 + resolution: "import-in-the-middle@npm:1.11.2" + dependencies: + acorn: ^8.8.2 + acorn-import-attributes: ^1.9.5 + cjs-module-lexer: ^1.2.2 + module-details-from-path: ^1.0.3 + checksum: 06fb73100a918e00778779713119236cc8d3d4656aae9076a18159cfcd28eb0cc26e0a5040d11da309c5f8f8915c143b8d74e73c0734d3f5549b1813d1008bb9 + languageName: node + linkType: hard + "import-lazy@npm:^2.1.0": version: 2.1.0 resolution: "import-lazy@npm:2.1.0" @@ -29170,7 +30395,7 @@ __metadata: languageName: node linkType: hard -"jest-cli@npm:^29.7.0": +"jest-cli@npm:^29.6.4, jest-cli@npm:^29.7.0": version: 29.7.0 resolution: "jest-cli@npm:29.7.0" dependencies: @@ -29711,6 +30936,25 @@ __metadata: languageName: node linkType: hard +"jest@npm:~29.6.4": + version: 29.6.4 + resolution: "jest@npm:29.6.4" + dependencies: + "@jest/core": ^29.6.4 + "@jest/types": ^29.6.3 + import-local: ^3.0.2 + jest-cli: ^29.6.4 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: ba28ca7a86d029bcd742bb254c0c8d0119c1e002ddae128ff6409ebabc0b29c36f69dbf3fdd326aff16e7b2500c9a918bbc6a9a5db4d966e035127242239439f + languageName: node + linkType: hard + "jmespath@npm:0.16.0": version: 0.16.0 resolution: "jmespath@npm:0.16.0" @@ -30736,6 +31980,13 @@ __metadata: languageName: node linkType: hard +"lodash.camelcase@npm:^4.3.0": + version: 4.3.0 + resolution: "lodash.camelcase@npm:4.3.0" + checksum: cb9227612f71b83e42de93eccf1232feeb25e705bdb19ba26c04f91e885bfd3dd5c517c4a97137658190581d3493ea3973072ca010aab7e301046d90740393d1 + languageName: node + linkType: hard + "lodash.clonedeep@npm:^4.5.0": version: 4.5.0 resolution: "lodash.clonedeep@npm:4.5.0" @@ -30990,6 +32241,13 @@ __metadata: languageName: node linkType: hard +"long@npm:^5.0.0": + version: 5.2.3 + resolution: "long@npm:5.2.3" + checksum: 885ede7c3de4facccbd2cacc6168bae3a02c3e836159ea4252c87b6e34d40af819824b2d4edce330bfb5c4d6e8ce3ec5864bdcf9473fa1f53a4f8225860e5897 + languageName: node + linkType: hard + "long@npm:~3": version: 3.2.0 resolution: "long@npm:3.2.0" @@ -32347,6 +33605,13 @@ __metadata: languageName: node linkType: hard +"module-details-from-path@npm:^1.0.3": + version: 1.0.3 + resolution: "module-details-from-path@npm:1.0.3" + checksum: 378a8a26013889aa3086bfb0776b7860c5bb957336253e1ba5d779c2f239a218930b145ca76e52c1dd7c8079d52b2af64b8eec30822f81ffdb0dfa27d6fe6f33 + languageName: node + linkType: hard + "module-not-found-error@npm:^1.0.1": version: 1.0.1 resolution: "module-not-found-error@npm:1.0.1" @@ -33004,7 +34269,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:^2.7.0": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -33739,7 +35004,7 @@ __metadata: languageName: node linkType: hard -"obuf@npm:^1.0.0, obuf@npm:^1.1.2": +"obuf@npm:^1.0.0, obuf@npm:^1.1.2, obuf@npm:~1.1.2": version: 1.1.2 resolution: "obuf@npm:1.1.2" checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f @@ -34790,6 +36055,55 @@ __metadata: languageName: node linkType: hard +"pg-int8@npm:1.0.1": + version: 1.0.1 + resolution: "pg-int8@npm:1.0.1" + checksum: a1e3a05a69005ddb73e5f324b6b4e689868a447c5fa280b44cd4d04e6916a344ac289e0b8d2695d66e8e89a7fba023affb9e0e94778770ada5df43f003d664c9 + languageName: node + linkType: hard + +"pg-numeric@npm:1.0.2": + version: 1.0.2 + resolution: "pg-numeric@npm:1.0.2" + checksum: 8899f8200caa1744439a8778a9eb3ceefb599d893e40a09eef84ee0d4c151319fd416634a6c0fc7b7db4ac268710042da5be700b80ef0de716fe089b8652c84f + languageName: node + linkType: hard + +"pg-protocol@npm:*": + version: 1.7.0 + resolution: "pg-protocol@npm:1.7.0" + checksum: 2dba740f6fc4b7f9761682c4c42d183b444292cdc7638b373f5247ec995c8199c369953343479281da3c41611fe34130a80c8668348d49a399c164f802f76be2 + languageName: node + linkType: hard + +"pg-types@npm:^2.2.0": + version: 2.2.0 + resolution: "pg-types@npm:2.2.0" + dependencies: + pg-int8: 1.0.1 + postgres-array: ~2.0.0 + postgres-bytea: ~1.0.0 + postgres-date: ~1.0.4 + postgres-interval: ^1.1.0 + checksum: bf4ec3f594743442857fb3a8dfe5d2478a04c98f96a0a47365014557cbc0b4b0cee01462c79adca863b93befbf88f876299b75b72c665b5fb84a2c94fbd10316 + languageName: node + linkType: hard + +"pg-types@npm:^4.0.1": + version: 4.0.2 + resolution: "pg-types@npm:4.0.2" + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: ~3.0.1 + postgres-bytea: ~3.0.0 + postgres-date: ~2.1.0 + postgres-interval: ^3.0.0 + postgres-range: ^1.1.1 + checksum: c4b813382d4a75f87462fab3245d5422b86ba1a54a1b330e6b43a459c127b4d02553dc7e5b4ae4fa0f5f17971d416eb393810f69ff6d30d986e45c2f20778c55 + languageName: node + linkType: hard + "picocolors@npm:^0.2.1": version: 0.2.1 resolution: "picocolors@npm:0.2.1" @@ -35818,6 +37132,73 @@ __metadata: languageName: node linkType: hard +"postgres-array@npm:~2.0.0": + version: 2.0.0 + resolution: "postgres-array@npm:2.0.0" + checksum: 0e1e659888147c5de579d229a2d95c0d83ebdbffc2b9396d890a123557708c3b758a0a97ed305ce7f58edfa961fa9f0bbcd1ea9f08b6e5df73322e683883c464 + languageName: node + linkType: hard + +"postgres-array@npm:~3.0.1": + version: 3.0.2 + resolution: "postgres-array@npm:3.0.2" + checksum: 5955f9dffeb6fa960c1a0b04fd4b2ba16813ddb636934ad26f902e4d76a91c0b743dcc6edc4cffc52deba7d547505e0020adea027c1d50a774f989cf955420d1 + languageName: node + linkType: hard + +"postgres-bytea@npm:~1.0.0": + version: 1.0.0 + resolution: "postgres-bytea@npm:1.0.0" + checksum: d844ae4ca7a941b70e45cac1261a73ee8ed39d72d3d74ab1d645248185a1b7f0ac91a3c63d6159441020f4e1f7fe64689ac56536a307b31cef361e5187335090 + languageName: node + linkType: hard + +"postgres-bytea@npm:~3.0.0": + version: 3.0.0 + resolution: "postgres-bytea@npm:3.0.0" + dependencies: + obuf: ~1.1.2 + checksum: 5f917a003fcaa0df7f285e1c37108ad474ce91193466b9bd4bcaecef2cdea98ca069c00aa6a8dbe6d2e7192336cadc3c9b36ae48d1555a299521918e00e2936b + languageName: node + linkType: hard + +"postgres-date@npm:~1.0.4": + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed + languageName: node + linkType: hard + +"postgres-date@npm:~2.1.0": + version: 2.1.0 + resolution: "postgres-date@npm:2.1.0" + checksum: 5c573b0602e17c6134fd8bc8ac7689ac0302e1b199f15dd3578fc45186f206dbd0609f97bf0e4bd1db62234d7a37f29c04f4df525f7efebb9304363b2efca272 + languageName: node + linkType: hard + +"postgres-interval@npm:^1.1.0": + version: 1.2.0 + resolution: "postgres-interval@npm:1.2.0" + dependencies: + xtend: ^4.0.0 + checksum: 746b71f93805ae33b03528e429dc624706d1f9b20ee81bf743263efb6a0cd79ae02a642a8a480dbc0f09547b4315ab7df6ce5ec0be77ed700bac42730f5c76b2 + languageName: node + linkType: hard + +"postgres-interval@npm:^3.0.0": + version: 3.0.0 + resolution: "postgres-interval@npm:3.0.0" + checksum: c7a1cf006de97de663b6b8c4d2b167aa9909a238c4866a94b15d303762f5ac884ff4796cd6e2111b7f0a91302b83c570453aa8506fd005b5a5d5dfa87441bebc + languageName: node + linkType: hard + +"postgres-range@npm:^1.1.1": + version: 1.1.4 + resolution: "postgres-range@npm:1.1.4" + checksum: 460af8c882a50e2c3d08ede5d5ee9e5e5a99dcf471e3ed55b4c17cad62dc85177b51bb8105b626a9c73de9edcba934e86665923b0d86e1c8e1f55d3e0f3530c6 + languageName: node + linkType: hard + "postis@npm:^2.2.0": version: 2.2.0 resolution: "postis@npm:2.2.0" @@ -36191,6 +37572,26 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:^7.2.5, protobufjs@npm:^7.3.0": + version: 7.4.0 + resolution: "protobufjs@npm:7.4.0" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/node": ">=13.7.0" + long: ^5.0.0 + checksum: ba0e6b60541bbf818bb148e90f5eb68bd99004e29a6034ad9895a381cbd352be8dce5376e47ae21b2e05559f2505b4a5f4a3c8fa62402822c6ab4dcdfb89ffb3 + languageName: node + linkType: hard + "proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" @@ -38034,6 +39435,17 @@ __metadata: languageName: node linkType: hard +"require-in-the-middle@npm:^7.1.1": + version: 7.4.0 + resolution: "require-in-the-middle@npm:7.4.0" + dependencies: + debug: ^4.3.5 + module-details-from-path: ^1.0.3 + resolve: ^1.22.8 + checksum: 80a3fdf25ef3f7826486469bfebb01365be87316945143f89607d4777b2019e5ac71bf627f1dcd5e2ee6e91a6e49c76c5d452d5a317153531a2907ccb1bc018b + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -38311,6 +39723,9 @@ __metadata: resolution: "rocket.chat@workspace:." dependencies: "@changesets/cli": ^2.26.2 + "@opentelemetry/auto-instrumentations-node": ^0.48.0 + "@opentelemetry/exporter-trace-otlp-grpc": ^0.52.1 + "@opentelemetry/sdk-node": ^0.52.1 "@types/chart.js": ^2.9.41 "@types/js-yaml": ^4.0.9 node-gyp: ^9.4.1 @@ -38823,7 +40238,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.3": +"semver@npm:^7.5.2, semver@npm:^7.6.3": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -39220,6 +40635,13 @@ __metadata: languageName: node linkType: hard +"shimmer@npm:^1.2.1": + version: 1.2.1 + resolution: "shimmer@npm:1.2.1" + checksum: aa0d6252ad1c682a4fdfda69e541be987f7a265ac7b00b1208e5e48cc68dc55f293955346ea4c71a169b7324b82c70f8400b3d3d2d60b2a7519f0a3522423250 + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -41826,7 +43248,7 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:~29.1.5": +"ts-jest@npm:~29.1.1, ts-jest@npm:~29.1.5": version: 29.1.5 resolution: "ts-jest@npm:29.1.5" dependencies: @@ -45014,7 +46436,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.3.1, yargs@npm:^17.7.1": +"yargs@npm:^17.3.1, yargs@npm:^17.7.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: