From 8fef0d7f17ef54d46a6e237b8bfadcfc8fb1fd07 Mon Sep 17 00:00:00 2001 From: Andrey Sobolev Date: Wed, 23 Jul 2025 13:49:14 +0700 Subject: [PATCH] OpenTelemetry support (#9584) Signed-off-by: Andrey Sobolev --- .vscode/launch.json | 3 +- common/config/rush/pnpm-lock.yaml | 1440 ++++++++++++++++- dev/docker-compose.yaml | 34 +- packages/analytics-providers/config/rig.json | 4 + packages/analytics-providers/jest.config.js | 7 + packages/analytics-service/package.json | 1 + packages/analytics-service/src/index.ts | 1 + packages/core/package.json | 1 + packages/core/src/__tests__/contexts.test.ts | 2 +- packages/core/src/client.ts | 2 +- packages/core/src/index.ts | 2 +- packages/core/src/measurements/index.ts | 3 - packages/core/src/server.ts | 2 +- packages/core/src/utils.ts | 11 +- packages/measurements-otlp/.eslintrc.js | 7 + packages/measurements-otlp/.npmignore | 4 + packages/measurements-otlp/config/rig.json | 4 + packages/measurements-otlp/jest.config.js | 7 + packages/measurements-otlp/package.json | 60 + packages/measurements-otlp/src/index.ts | 1 + packages/measurements-otlp/src/telemetry.ts | 355 ++++ packages/measurements-otlp/tsconfig.json | 12 + packages/measurements/.eslintrc.js | 7 + packages/measurements/.npmignore | 4 + packages/measurements/config/rig.json | 4 + packages/measurements/jest.config.js | 7 + packages/measurements/package.json | 52 + .../src}/context.ts | 20 +- packages/measurements/src/index.ts | 13 + .../src}/metrics.ts | 3 +- .../src}/types.ts | 2 + packages/measurements/tsconfig.json | 12 + pods/account/src/__start.ts | 6 +- pods/backup/src/index.ts | 6 +- pods/collaborator/src/__start.ts | 6 +- pods/front/src/__start.ts | 6 +- pods/fulltext/src/index.ts | 6 +- pods/media/src/index.ts | 6 +- pods/server/src/__start.ts | 6 +- pods/workspace/src/__start.ts | 6 +- rush.json | 10 + server/account-service/src/index.ts | 16 +- server/core/src/stats.ts | 49 +- services/ai-bot/pod-ai-bot/src/start.ts | 6 +- .../pod-analytics-collector/src/main.ts | 10 +- services/backup/backup-api-pod/src/main.ts | 6 +- services/billing/pod-billing/src/main.ts | 14 +- .../calendar/pod-calendar-mailer/src/index.ts | 12 +- services/calendar/pod-calendar/src/main.ts | 5 +- services/datalake/pod-datalake/src/main.ts | 6 +- services/github/pod-github/src/index.ts | 10 +- .../src/__tests__/attachments.test.ts | 1 + services/gmail/pod-gmail/src/main.ts | 10 +- services/love/src/main.ts | 20 +- services/mail/pod-inbound-mail/src/index.ts | 18 +- services/mail/pod-mail/src/main.ts | 12 +- services/rekoni/src/server.ts | 12 +- services/sign/pod-sign/src/server.ts | 12 +- .../pod-telegram-bot/src/start.ts | 10 +- services/telegram/pod-telegram/src/main.ts | 6 +- 60 files changed, 2200 insertions(+), 180 deletions(-) create mode 100644 packages/analytics-providers/config/rig.json create mode 100644 packages/analytics-providers/jest.config.js delete mode 100644 packages/core/src/measurements/index.ts create mode 100644 packages/measurements-otlp/.eslintrc.js create mode 100644 packages/measurements-otlp/.npmignore create mode 100644 packages/measurements-otlp/config/rig.json create mode 100644 packages/measurements-otlp/jest.config.js create mode 100644 packages/measurements-otlp/package.json create mode 100644 packages/measurements-otlp/src/index.ts create mode 100644 packages/measurements-otlp/src/telemetry.ts create mode 100644 packages/measurements-otlp/tsconfig.json create mode 100644 packages/measurements/.eslintrc.js create mode 100644 packages/measurements/.npmignore create mode 100644 packages/measurements/config/rig.json create mode 100644 packages/measurements/jest.config.js create mode 100644 packages/measurements/package.json rename packages/{core/src/measurements => measurements/src}/context.ts (95%) create mode 100644 packages/measurements/src/index.ts rename packages/{core/src/measurements => measurements/src}/metrics.ts (99%) rename packages/{core/src/measurements => measurements/src}/types.ts (98%) create mode 100644 packages/measurements/tsconfig.json diff --git a/.vscode/launch.json b/.vscode/launch.json index 57daf10ca2..a7b2096c41 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -202,8 +202,9 @@ // "WORKSPACE_LIMIT_PER_USER": "1", "MINIO_ACCESS_KEY": "minioadmin", "MINIO_SECRET_KEY": "minioadmin", - "MINIO_ENDPOINT": "localhost" + "MINIO_ENDPOINT": "localhost", // "DISABLE_SIGNUP": "true", + "OTLP_ENDPOINT": "http://huly.local:4318/v1/traces" }, "runtimeVersion": "20", "runtimeArgs": ["--nolazy", "-r", "ts-node/register"], diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index f0469c9585..ea3d90f304 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -61,6 +61,42 @@ importers: '@octokit/webhooks-types': specifier: ^7.3.1 version: 7.5.1 + '@opentelemetry/api': + specifier: ^1.9.0 + version: 1.9.0 + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.62.0 + version: 0.62.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@opentelemetry/core': + specifier: ^2.0.1 + version: 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': + specifier: ^0.203.0 + version: 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': + specifier: ^0.203.0 + version: 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': + specifier: ^0.203.0 + version: 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/id-generator-aws-xray': + specifier: ^2.0.0 + version: 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': + specifier: ^0.203.0 + version: 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: ^2.0.1 + version: 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': + specifier: ^0.203.0 + version: 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.203.0 + version: 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': + specifier: ^2.0.1 + version: 2.0.1(@opentelemetry/api@1.9.0) '@playwright/test': specifier: ^1.48.2 version: 1.49.1 @@ -478,6 +514,12 @@ importers: '@rush-temp/mail-common': specifier: file:./projects/mail-common.tgz version: file:projects/mail-common.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9)) + '@rush-temp/measurements': + specifier: file:./projects/measurements.tgz + version: file:projects/measurements.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(@types/node@22.15.29)(babel-jest@29.7.0(@babel/core@7.23.9))(esbuild@0.24.2)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3)) + '@rush-temp/measurements-otlp': + specifier: file:./projects/measurements-otlp.tgz + version: file:projects/measurements-otlp.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(@types/node@22.15.29)(babel-jest@29.7.0(@babel/core@7.23.9))(encoding@0.1.13)(esbuild@0.24.2)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3)) '@rush-temp/media': specifier: file:./projects/media.tgz version: file:projects/media.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(@types/node@22.15.29)(babel-jest@29.7.0(@babel/core@7.23.9))(esbuild@0.24.2)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3)) @@ -3072,6 +3114,15 @@ packages: '@gar/promisify@1.1.3': resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + '@grpc/grpc-js@1.13.4': + resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.15': + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + engines: {node: '>=6'} + hasBin: true + '@hocuspocus/common@2.15.2': resolution: {integrity: sha512-wU1wxXNnQQMXyeL3mdSDYiQsm/r/QyJVjjQhF7sUBrLnjdsN7bA1cvfcSvJBr1ymrMSeYRmUL3UlQmEHEOaP7w==} @@ -3383,6 +3434,9 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@koa/cors@5.0.0': resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} @@ -3683,6 +3737,10 @@ packages: resolution: {integrity: sha512-CyuLJ0/P7bKZ+kIYw+fnkeVdhUzNuDKgNSI7pU/m7Nod0T7kP+s4s2f0pNmG9HL8/RZN1S0ZWTDll3VTMrFLAw==} engines: {node: '>= 18'} + '@opentelemetry/api-logs@0.203.0': + resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} + engines: {node: '>=8.0.0'} + '@opentelemetry/api-logs@0.57.2': resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} engines: {node: '>=14'} @@ -3691,66 +3749,259 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@opentelemetry/auto-instrumentations-node@0.62.0': + resolution: {integrity: sha512-h5g+VNJjiyX6u/IQpn36ZCHOENg1QW0GgBOHBcFGnHBBhmTww4R3brExdeuYbvLj3UQY09n+UHFEoMOqkhq07A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.4.1 + '@opentelemetry/core': ^2.0.0 + '@opentelemetry/context-async-hooks@1.30.1': resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/context-async-hooks@2.0.1': + resolution: {integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@1.30.1': resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@2.0.1': + resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-logs-otlp-grpc@0.203.0': + resolution: {integrity: sha512-g/2Y2noc/l96zmM+g0LdeuyYKINyBwN6FJySoU15LHPLcMN/1a0wNk2SegwKcxrRdE7Xsm7fkIR5n6XFe3QpPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-http@0.203.0': + resolution: {integrity: sha512-s0hys1ljqlMTbXx2XiplmMJg9wG570Z5lH7wMvrZX6lcODI56sG4HL03jklF63tBeyNwK2RV1/ntXGo3HgG4Qw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-proto@0.203.0': + resolution: {integrity: sha512-nl/7S91MXn5R1aIzoWtMKGvqxgJgepB/sH9qW0rZvZtabnsjbf8OQ1uSx3yogtvLr0GzwD596nQKz2fV7q2RBw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-grpc@0.203.0': + resolution: {integrity: sha512-FCCj9nVZpumPQSEI57jRAA89hQQgONuoC35Lt+rayWY/mzCAc6BQT7RFyFaZKJ2B7IQ8kYjOCPsF/HGFWjdQkQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-http@0.203.0': + resolution: {integrity: sha512-HFSW10y8lY6BTZecGNpV3GpoSy7eaO0Z6GATwZasnT4bEsILp8UJXNG5OmEsz4SdwCSYvyCbTJdNbZP3/8LGCQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-proto@0.203.0': + resolution: {integrity: sha512-OZnhyd9npU7QbyuHXFEPVm3LnjZYifuKpT3kTnF84mXeEQ84pJJZgyLBpU4FSkSwUkt/zbMyNAI7y5+jYTWGIg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-prometheus@0.203.0': + resolution: {integrity: sha512-2jLuNuw5m4sUj/SncDf/mFPabUxMZmmYetx5RKIMIQyPnl6G6ooFzfeE8aXNRf8YD1ZXNlCnRPcISxjveGJHNg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.203.0': + resolution: {integrity: sha512-322coOTf81bm6cAA8+ML6A+m4r2xTCdmAZzGNTboPXRzhwPt4JEmovsFAs+grpdarObd68msOJ9FfH3jxM6wqA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-http@0.203.0': + resolution: {integrity: sha512-ZDiaswNYo0yq/cy1bBLJFe691izEJ6IgNmkjm4C6kE9ub/OMQqDXORx2D2j8fzTBTxONyzusbaZlqtfmyqURPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.203.0': + resolution: {integrity: sha512-1xwNTJ86L0aJmWRwENCJlH4LULMG2sOXWIVw+Szta4fkqKVY50Eo4HoVKKq6U9QEytrWCr8+zjw0q/ZOeXpcAQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-zipkin@2.0.1': + resolution: {integrity: sha512-a9eeyHIipfdxzCfc2XPrE+/TI3wmrZUDFtG2RRXHSbZZULAny7SyybSvaDvS77a7iib5MPiAvluwVvbGTsHxsw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/id-generator-aws-xray@2.0.0': + resolution: {integrity: sha512-o3/kw+HRd1uIe74F50EqFsStsAvTa/Xxv798j7xWFNfaDrSZmbFS8+L0CLJVTEtslSG5iVBhCKPbEtSn1ReKLA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/instrumentation-amqplib@0.46.1': resolution: {integrity: sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-amqplib@0.50.0': + resolution: {integrity: sha512-kwNs/itehHG/qaQBcVrLNcvXVPW0I4FCOVtw3LHMLdYIqD7GJ6Yv2nX+a4YHjzbzIeRYj8iyMp0Bl7tlkidq5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-lambda@0.54.0': + resolution: {integrity: sha512-uiYI+kcMUJ/H9cxAwB8c9CaG8behLRgcYSOEA8M/tMQ54Y1ZmzAuEE3QKOi21/s30x5Q+by9g7BwiVfDtqzeMA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-sdk@0.56.0': + resolution: {integrity: sha512-Jl2B/FYEb6tBCk9G31CMomKPikGU2g+CEhrGddDI0o1YeNpg3kAO9dExF+w489/IJUGZX6/wudyNvV7z4k9NjQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-bunyan@0.49.0': + resolution: {integrity: sha512-ky5Am1y6s3Ex/3RygHxB/ZXNG07zPfg9Z6Ora+vfeKcr/+I6CJbWXWhSBJor3gFgKN3RvC11UWVURnmDpBS6Pg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cassandra-driver@0.49.0': + resolution: {integrity: sha512-BNIvqldmLkeikfI5w5Rlm9vG5NnQexfPoxOgEMzfDVOEF+vS6351I6DzWLLgWWR9CNF/jQJJi/lr6am2DLp0Rw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-connect@0.43.1': resolution: {integrity: sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-connect@0.47.0': + resolution: {integrity: sha512-pjenvjR6+PMRb6/4X85L4OtkQCootgb/Jzh/l/Utu3SJHBid1F+gk9sTGU2FWuhhEfV6P7MZ7BmCdHXQjgJ42g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cucumber@0.18.0': + resolution: {integrity: sha512-i+cUbLHvRShuevtM0NwjQR9wnABhmYw8+dbgD57LNBde7xkuSDot0CTzX+pYn32djtQ1bPYZiLf+uwS0JsMUrw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/instrumentation-dataloader@0.16.1': resolution: {integrity: sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-dataloader@0.21.0': + resolution: {integrity: sha512-Xu4CZ1bfhdkV3G6iVHFgKTgHx8GbKSqrTU01kcIJRGHpowVnyOPEv1CW5ow+9GU2X4Eki8zoNuVUenFc3RluxQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dns@0.47.0': + resolution: {integrity: sha512-775fOnewWkTF4iXMGKgwvOGqEmPrU1PZpXjjqvTrEErYBJe7Fz1WlEeUStHepyKOdld7Ghv7TOF/kE3QDctvrg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-express@0.47.1': resolution: {integrity: sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-express@0.52.0': + resolution: {integrity: sha512-W7pizN0Wh1/cbNhhTf7C62NpyYw7VfCFTYg0DYieSTrtPBT1vmoSZei19wfKLnrMsz3sHayCg0HxCVL2c+cz5w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fastify@0.48.0': + resolution: {integrity: sha512-3zQlE/DoVfVH6/ycuTv7vtR/xib6WOa0aLFfslYcvE62z0htRu/ot8PV/zmMZfnzpTQj8S/4ULv36R6UIbpJIg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-fs@0.19.1': resolution: {integrity: sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-fs@0.23.0': + resolution: {integrity: sha512-Puan+QopWHA/KNYvDfOZN6M/JtF6buXEyD934vrb8WhsX1/FuM7OtoMlQyIqAadnE8FqqDL4KDPiEfCQH6pQcQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-generic-pool@0.43.1': resolution: {integrity: sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-generic-pool@0.47.0': + resolution: {integrity: sha512-UfHqf3zYK+CwDwEtTjaD12uUqGGTswZ7ofLBEdQ4sEJp9GHSSJMQ2hT3pgBxyKADzUdoxQAv/7NqvL42ZI+Qbw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-graphql@0.47.1': resolution: {integrity: sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-graphql@0.51.0': + resolution: {integrity: sha512-LchkOu9X5DrXAnPI1+Z06h/EH/zC7D6sA86hhPrk3evLlsJTz0grPrkL/yUJM9Ty0CL/y2HSvmWQCjbJEz/ADg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-grpc@0.203.0': + resolution: {integrity: sha512-Qmjx2iwccHYRLoE4RFS46CvQE9JG9Pfeae4EPaNZjvIuJxb/pZa2R9VWzRlTehqQWpAvto/dGhtkw8Tv+o0LTg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-hapi@0.45.2': resolution: {integrity: sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-hapi@0.50.0': + resolution: {integrity: sha512-5xGusXOFQXKacrZmDbpHQzqYD1gIkrMWuwvlrEPkYOsjUqGUjl1HbxCsn5Y9bUXOCgP1Lj6A4PcKt1UiJ2MujA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.203.0': + resolution: {integrity: sha512-y3uQAcCOAwnO6vEuNVocmpVzG3PER6/YZqbPbbffDdJ9te5NkHEkfSMNzlC3+v7KlE+WinPGc3N7MR30G1HY2g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-http@0.57.2': resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==} engines: {node: '>=14'} @@ -3763,6 +4014,18 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-ioredis@0.51.0': + resolution: {integrity: sha512-9IUws0XWCb80NovS+17eONXsw1ZJbHwYYMXiwsfR9TSurkLV5UNbRSKb9URHO+K+pIJILy9wCxvyiOneMr91Ig==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.12.0': + resolution: {integrity: sha512-bIe4aSAAxytp88nzBstgr6M7ZiEpW6/D1/SuKXdxxuprf18taVvFL2H5BDNGZ7A14K27haHqzYqtCTqFXHZOYg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-kafkajs@0.7.1': resolution: {integrity: sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==} engines: {node: '>=14'} @@ -3775,88 +4038,326 @@ packages: peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-knex@0.48.0': + resolution: {integrity: sha512-V5wuaBPv/lwGxuHjC6Na2JFRjtPgstw19jTFl1B1b6zvaX8zVDYUDaR5hL7glnQtUSCMktPttQsgK4dhXpddcA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-koa@0.47.1': resolution: {integrity: sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-koa@0.51.0': + resolution: {integrity: sha512-XNLWeMTMG1/EkQBbgPYzCeBD0cwOrfnn8ao4hWgLv0fNCFQu1kCsJYygz2cvKuCs340RlnG4i321hX7R8gj3Rg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-lru-memoizer@0.44.1': resolution: {integrity: sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-lru-memoizer@0.48.0': + resolution: {integrity: sha512-KUW29wfMlTPX1wFz+NNrmE7IzN7NWZDrmFWHM/VJcmFEuQGnnBuTIdsP55CnBDxKgQ/qqYFp4udQFNtjeFosPw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-memcached@0.47.0': + resolution: {integrity: sha512-vXDs/l4hlWy1IepPG1S6aYiIZn+tZDI24kAzwKKJmR2QEJRL84PojmALAEJGazIOLl/VdcCPZdMb0U2K0VzojA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongodb@0.52.0': resolution: {integrity: sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongodb@0.56.0': + resolution: {integrity: sha512-YG5IXUUmxX3Md2buVMvxm9NWlKADrnavI36hbJsihqqvBGsWnIfguf0rUP5Srr0pfPqhQjUP+agLMsvu0GmUpA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongoose@0.46.1': resolution: {integrity: sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mongoose@0.50.0': + resolution: {integrity: sha512-Am8pk1Ct951r4qCiqkBcGmPIgGhoDiFcRtqPSLbJrUZqEPUsigjtMjoWDRLG1Ki1NHgOF7D0H7d+suWz1AAizw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql2@0.45.2': resolution: {integrity: sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql2@0.49.0': + resolution: {integrity: sha512-dCub9wc02mkJWNyHdVEZ7dvRzy295SmNJa+LrAJY2a/+tIiVBQqEAajFzKwp9zegVVnel9L+WORu34rGLQDzxA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql@0.45.1': resolution: {integrity: sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-mysql@0.49.0': + resolution: {integrity: sha512-QU9IUNqNsrlfE3dJkZnFHqLjlndiU39ll/YAAEvWE40sGOCi9AtOF6rmEGzJ1IswoZ3oyePV7q2MP8SrhJfVAA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-nestjs-core@0.49.0': + resolution: {integrity: sha512-1R/JFwdmZIk3T/cPOCkVvFQeKYzbbUvDxVH3ShXamUwBlGkdEu5QJitlRMyVNZaHkKZKWgYrBarGQsqcboYgaw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-net@0.47.0': + resolution: {integrity: sha512-csoJ++Njpf7C09JH+0HNGenuNbDZBqO1rFhMRo6s0rAmJwNh9zY3M/urzptmKlqbKnf4eH0s+CKHy/+M8fbFsQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-oracledb@0.29.0': + resolution: {integrity: sha512-2aHLiJdkyiUbooIUm7FaZf+O4jyqEl+RfFpgud1dxT87QeeYM216wi+xaMNzsb5yKtRBqbA3qeHBCyenYrOZwA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-pg@0.51.1': resolution: {integrity: sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-pg@0.55.0': + resolution: {integrity: sha512-yfJ5bYE7CnkW/uNsnrwouG/FR7nmg09zdk2MSs7k0ZOMkDDAE3WBGpVFFApGgNu2U+gtzLgEzOQG4I/X+60hXw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pino@0.50.0': + resolution: {integrity: sha512-Pi0cWGp4f2gresq2xqef4IsuunLdebJ9n9tZxytDz2ci4euIfW36ILpszQmRNhwCVDCZLmUgGDKZGj4PXyPd0w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-redis-4@0.46.1': resolution: {integrity: sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-redis@0.51.0': + resolution: {integrity: sha512-uL/GtBA0u72YPPehwOvthAe+Wf8k3T+XQPBssJmTYl6fzuZjNq8zTfxVFhl9nRFjFVEe+CtiYNT0Q3AyqW1Z0A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-restify@0.49.0': + resolution: {integrity: sha512-tsGZZhS4mVZH7omYxw5jpsrD3LhWizqWc0PYtAnzpFUvL5ZINHE+cm57bssTQ2AK/GtZMxu9LktwCvIIf3dSmw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-router@0.48.0': + resolution: {integrity: sha512-Wixrc8CchuJojXpaS/dCQjFOMc+3OEil1H21G+WLYQb8PcKt5kzW9zDBT19nyjjQOx/D/uHPfgbrT+Dc7cfJ9w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-runtime-node@0.17.0': + resolution: {integrity: sha512-O+xc0woqrSjue5IgpCCMvlgsuDrq6DDEfiHW3S3vRMCjXE1ZoPjaDE/K6EURorN+tjnzZQN1gOMSrscSGAbjHg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-socket.io@0.50.0': + resolution: {integrity: sha512-6JN6lnKN9ZuZtZdMQIR+no1qHzQvXSZUsNe3sSWMgqmNRyEXuDUWBIyKKeG0oHRHtR4xE4QhJyD4D5kKRPWZFA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-tedious@0.18.1': resolution: {integrity: sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-tedious@0.22.0': + resolution: {integrity: sha512-XrrNSUCyEjH1ax9t+Uo6lv0S2FCCykcF7hSxBMxKf7Xn0bPRxD3KyFUZy25aQXzbbbUHhtdxj3r2h88SfEM3aA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation-undici@0.10.1': resolution: {integrity: sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.7.0 + '@opentelemetry/instrumentation-undici@0.14.0': + resolution: {integrity: sha512-2HN+7ztxAReXuxzrtA3WboAKlfP5OsPA57KQn2AdYZbJ3zeRPcLXyW4uO/jpLE6PLm0QRtmeGCmfYpqRlwgSwg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation-winston@0.48.0': + resolution: {integrity: sha512-QuKbswAaQfRULhtlYbeNC9gOAXPxOSCE4BjIzuY1oEsc84kIsHUjn3yvY9Q83s3eg3j0JycNcAMi8u0yTl5PIQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.203.0': + resolution: {integrity: sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + '@opentelemetry/instrumentation@0.57.2': resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': ^1.3.0 + '@opentelemetry/otlp-exporter-base@0.203.0': + resolution: {integrity: sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.203.0': + resolution: {integrity: sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.203.0': + resolution: {integrity: sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagation-utils@0.31.3': + resolution: {integrity: sha512-ZI6LKjyo+QYYZY5SO8vfoCQ9A69r1/g+pyjvtu5RSK38npINN1evEmwqbqhbg2CdcIK3a4PN6pDAJz/yC5/gAA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/propagator-b3@2.0.1': + resolution: {integrity: sha512-Hc09CaQ8Tf5AGLmf449H726uRoBNGPBL4bjr7AnnUpzWMvhdn61F78z9qb6IqB737TffBsokGAK1XykFEZ1igw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@2.0.1': + resolution: {integrity: sha512-7PMdPBmGVH2eQNb/AtSJizQNgeNTfh6jQFqys6lfhd6P4r+m/nTh3gKPPpaCXVdRQ+z93vfKk+4UGty390283w==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/redis-common@0.36.2': resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} engines: {node: '>=14'} + '@opentelemetry/redis-common@0.38.0': + resolution: {integrity: sha512-4Wc0AWURII2cfXVVoZ6vDqK+s5n4K5IssdrlVrvGsx6OEOKdghKtJZqXAHWFiZv4nTDLH2/2fldjIHY8clMOjQ==} + engines: {node: ^18.19.0 || >=20.6.0} + + '@opentelemetry/resource-detector-alibaba-cloud@0.31.3': + resolution: {integrity: sha512-I556LHcLVsBXEgnbPgQISP/JezDt5OfpgOaJNR1iVJl202r+K145OSSOxnH5YOc/KvrydBD0FOE03F7x0xnVTw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-aws@2.3.0': + resolution: {integrity: sha512-PkD/lyXG3B3REq1Y6imBLckljkJYXavtqGYSryAeJYvGOf5Ds3doR+BCGjmKeF6ObAtI5MtpBeUStTDtGtBsWA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-azure@0.10.0': + resolution: {integrity: sha512-5cNAiyPBg53Uxe/CW7hsCq8HiKNAUGH+gi65TtgpzSR9bhJG4AEbuZhbJDFwe97tn2ifAD1JTkbc/OFuaaFWbA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-container@0.7.3': + resolution: {integrity: sha512-SK+xUFw6DKYbQniaGmIFsFxAZsr8RpRSRWxKi5/ZJAoqqPnjcyGI/SeUx8zzPk4XLO084zyM4pRHgir0hRTaSQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-gcp@0.37.0': + resolution: {integrity: sha512-LGpJBECIMsVKhiulb4nxUw++m1oF4EiDDPmFGW2aqYaAF0oUvJNv8Z/55CAzcZ7SxvlTgUwzewXDBsuCup7iqw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.0.0 + '@opentelemetry/resources@1.30.1': resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/resources@2.0.1': + resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.203.0': + resolution: {integrity: sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.0.1': + resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-node@0.203.0': + resolution: {integrity: sha512-zRMvrZGhGVMvAbbjiNQW3eKzW/073dlrSiAKPVWmkoQzah9wfynpVPeL55f9fVIm0GaBxTLcPeukWGy0/Wj7KQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@opentelemetry/sdk-trace-base@1.30.1': resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} engines: {node: '>=14'} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/sdk-trace-base@2.0.1': + resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@2.0.1': + resolution: {integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/semantic-conventions@1.28.0': resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} engines: {node: '>=14'} @@ -3871,6 +4372,12 @@ packages: peerDependencies: '@opentelemetry/api': ^1.1.0 + '@opentelemetry/sql-common@0.41.0': + resolution: {integrity: sha512-pmzXctVbEERbqSfiAgdes9Y63xjoOyXcD7B6IXBkVb+vbM7M9U98mn33nGXxPf4dfYR0M+vhcKRZmbSJ7HfqFA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@pdf-lib/standard-fonts@1.0.0': resolution: {integrity: sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==} @@ -3897,6 +4404,36 @@ packages: peerDependencies: '@opentelemetry/api': ^1.8 + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@puppeteer/browsers@2.3.0': resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} engines: {node: '>=18'} @@ -3966,7 +4503,7 @@ packages: version: 0.0.0 '@rush-temp/analytics-service@file:projects/analytics-service.tgz': - resolution: {integrity: sha512-tyWWPUNVizFTlaQZ7Qnx8IMZqQV4aaK+hV4mscCSz5HJleb95mfWEVkeDdeseahfUhO6I5yBwUfbyAsFIKmWhw==, tarball: file:projects/analytics-service.tgz} + resolution: {integrity: sha512-WqRMrPPRa4DJz4t8SbPnBjc2GIApL3ZtEHrxz755As/02zLRa2jD4BpAzafLrYRFQ5ALM4P4lblmqq3Iqiodlg==, tarball: file:projects/analytics-service.tgz} version: 0.0.0 '@rush-temp/analytics@file:projects/analytics.tgz': @@ -4186,7 +4723,7 @@ packages: version: 0.0.0 '@rush-temp/core@file:projects/core.tgz': - resolution: {integrity: sha512-4TGlCUwCl1jzD7shLpAmbBOrc7Zu5C0FHE+KEmu4R3kHvNzgctjoNihiSFByVnkWRDcAaQ/16auIWqp72C6F/w==, tarball: file:projects/core.tgz} + resolution: {integrity: sha512-btPoIQ23cdSItu4ElKOMNXYuXZ5FxH5PjHKpl2aQXeRNgm48Wby1DAdYeTPseiLRRZhnr94amOd3StT1RbnUUA==, tarball: file:projects/core.tgz} version: 0.0.0 '@rush-temp/datalake@file:projects/datalake.tgz': @@ -4426,7 +4963,7 @@ packages: version: 0.0.0 '@rush-temp/login-resources@file:projects/login-resources.tgz': - resolution: {integrity: sha512-iUh3ufftHKIUk5w6JSTmCYla4IpAI+onCeVFpW5pLcoAu86p02/K/ksyCNngPCY+JnYFXr57BogFgxNAnHzrUw==, tarball: file:projects/login-resources.tgz} + resolution: {integrity: sha512-c4D5j+XsWGsXbyUC/RpSwmqhNRKSGWalshwOS/+MQBYcnCYe4xWiTwEH//hguRF9DuOK8ZTVvlEz0erXl7V0WQ==, tarball: file:projects/login-resources.tgz} version: 0.0.0 '@rush-temp/login@file:projects/login.tgz': @@ -4457,6 +4994,14 @@ packages: resolution: {integrity: sha512-FmcRe6dmbRK99u1paZJ2+f+JIpt/6rOoCZaSTUW0isvhc5+hNZaqwYFsOMAMuWRNcWlwIclEXwlwkIogHFReKA==, tarball: file:projects/mail.tgz} version: 0.0.0 + '@rush-temp/measurements-otlp@file:projects/measurements-otlp.tgz': + resolution: {integrity: sha512-YsOjH0rSNKsou09p3RkbV6g8gZb9V1Nk3Z5UFJ96VpzGwXJlnsY/BMQvso8JXoKkkP7rU58jwJhilOwfX0aViw==, tarball: file:projects/measurements-otlp.tgz} + version: 0.0.0 + + '@rush-temp/measurements@file:projects/measurements.tgz': + resolution: {integrity: sha512-9yd6zagtxOkzBu0d8oBpu11i8L8a7mNJDQ4jQzb3qjlbLTeFXzOI49nJueQB4zO2d8lvSNrRWhTwJX0ZDHRp8w==, tarball: file:projects/measurements.tgz} + version: 0.0.0 + '@rush-temp/media-assets@file:projects/media-assets.tgz': resolution: {integrity: sha512-5Ppzy6nUxEpzPMKj0xuJTO5Ai0hLAnC7MpNSQ2/euFK56V7L4VeqP8RIuODpZbxtNQueZgVDe7/HrjQN6hDe+g==, tarball: file:projects/media-assets.tgz} version: 0.0.0 @@ -4470,7 +5015,7 @@ packages: version: 0.0.0 '@rush-temp/middleware@file:projects/middleware.tgz': - resolution: {integrity: sha512-BBJfihOg9wsitgPdo9u/kbS2Px9Zri88Rgx9w1iKAq+2RaYAMFzTKn+ovmgN/JA6kQToeZKrJRkZgCCi5PxpxA==, tarball: file:projects/middleware.tgz} + resolution: {integrity: sha512-SAJL9JOujs+MUsfqnMjf9/TwvxaSy4VXjaSIHtmoI/wwBNc/AMNjEoZtULZo0kEZ2VFcflyXcTem0xPjAwONZQ==, tarball: file:projects/middleware.tgz} version: 0.0.0 '@rush-temp/minio@file:projects/minio.tgz': @@ -4938,7 +5483,7 @@ packages: version: 0.0.0 '@rush-temp/pod-fulltext@file:projects/pod-fulltext.tgz': - resolution: {integrity: sha512-TVbC2OmWqmwkTcdyXnQx44F9CJr9hRlZYGudR+mCMIM65se/n5XH7yo7TlbKitP8YUguu9KfYzhQdNiQISXKfA==, tarball: file:projects/pod-fulltext.tgz} + resolution: {integrity: sha512-R2F2N2IwsAbeHa0b9eG2WxQyCxSxv4d3GGNnmbkNz/ZLvWbseOCAY9i0j3cU/tBKq/Ufi2SogCukDqX3/IkZtQ==, tarball: file:projects/pod-fulltext.tgz} version: 0.0.0 '@rush-temp/pod-github@file:projects/pod-github.tgz': @@ -5302,7 +5847,7 @@ packages: version: 0.0.0 '@rush-temp/server-indexer@file:projects/server-indexer.tgz': - resolution: {integrity: sha512-NcyddWckVbhvN8xIDvPKutzjAOgbg/E2BzrxzGJQ7od63xWfj9gAJjm7JJfDRRUy6rUOTUKl6mWIcbKVyS3nQA==, tarball: file:projects/server-indexer.tgz} + resolution: {integrity: sha512-OYx2FWCD6jtTnsKmYnhhS3BsvhtCN9pIYkvIoSe0mzZi3xEAhnwu2T59+JpZgRO1fvD1yVxBy7nw0hyFtz03Hg==, tarball: file:projects/server-indexer.tgz} version: 0.0.0 '@rush-temp/server-inventory-resources@file:projects/server-inventory-resources.tgz': @@ -6262,6 +6807,9 @@ packages: '@types/aws-lambda@8.10.142': resolution: {integrity: sha512-wy2y/2hQKrS6myOS++koXg3N1Hg+LLyPjaggCFajczSHZPqBnOMuT2sdH3kiASrmdBYyM3pmjyz5SoWraRllCQ==} + '@types/aws-lambda@8.10.150': + resolution: {integrity: sha512-AX+AbjH/rH5ezX1fbK8onC/a+HyQHo7QGmvoxAE42n22OsciAxvZoZNEr22tbXs8WfP1nIsBjKDpgPm3HjOZbA==} + '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -6283,6 +6831,9 @@ packages: '@types/btoa-lite@1.0.2': resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==} + '@types/bunyan@1.8.11': + resolution: {integrity: sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==} + '@types/busboy@1.5.3': resolution: {integrity: sha512-YMBLFN/xBD8bnqywIlGyYqsNFXu6bsiY7h3Ae0kO17qEuTjsqeyYMRPSUDacIKIquws2Y6KjmxAyNx8xB3xQbw==} @@ -6550,6 +7101,9 @@ packages: '@types/mdurl@2.0.0': resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} + '@types/memcached@2.2.10': + resolution: {integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==} + '@types/mime-types@2.1.4': resolution: {integrity: sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==} @@ -6574,6 +7128,9 @@ packages: '@types/mysql@2.15.26': resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} + '@types/mysql@2.15.27': + resolution: {integrity: sha512-YfWiV16IY0OeBfBCk8+hXKmdTKrKlwKN1MNKAPBu5JYxLwBEZl7QzeEpGnlZb3VMGJrrGmB84gXiH+ofs/TezA==} + '@types/node-cron@3.0.11': resolution: {integrity: sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==} @@ -6601,6 +7158,9 @@ packages: '@types/on-headers@1.0.3': resolution: {integrity: sha512-jvGNvFo8uOL6fiBGvD4Ul4lT8mZoJ57l3h0ZN/a1oHziTTXUV3slaRcYm2K1wvvLX1fhIg9AvKykxKFt3mM+Xg==} + '@types/oracledb@6.5.2': + resolution: {integrity: sha512-kK1eBS/Adeyis+3OlBDMeQQuasIDLUYXsi2T15ccNJ0iyUpQ4xDF7svFu3+bGVrI0CMBUclPciz+lsQR3JX3TQ==} + '@types/otp-generator@4.0.2': resolution: {integrity: sha512-9+qqWzuFb332hXPbLgjUyOXlbcaTQkmkmqQjTduvNuOmPV5fW+iLv70JsVEhdUy0DWi4kY34++HDCaWl6N0AYg==} @@ -6622,6 +7182,9 @@ packages: '@types/pg@8.11.11': resolution: {integrity: sha512-kGT1qKM8wJQ5qlawUrEkXgvMSXoV213KfMGXcwfDwUIfUHXqXYXOfS1nE1LINRJVVVx5wCm70XnFlMHaIcQAfw==} + '@types/pg@8.15.4': + resolution: {integrity: sha512-I6UNVBAoYbvuWkkU3oosC8yxqH21f4/Jc4DK71JLG3dT2mdlGe1z+ep/LQGXaKaOgcvUrsQoPRqfgtMcvZiJhg==} + '@types/pg@8.6.1': resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} @@ -9349,10 +9912,18 @@ packages: resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==} engines: {node: '>=12'} + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + gcp-metadata@5.3.0: resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} engines: {node: '>=12'} + gcp-metadata@6.1.1: + resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} + engines: {node: '>=14'} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -9467,6 +10038,10 @@ packages: resolution: {integrity: sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==} engines: {node: '>=12'} + google-logging-utils@0.0.2: + resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} + engines: {node: '>=14'} + google-p12-pem@4.0.1: resolution: {integrity: sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==} engines: {node: '>=12.0.0'} @@ -10668,6 +11243,9 @@ packages: lodash.bind@4.2.1: resolution: {integrity: sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -10752,6 +11330,9 @@ packages: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -12032,6 +12613,10 @@ packages: prosemirror-view@1.37.2: resolution: {integrity: sha512-ApcyrfV/cRcaL65on7TQcfWElwLyOgIjnIynfAuV+fIdlpbSvSWRwfuPaH7T5mo4AbO/FID29qOtjiDIKGWyog==} + protobufjs@7.5.3: + resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -14994,6 +15579,18 @@ snapshots: '@gar/promisify@1.1.3': {} + '@grpc/grpc-js@1.13.4': + dependencies: + '@grpc/proto-loader': 0.7.15 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.15': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.5.3 + yargs: 17.7.2 + '@hocuspocus/common@2.15.2': dependencies: lib0: 0.2.99 @@ -15520,6 +16117,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 + '@js-sdsl/ordered-map@4.4.2': {} + '@koa/cors@5.0.0': dependencies: vary: 1.1.2 @@ -15819,21 +16418,200 @@ snapshots: '@octokit/webhooks-types': 7.4.0 aggregate-error: 3.1.0 + '@opentelemetry/api-logs@0.203.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs@0.57.2': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/api@1.9.0': {} + '@opentelemetry/auto-instrumentations-node@0.62.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(encoding@0.1.13)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-lambda': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-sdk': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-bunyan': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cucumber': 0.18.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.21.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dns': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.23.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.51.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.51.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.12.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.51.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-memcached': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.56.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-net': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-oracledb': 0.29.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.55.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.51.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-restify': 0.49.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-router': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-runtime-node': 0.17.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-socket.io': 0.50.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.22.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.14.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.31.3(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 2.3.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.7.3(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.37.0(@opentelemetry/api@1.9.0)(encoding@0.1.13) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - encoding + - supports-color + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-http@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-http@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-prometheus@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-grpc@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-http@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-proto@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-zipkin@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/id-generator-aws-xray@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15843,6 +16621,51 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-amqplib@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-lambda@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/aws-lambda': 8.10.150 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-sdk@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagation-utils': 0.31.3(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-bunyan@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@types/bunyan': 1.8.11 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cassandra-driver@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-connect@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15853,6 +16676,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-connect@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cucumber@0.18.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-dataloader@0.16.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15860,6 +16701,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-dataloader@0.21.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dns@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-express@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15869,6 +16724,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-express@0.52.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fastify@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-fs@0.19.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15877,6 +16750,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-fs@0.23.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-generic-pool@0.43.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15884,6 +16765,13 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-generic-pool@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-graphql@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15891,6 +16779,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-graphql@0.51.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-grpc@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-hapi@0.45.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15900,6 +16803,25 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-hapi@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + forwarded-parse: 2.1.2 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-http@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15920,6 +16842,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-ioredis@0.51.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.38.0 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.12.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-kafkajs@0.7.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15936,6 +16875,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-knex@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-koa@0.47.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15945,6 +16892,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-koa@0.51.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-lru-memoizer@0.44.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15952,6 +16908,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-lru-memoizer@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-memcached@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mongodb@0.52.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15960,6 +16932,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mongodb@0.56.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mongoose@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15969,6 +16949,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mongoose@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mysql2@0.45.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15978,6 +16967,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mysql2@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/sql-common': 0.41.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-mysql@0.45.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15987,6 +16985,40 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-mysql@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/mysql': 2.15.27 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-nestjs-core@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-net@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-oracledb@0.29.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/oracledb': 6.5.2 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-pg@0.51.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15999,6 +17031,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-pg@0.55.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@opentelemetry/sql-common': 0.41.0(@opentelemetry/api@1.9.0) + '@types/pg': 8.15.4 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-pino@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-redis-4@0.46.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16008,6 +17061,47 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-redis@0.51.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.38.0 + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-restify@0.49.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-router@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-runtime-node@0.17.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-socket.io@0.50.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-tedious@0.18.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16017,6 +17111,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-tedious@0.22.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation-undici@0.10.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16025,6 +17128,31 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/instrumentation-undici@0.14.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-winston@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + import-in-the-middle: 1.13.2 + require-in-the-middle: 7.4.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16037,14 +17165,141 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/otlp-exporter-base@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-grpc-exporter-base@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.13.4 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.203.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + protobufjs: 7.5.3 + + '@opentelemetry/propagation-utils@0.31.3(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/propagator-b3@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-jaeger@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common@0.36.2': {} + '@opentelemetry/redis-common@0.38.0': {} + + '@opentelemetry/resource-detector-alibaba-cloud@0.31.3(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/resource-detector-aws@2.3.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/resource-detector-azure@0.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/resource-detector-container@0.7.3(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/resource-detector-gcp@0.37.0(@opentelemetry/api@1.9.0)(encoding@0.1.13)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + gcp-metadata: 6.1.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/sdk-logs@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-node@0.203.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.203.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-prometheus': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + transitivePeerDependencies: + - supports-color + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16052,6 +17307,20 @@ snapshots: '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.34.0 + + '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions@1.28.0': {} '@opentelemetry/semantic-conventions@1.34.0': {} @@ -16061,6 +17330,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sql-common@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@pdf-lib/standard-fonts@1.0.0': dependencies: pako: 1.0.11 @@ -16087,6 +17361,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@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': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 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': {} + '@puppeteer/browsers@2.3.0': dependencies: debug: 4.3.5 @@ -20404,6 +21701,72 @@ snapshots: - supports-color - ts-node + '@rush-temp/measurements-otlp@file:projects/measurements-otlp.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(@types/node@22.15.29)(babel-jest@29.7.0(@babel/core@7.23.9))(encoding@0.1.13)(esbuild@0.24.2)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3))': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/auto-instrumentations-node': 0.62.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0))(encoding@0.1.13) + '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/id-generator-aws-xray': 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.203.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) + '@sentry/node': 9.22.0 + '@types/jest': 29.5.12 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0)(typescript@5.8.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.3) + eslint: 8.56.0 + eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0)(typescript@5.8.3))(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint-plugin-n@15.7.0(eslint@8.56.0))(eslint-plugin-promise@6.1.1(eslint@8.56.0))(eslint@8.56.0)(typescript@5.8.3) + eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-n: 15.7.0(eslint@8.56.0) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) + jest: 29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3)) + prettier: 3.2.5 + simplytyped: 3.3.0(typescript@5.8.3) + ts-jest: 29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(esbuild@0.24.2)(jest@29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3)))(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - '@babel/core' + - '@jest/types' + - '@types/node' + - babel-jest + - babel-plugin-macros + - encoding + - esbuild + - node-notifier + - supports-color + - ts-node + + '@rush-temp/measurements@file:projects/measurements.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(@types/node@22.15.29)(babel-jest@29.7.0(@babel/core@7.23.9))(esbuild@0.24.2)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3))': + dependencies: + '@types/jest': 29.5.12 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0)(typescript@5.8.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.3) + eslint: 8.56.0 + eslint-config-standard-with-typescript: 40.0.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.3))(eslint@8.56.0)(typescript@5.8.3))(eslint-plugin-import@2.29.1(eslint@8.56.0))(eslint-plugin-n@15.7.0(eslint@8.56.0))(eslint-plugin-promise@6.1.1(eslint@8.56.0))(eslint@8.56.0)(typescript@5.8.3) + eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-n: 15.7.0(eslint@8.56.0) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) + jest: 29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3)) + prettier: 3.2.5 + simplytyped: 3.3.0(typescript@5.8.3) + ts-jest: 29.1.2(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(esbuild@0.24.2)(jest@29.7.0(@types/node@22.15.29)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3)))(typescript@5.8.3) + typescript: 5.8.3 + transitivePeerDependencies: + - '@babel/core' + - '@jest/types' + - '@types/node' + - babel-jest + - babel-plugin-macros + - esbuild + - node-notifier + - supports-color + - ts-node + '@rush-temp/media-assets@file:projects/media-assets.tgz(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(esbuild@0.24.2)(ts-node@10.9.2(@types/node@22.15.29)(typescript@5.8.3))': dependencies: '@types/jest': 29.5.12 @@ -29172,6 +30535,8 @@ snapshots: '@types/aws-lambda@8.10.142': {} + '@types/aws-lambda@8.10.150': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.23.9 @@ -29204,6 +30569,10 @@ snapshots: '@types/btoa-lite@1.0.2': {} + '@types/bunyan@1.8.11': + dependencies: + '@types/node': 22.15.29 + '@types/busboy@1.5.3': dependencies: '@types/node': 22.15.29 @@ -29543,6 +30912,10 @@ snapshots: '@types/mdurl@2.0.0': {} + '@types/memcached@2.2.10': + dependencies: + '@types/node': 22.15.29 + '@types/mime-types@2.1.4': {} '@types/mime@1.3.5': {} @@ -29567,6 +30940,10 @@ snapshots: dependencies: '@types/node': 22.15.29 + '@types/mysql@2.15.27': + dependencies: + '@types/node': 22.15.29 + '@types/node-cron@3.0.11': {} '@types/node-fetch@2.6.12': @@ -29600,6 +30977,10 @@ snapshots: dependencies: '@types/node': 22.15.29 + '@types/oracledb@6.5.2': + dependencies: + '@types/node': 22.15.29 + '@types/otp-generator@4.0.2': {} '@types/passport-github2@1.2.9': @@ -29634,6 +31015,12 @@ snapshots: pg-protocol: 1.7.0 pg-types: 4.0.2 + '@types/pg@8.15.4': + dependencies: + '@types/node': 22.15.29 + pg-protocol: 1.7.0 + pg-types: 2.2.0 + '@types/pg@8.6.1': dependencies: '@types/node': 22.15.29 @@ -32955,6 +34342,17 @@ snapshots: - encoding - supports-color + gaxios@6.7.1(encoding@0.1.13): + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.5 + is-stream: 2.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + gcp-metadata@5.3.0(encoding@0.1.13): dependencies: gaxios: 5.1.3(encoding@0.1.13) @@ -32963,6 +34361,15 @@ snapshots: - encoding - supports-color + gcp-metadata@6.1.1(encoding@0.1.13): + dependencies: + gaxios: 6.7.1(encoding@0.1.13) + google-logging-utils: 0.0.2 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + gensync@1.0.0-beta.2: {} get-caller-file@1.0.3: {} @@ -33114,6 +34521,8 @@ snapshots: - encoding - supports-color + google-logging-utils@0.0.2: {} + google-p12-pem@4.0.1: dependencies: node-forge: 1.3.1 @@ -34628,6 +36037,8 @@ snapshots: lodash.bind@4.2.1: {} + lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} lodash.defaults@4.2.0: {} @@ -34695,6 +36106,8 @@ snapshots: loglevel@1.9.2: {} + long@5.3.2: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -36021,6 +37434,21 @@ snapshots: prosemirror-state: 1.4.3 prosemirror-transform: 1.10.2 + protobufjs@7.5.3: + 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': 22.15.29 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 diff --git a/dev/docker-compose.yaml b/dev/docker-compose.yaml index 92baaca16e..b554ff930f 100644 --- a/dev/docker-compose.yaml +++ b/dev/docker-compose.yaml @@ -160,6 +160,7 @@ services: - ACCOUNTS_URL=http://huly.local:3000 - BRANDING_PATH=/var/cfg/branding.json # - DISABLE_SIGNUP=true + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped stats: image: hardcoreeng/stats @@ -170,6 +171,7 @@ services: environment: - PORT=4900 - SERVER_SECRET=secret + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped workspace_cockroach: image: hardcoreeng/workspace @@ -198,6 +200,7 @@ services: - BACKUP_BUCKET=${BACKUP_BUCKET_NAME} - MAIL_URL= # - INIT_WORKSPACE=staging-dev + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped collaborator: image: hardcoreeng/collaborator @@ -215,6 +218,7 @@ services: - ACCOUNTS_URL=http://huly.local:3000 - STORAGE_CONFIG=${STORAGE_CONFIG} - STATS_URL=http://huly.local:4900 + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped front: image: hardcoreeng/front @@ -246,7 +250,7 @@ services: - GITHUB_URL=http://huly.local:3500 - PRINT_URL=http://huly.local:4005 - SIGN_URL=http://huly.local:4006 -# - ANALYTICS_COLLECTOR_URL=http://huly.local:4017 + # - ANALYTICS_COLLECTOR_URL=http://huly.local:4017 - DESKTOP_UPDATES_URL=https://dist.huly.io - DESKTOP_UPDATES_CHANNEL=dev - BRANDING_URL=http://huly.local:8087/branding.json @@ -255,6 +259,7 @@ services: - BACKUP_URL=http://huly.local:4039/api/backup, - EXCLUDED_APPLICATIONS_FOR_ANONYMOUS=["chunter", "notification"] # - DISABLE_SIGNUP=true + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped transactor_cockroach: image: hardcoreeng/transactor @@ -296,6 +301,7 @@ services: - RATE_LIMIT_WINDOW=30000 - FILES_URL=http://huly.local:4030/blob/:workspace/:blobId/:filename - COMMUNICATION_API_ENABLED=true + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped rekoni: image: hardcoreeng/rekoni-service @@ -306,6 +312,7 @@ services: - 4004:4004 environment: - STATS_URL=http://huly.local:4901 + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces fulltext_cockroach: image: hardcoreeng/fulltext extra_hosts: @@ -332,6 +339,7 @@ services: - STATS_URL=http://huly.local:4900 - REKONI_URL=http://huly.local:4004 - ACCOUNTS_URL=http://huly.local:3000 + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces print: image: hardcoreeng/print extra_hosts: @@ -346,6 +354,7 @@ services: - STORAGE_CONFIG=${STORAGE_CONFIG} - STATS_URL=http://huly.local:4900 - ACCOUNTS_URL=http://huly.local:3000 + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces sign: image: hardcoreeng/sign extra_hosts: @@ -368,6 +377,7 @@ services: - SERVICE_ID=sign-service - BRANDING_PATH=/var/cfg/branding.json - STATS_URL=http://huly.local:4900 + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces # aiBot: # image: hardcoreeng/ai-bot # ports: @@ -418,6 +428,7 @@ services: - SECRET=secret - SERVICE_ID=msg2file-service - STORAGE_CONFIG=${STORAGE_CONFIG} + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces export: image: hardcoreeng/export extra_hosts: @@ -435,6 +446,7 @@ services: - STATS_URL=http://huly.local:4900 - STORAGE_CONFIG=${STORAGE_CONFIG} - ACCOUNTS_URL=http://huly.local:3000 + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces datalake: image: hardcoreeng/datalake extra_hosts: @@ -459,6 +471,7 @@ services: - BUCKETS=blobs,eu|http://minio:9000?accessKey=minioadmin&secretKey=minioadmin - REGION=cockroach - QUEUE_CONFIG=${QUEUE_CONFIG} + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped hulykvs: image: hardcoreeng/hulykvs @@ -511,6 +524,7 @@ services: - INTERVAL=60 - STORAGE=minio|minio?accessKey=minioadmin&secretKey=minioadmin - WORKSPACE_STORAGE=${STORAGE_CONFIG} + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces restart: unless-stopped backup-api: image: hardcoreeng/backup-api @@ -532,6 +546,23 @@ services: - STATS_URL=http://huly.local:4900 - BUCKET_NAME=backups - STORAGE=minio|minio?accessKey=minioadmin&secretKey=minioadmin + - OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4318/v1/traces + restart: unless-stopped + jaeger: + image: jaegertracing/all-in-one:latest + extra_hosts: + - 'huly.local:host-gateway' + ports: + - 16686:16686 # Web UI + - 4317:4317 + - 4318:4318 + volumes: + - telemetry:/badger + environment: + - COLLECTOR_OTLP_ENABLED=true + - SPAN_STORAGE_TYPE=badger + - BADGER_DIRECTORY_VALUE=/badger/data + - BADGER_DIRECTORY_KEY=/badger/key restart: unless-stopped volumes: db: @@ -540,3 +571,4 @@ volumes: elastic: cockroach_db: redpanda: + telemetry: diff --git a/packages/analytics-providers/config/rig.json b/packages/analytics-providers/config/rig.json new file mode 100644 index 0000000000..0110930f55 --- /dev/null +++ b/packages/analytics-providers/config/rig.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + "rigPackageName": "@hcengineering/platform-rig" +} diff --git a/packages/analytics-providers/jest.config.js b/packages/analytics-providers/jest.config.js new file mode 100644 index 0000000000..2cfd408b67 --- /dev/null +++ b/packages/analytics-providers/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ['**/?(*.)+(spec|test).[jt]s?(x)'], + roots: ["./src"], + coverageReporters: ["text-summary", "html"] +} diff --git a/packages/analytics-service/package.json b/packages/analytics-service/package.json index 875cbd76f3..1a85c91f42 100644 --- a/packages/analytics-service/package.json +++ b/packages/analytics-service/package.json @@ -41,6 +41,7 @@ "@hcengineering/platform": "^0.6.11", "@hcengineering/core": "^0.6.32", "@hcengineering/analytics": "^0.6.0", + "@hcengineering/measurements-otlp": "^0.6.0", "winston": "^3.11.0", "winston-daily-rotate-file": "^5.0.0", "@sentry/node": "^9.22.0" diff --git a/packages/analytics-service/src/index.ts b/packages/analytics-service/src/index.ts index 86c9bfb523..93e56f8768 100644 --- a/packages/analytics-service/src/index.ts +++ b/packages/analytics-service/src/index.ts @@ -7,6 +7,7 @@ import { SentryAnalyticProvider } from './sentry' export * from './logging' export * from './sentry' +export * from '@hcengineering/measurements-otlp' export function configureAnalytics (sentryDSN: string | undefined, config?: Record): void { const providers: AnalyticProvider[] = [] diff --git a/packages/core/package.json b/packages/core/package.json index 7057e61a87..46a5a62c9f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -41,6 +41,7 @@ "dependencies": { "@hcengineering/platform": "^0.6.11", "@hcengineering/analytics": "^0.6.0", + "@hcengineering/measurements": "^0.6.0", "fast-equals": "^5.2.2" }, "repository": "https://github.com/hcengineering/platform", diff --git a/packages/core/src/__tests__/contexts.test.ts b/packages/core/src/__tests__/contexts.test.ts index 6ba8d490aa..86ef62b79f 100644 --- a/packages/core/src/__tests__/contexts.test.ts +++ b/packages/core/src/__tests__/contexts.test.ts @@ -1,4 +1,4 @@ -import { MeasureMetricsContext } from '../measurements' +import { MeasureMetricsContext } from '@hcengineering/measurements' describe('context tests', () => { it('check withLog proper catch', async () => { diff --git a/packages/core/src/client.ts b/packages/core/src/client.ts index 255c883f3f..d582ce4249 100644 --- a/packages/core/src/client.ts +++ b/packages/core/src/client.ts @@ -26,7 +26,7 @@ import { } from './classes' import core from './component' import { Hierarchy } from './hierarchy' -import { type MeasureContext, MeasureMetricsContext } from './measurements' +import { type MeasureContext, MeasureMetricsContext } from '@hcengineering/measurements' import { ModelDb } from './memdb' import type { DocumentQuery, diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 10c84d8997..2e4289a14b 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -26,7 +26,7 @@ export { configUserAccountUuid } from './component' export * from './hierarchy' -export * from './measurements' +export * from '@hcengineering/measurements' export * from './memdb' export * from './objvalue' export * from './operations' diff --git a/packages/core/src/measurements/index.ts b/packages/core/src/measurements/index.ts deleted file mode 100644 index f15531da84..0000000000 --- a/packages/core/src/measurements/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './context' -export * from './metrics' -export * from './types' diff --git a/packages/core/src/server.ts b/packages/core/src/server.ts index 31b269fd6a..295822f95a 100644 --- a/packages/core/src/server.ts +++ b/packages/core/src/server.ts @@ -14,7 +14,7 @@ // import type { Account, AccountRole, AccountUuid, Doc, Domain, PersonId, Ref } from './classes' -import { type MeasureContext } from './measurements' +import { type MeasureContext } from '@hcengineering/measurements' import { type DocumentQuery, type FindOptions } from './storage' import type { DocumentUpdate, Tx } from './tx' import { type WorkspaceIds } from './utils' diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index 3c30bf772e..33bfb151a9 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -968,13 +968,4 @@ export function unique (arr: T[]): T[] { export function uniqueNotEmpty> (arr: Array): T[] { return unique(arr).filter(notEmpty) } - -/** - * Return a current performance timestamp - */ -export const platformNow: () => number = () => performance.now() - -/** - * Return a diff with previous performance snapshot with 2 digits after . max. - */ -export const platformNowDiff = (old: number): number => Math.round((performance.now() - old) * 100) / 100 +export { platformNow, platformNowDiff } from '@hcengineering/measurements' diff --git a/packages/measurements-otlp/.eslintrc.js b/packages/measurements-otlp/.eslintrc.js new file mode 100644 index 0000000000..72235dc283 --- /dev/null +++ b/packages/measurements-otlp/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: ['./node_modules/@hcengineering/platform-rig/profiles/default/eslint.config.json'], + parserOptions: { + tsconfigRootDir: __dirname, + project: './tsconfig.json' + } +} diff --git a/packages/measurements-otlp/.npmignore b/packages/measurements-otlp/.npmignore new file mode 100644 index 0000000000..e3ec093c38 --- /dev/null +++ b/packages/measurements-otlp/.npmignore @@ -0,0 +1,4 @@ +* +!/lib/** +!CHANGELOG.md +/lib/**/__tests__/ diff --git a/packages/measurements-otlp/config/rig.json b/packages/measurements-otlp/config/rig.json new file mode 100644 index 0000000000..0110930f55 --- /dev/null +++ b/packages/measurements-otlp/config/rig.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + "rigPackageName": "@hcengineering/platform-rig" +} diff --git a/packages/measurements-otlp/jest.config.js b/packages/measurements-otlp/jest.config.js new file mode 100644 index 0000000000..2cfd408b67 --- /dev/null +++ b/packages/measurements-otlp/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ['**/?(*.)+(spec|test).[jt]s?(x)'], + roots: ["./src"], + coverageReporters: ["text-summary", "html"] +} diff --git a/packages/measurements-otlp/package.json b/packages/measurements-otlp/package.json new file mode 100644 index 0000000000..b1128e14ef --- /dev/null +++ b/packages/measurements-otlp/package.json @@ -0,0 +1,60 @@ +{ + "name": "@hcengineering/measurements-otlp", + "version": "0.6.0", + "main": "lib/index.js", + "svelte": "src/index.ts", + "types": "types/index.d.ts", + "files": [ + "lib/**/*", + "types/**/*", + "tsconfig.json" + ], + "author": "Anticrm Platform Contributors", + "license": "EPL-2.0", + "scripts": { + "build": "compile", + "build:watch": "compile", + "test": "jest --passWithNoTests --silent", + "format": "format src", + "_phase:build": "compile transpile src", + "_phase:test": "jest --passWithNoTests --silent", + "_phase:format": "format src", + "_phase:validate": "compile validate" + }, + "devDependencies": { + "@hcengineering/platform-rig": "^0.6.0", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-n": "^15.4.0", + "eslint": "^8.54.0", + "simplytyped": "^3.3.0", + "@typescript-eslint/parser": "^6.11.0", + "eslint-config-standard-with-typescript": "^40.0.0", + "prettier": "^3.1.0", + "typescript": "^5.8.3", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", + "@types/jest": "^29.5.5" + }, + "dependencies": { + "@hcengineering/measurements": "^0.6.0", + "@sentry/node": "^9.22.0", + "@opentelemetry/sdk-node": "^0.203.0", + "@opentelemetry/sdk-logs": "^0.203.0", + "@opentelemetry/auto-instrumentations-node": "^0.62.0", + "@opentelemetry/resources": "^2.0.1", + "@opentelemetry/sdk-trace-node": "^2.0.1", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^2.0.1", + "@opentelemetry/exporter-trace-otlp-http": "^0.203.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.203.0", + "@opentelemetry/otlp-exporter-base": "^0.203.0", + "@opentelemetry/id-generator-aws-xray": "^2.0.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0" + }, + "repository": "https://github.com/hcengineering/platform", + "publishConfig": { + "registry": "https://npm.pkg.github.com" + } +} diff --git a/packages/measurements-otlp/src/index.ts b/packages/measurements-otlp/src/index.ts new file mode 100644 index 0000000000..8b5ba81c39 --- /dev/null +++ b/packages/measurements-otlp/src/index.ts @@ -0,0 +1 @@ +export * from './telemetry' diff --git a/packages/measurements-otlp/src/telemetry.ts b/packages/measurements-otlp/src/telemetry.ts new file mode 100644 index 0000000000..e1fe8977b4 --- /dev/null +++ b/packages/measurements-otlp/src/telemetry.ts @@ -0,0 +1,355 @@ +import { + childMetrics, + consoleLogger, + MeasureContext, + MeasureMetricsContext, + newMetrics, + noParamsLogger, + nullPromise, + platformNow, + platformNowDiff, + updateMeasure, + type FullParamsType, + type MeasureLogger, + type Metrics, + type ParamsType +} from '@hcengineering/measurements' +import { context, Span, trace, type Context, type Tracer } from '@opentelemetry/api' +import { suppressTracing } from '@opentelemetry/core' +import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node' +import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http' +import { AWSXRayIdGenerator } from '@opentelemetry/id-generator-aws-xray' +import { CompressionAlgorithm } from '@opentelemetry/otlp-exporter-base' +import { NodeSDK } from '@opentelemetry/sdk-node' +import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-node' + +/** + * @public + */ +export class OpenTelemetryMetricsContext implements MeasureContext { + private readonly name: string + private readonly params: ParamsType + + private readonly fullParams: FullParamsType | (() => FullParamsType) = {} + logger: MeasureLogger + metrics: Metrics + id?: string + + st = platformNow() + contextData: object = {} + private done (value?: number, override?: boolean): void { + updateMeasure(this.metrics, this.st, this.params, this.fullParams, (spend) => {}, value, override) + this.span?.end() + } + + constructor ( + name: string, + readonly tracer: Tracer, + readonly context: Context, + readonly span: Span | undefined, + params: ParamsType, + fullParams: FullParamsType | (() => FullParamsType) = {}, + metrics: Metrics = newMetrics(), + logger?: MeasureLogger, + readonly parent?: MeasureContext, + readonly logParams?: ParamsType + ) { + this.name = name + this.params = params + this.fullParams = fullParams + this.metrics = metrics + this.metrics.namedParams = this.metrics.namedParams ?? {} + for (const [k, v] of Object.entries(params)) { + if (this.metrics.namedParams[k] !== v) { + this.metrics.namedParams[k] = v + } else { + this.metrics.namedParams[k] = '*' + } + } + + this.logger = logger ?? (this.logParams != null ? consoleLogger(this.logParams ?? {}) : noParamsLogger) + } + + measure (name: string, value: number, override?: boolean): void { + this.span?.addEvent(name, value) + } + + newChild ( + name: string, + params: ParamsType, + fullParams?: FullParamsType | (() => FullParamsType), + logger?: MeasureLogger, + useContextParent: boolean = true + ): MeasureContext { + const childContext = useContextParent + ? context.active() + : this.span !== undefined + ? trace.setSpan(this.context, this.span) + : this.context + const span = this.tracer.startSpan(name, undefined, childContext) + + const spanParams = [...Object.entries(params)] + for (const [k, v] of spanParams) { + span?.setAttribute(k, v as any) + } + + const result = new OpenTelemetryMetricsContext( + name, + this.tracer, + childContext, + span, + params, + fullParams ?? {}, + childMetrics(this.metrics, [name]), + logger ?? this.logger, + this, + this.logParams + ) + result.id = this.id + result.contextData = this.contextData + return result + } + + with( + name: string, + params: ParamsType, + op: (ctx: MeasureContext) => T | Promise, + fullParams?: ParamsType | (() => FullParamsType) + ): Promise { + const c = this.newChild(name, params, fullParams, this.logger, false) + let needFinally = true + try { + const _context = (c as OpenTelemetryMetricsContext).context ?? context.active() + + const span = (c as OpenTelemetryMetricsContext).span + + const value = context.with(_context, () => op(c)) + if (value instanceof Promise) { + needFinally = false + if (span !== undefined) { + void value.catch((err) => { + span?.recordException(err) + }) + } + return value.finally(() => { + if (span !== undefined) { + const fParams = typeof fullParams === 'function' ? fullParams() : fullParams + const spanParams = [...Object.entries(fParams ?? {})] + for (const [k, v] of spanParams) { + span?.setAttribute(k, v) + } + } + c.end() + }) + } else { + if (value == null) { + return nullPromise as Promise + } + return Promise.resolve(value) + } + } finally { + if (needFinally) { + c.end() + } + } + } + + withoutTracing(op: () => T): T { + return context.with(suppressTracing(this.context), op) + } + + withSync( + name: string, + params: ParamsType, + op: (ctx: MeasureContext) => T, + fullParams?: ParamsType | (() => FullParamsType) + ): T { + const c = this.newChild(name, params, fullParams, this.logger, false) + const _context = (c as OpenTelemetryMetricsContext).context ?? context.active() + + const span = (c as OpenTelemetryMetricsContext).span + + try { + return context.with(_context, () => op(c)) + } catch (err: any) { + if (span !== undefined) { + span.recordException(err) + } + throw err + } finally { + c.end() + } + } + + withLog( + name: string, + params: ParamsType, + op: (ctx: MeasureContext) => T | Promise, + fullParams?: ParamsType + ): Promise { + const st = platformNow() + const r = this.with(name, params, op, fullParams) + r.catch(() => { + // Ignore logging errors to prevent unhandled rejections + }).finally(() => { + this.logger.logOperation(name, platformNowDiff(st), { ...params, ...fullParams }) + }) + return r + } + + error (message: string, args?: Record): void { + this.logger.error(message, { ...this.params, ...args, ...(this.logParams ?? {}) }) + } + + info (message: string, args?: Record): void { + this.logger.info(message, { ...this.params, ...args, ...(this.logParams ?? {}) }) + } + + warn (message: string, args?: Record): void { + this.logger.warn(message, { ...this.params, ...args, ...(this.logParams ?? {}) }) + } + + end (): void { + this.done() + } + + getParams (): ParamsType { + return this.params + } +} + +/** + * Parse W3C baggage header format to Record + * + * W3C baggage format: "key1=value1,key2=value2;property=value,key3=value3" + * Returns only the key-value pairs, ignoring properties + */ +function parseBaggage (baggageHeader?: string): Record { + if (baggageHeader == null || typeof baggageHeader !== 'string') { + return {} + } + + const result: Record = {} + + // Split by comma to get individual baggage members + const members = baggageHeader.split(',') + + for (const member of members) { + const trimmedMember = member.trim() + if (trimmedMember === '') continue + + // Split by semicolon to separate key=value from properties + const parts = trimmedMember.split(';') + const keyValuePart = parts[0]?.trim() + + if (keyValuePart == null) continue + + // Split by equals to get key and value + const equalIndex = keyValuePart.indexOf('=') + if (equalIndex === -1) continue + + const key = keyValuePart.substring(0, equalIndex).trim() + const value = keyValuePart.substring(equalIndex + 1).trim() + + if (key != null) { + // URL decode the key and value + try { + const decodedKey = decodeURIComponent(key) + const decodedValue = decodeURIComponent(value) + result[decodedKey] = decodedValue + } catch (error) { + // If decoding fails, use the original values + result[key] = value + } + } + } + + return result +} + +export function createOpenTelemetryMetricsContext ( + name: string, + params: ParamsType, + fullParams: FullParamsType | (() => FullParamsType) = {}, + metrics: Metrics = newMetrics(), + logger?: MeasureLogger +): MeasureContext { + let url = process.env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT ?? process.env.OTEL_EXPORTER_OTLP_ENDPOINT + + if (url !== undefined && !url.endsWith('/v1/traces')) { + if (url.endsWith('/')) { + url += 'v1/traces' + } else { + url += '/v1/traces' + } + } + + if (url === undefined) { + console.warn('OTEL_EXPORTER_OTLP_TRACES_ENDPOINT is not set, OpenTelemetry metrics will not be sent') + return new MeasureMetricsContext(name, params, fullParams, metrics, logger) + } + + const headers: Record = parseBaggage(process.env.OTEL_EXPORTER_OTLP_HEADERS) ?? {} + + if (process.env.OTEL_EXPORTER_OTLP_TRACES_HEADERS !== undefined) { + const extraHeaders = parseBaggage(process.env.OTEL_EXPORTER_OTLP_TRACES_HEADERS) + for (const [key, value] of Object.entries(extraHeaders)) { + headers[key] = value + } + } + + const exporter = new OTLPTraceExporter({ + url, + headers, + compression: + (process.env.OTEL_EXPORTER_OTLP_COMPRESSION as CompressionAlgorithm) ?? + (process.env.OTEL_EXPORTER_OTLP_TRACES_COMPRESSION as CompressionAlgorithm) ?? + CompressionAlgorithm.GZIP, + keepAlive: true + }) + + const bsp = new BatchSpanProcessor(exporter, { + maxExportBatchSize: parseInt(process.env.OTEL_EXPORTER_OTLP_TRACES_MAX_EXPORT_BATCH_SIZE ?? '1000'), + maxQueueSize: parseInt(process.env.OTEL_EXPORTER_OTLP_TRACES_MAX_QUEUE_SIZE ?? '1000') + }) + + const sdk = new NodeSDK({ + spanProcessor: bsp, + serviceName: name, + traceExporter: exporter, + instrumentations: [getNodeAutoInstrumentations()], + idGenerator: new AWSXRayIdGenerator() + }) + + sdk.start() + + // Graceful shutdown + process.on('SIGTERM', () => { + sdk + .shutdown() + .then(() => { + console.log('Tracing terminated') + }) + .catch((error) => { + console.log('Error terminating tracing', error) + }) + .finally(() => process.exit(0)) + }) + + const tracer = trace.getTracer(name) + const currentConext = context.active() + const ctx = new OpenTelemetryMetricsContext( + name, + tracer, + currentConext, + undefined, + params, + fullParams, + metrics, + logger + ) + ctx.info('Using open telemetry metrics context', { + endpoint: url + }) + return ctx +} diff --git a/packages/measurements-otlp/tsconfig.json b/packages/measurements-otlp/tsconfig.json new file mode 100644 index 0000000000..b5ae22f6e4 --- /dev/null +++ b/packages/measurements-otlp/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "./node_modules/@hcengineering/platform-rig/profiles/default/tsconfig.json", + + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib", + "declarationDir": "./types", + "tsBuildInfoFile": ".build/build.tsbuildinfo" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "lib", "dist", "types", "bundle"] +} \ No newline at end of file diff --git a/packages/measurements/.eslintrc.js b/packages/measurements/.eslintrc.js new file mode 100644 index 0000000000..72235dc283 --- /dev/null +++ b/packages/measurements/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: ['./node_modules/@hcengineering/platform-rig/profiles/default/eslint.config.json'], + parserOptions: { + tsconfigRootDir: __dirname, + project: './tsconfig.json' + } +} diff --git a/packages/measurements/.npmignore b/packages/measurements/.npmignore new file mode 100644 index 0000000000..e3ec093c38 --- /dev/null +++ b/packages/measurements/.npmignore @@ -0,0 +1,4 @@ +* +!/lib/** +!CHANGELOG.md +/lib/**/__tests__/ diff --git a/packages/measurements/config/rig.json b/packages/measurements/config/rig.json new file mode 100644 index 0000000000..0110930f55 --- /dev/null +++ b/packages/measurements/config/rig.json @@ -0,0 +1,4 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/rig-package/rig.schema.json", + "rigPackageName": "@hcengineering/platform-rig" +} diff --git a/packages/measurements/jest.config.js b/packages/measurements/jest.config.js new file mode 100644 index 0000000000..2cfd408b67 --- /dev/null +++ b/packages/measurements/jest.config.js @@ -0,0 +1,7 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testMatch: ['**/?(*.)+(spec|test).[jt]s?(x)'], + roots: ["./src"], + coverageReporters: ["text-summary", "html"] +} diff --git a/packages/measurements/package.json b/packages/measurements/package.json new file mode 100644 index 0000000000..56430b1497 --- /dev/null +++ b/packages/measurements/package.json @@ -0,0 +1,52 @@ +{ + "name": "@hcengineering/measurements", + "version": "0.6.0", + "main": "lib/index.js", + "svelte": "src/index.ts", + "types": "types/index.d.ts", + "files": [ + "lib/**/*", + "types/**/*", + "tsconfig.json" + ], + "author": "Anticrm Platform Contributors", + "license": "EPL-2.0", + "scripts": { + "build": "compile", + "build:watch": "compile", + "test": "jest --passWithNoTests --silent", + "format": "format src", + "_phase:build": "compile transpile src", + "_phase:test": "jest --passWithNoTests --silent", + "_phase:format": "format src", + "_phase:validate": "compile validate" + }, + "devDependencies": { + "@hcengineering/platform-rig": "^0.6.0", + "@typescript-eslint/eslint-plugin": "^6.11.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-promise": "^6.1.1", + "eslint-plugin-n": "^15.4.0", + "eslint": "^8.54.0", + "simplytyped": "^3.3.0", + "@typescript-eslint/parser": "^6.11.0", + "eslint-config-standard-with-typescript": "^40.0.0", + "prettier": "^3.1.0", + "typescript": "^5.8.3", + "jest": "^29.7.0", + "ts-jest": "^29.1.1", + "@types/jest": "^29.5.5" + }, + "dependencies": {}, + "repository": "https://github.com/hcengineering/platform", + "publishConfig": { + "registry": "https://npm.pkg.github.com" + }, + "exports": { + ".": { + "types": "./types/index.d.ts", + "require": "./lib/index.js", + "import": "./lib/index.js" + } + } +} diff --git a/packages/core/src/measurements/context.ts b/packages/measurements/src/context.ts similarity index 95% rename from packages/core/src/measurements/context.ts rename to packages/measurements/src/context.ts index 0b2e12b6b3..663923da0f 100644 --- a/packages/core/src/measurements/context.ts +++ b/packages/measurements/src/context.ts @@ -1,6 +1,6 @@ // Basic performance metrics suite. -import { generateId, platformNow, platformNowDiff } from '../utils' +import { platformNow, platformNowDiff } from '.' import { childMetrics, newMetrics, updateMeasure } from './metrics' import { type FullParamsType, @@ -21,7 +21,7 @@ function replacer (value: any): any { return value instanceof Error ? errorPrinter(value) : value } -const consoleLogger = (logParams: Record): MeasureLogger => ({ +export const consoleLogger = (logParams: Record): MeasureLogger => ({ info: (msg, args) => { console.info( msg, @@ -45,9 +45,9 @@ const consoleLogger = (logParams: Record): MeasureLogger => ({ logOperation: (operation, time, params) => {} }) -const noParamsLogger = consoleLogger({}) +export const noParamsLogger = consoleLogger({}) -const nullPromise = Promise.resolve() +export const nullPromise = Promise.resolve() /** * @public @@ -146,6 +146,10 @@ export class MeasureMetricsContext implements MeasureContext { } } + withoutTracing(op: () => T): T { + return op() + } + withSync( name: string, params: ParamsType, @@ -231,6 +235,10 @@ export class NoMetricsContext implements MeasureContext { return r instanceof Promise ? r : Promise.resolve(r) } + withoutTracing(op: () => T): T { + return op() + } + withSync( name: string, params: ParamsType, @@ -290,6 +298,8 @@ export function setOperationLogProfiling (value: boolean): void { operationProfiling = value } +let globalId: number = 0 + export function registerOperationLog (ctx: MeasureContext): { opLogMetrics?: Metrics, op?: OperationLog } { if (!operationProfiling) { return {} @@ -298,7 +308,7 @@ export function registerOperationLog (ctx: MeasureContext): { opLogMetrics?: Met let opLogMetrics: Metrics | undefined if (ctx.id === undefined) { - ctx.id = 'op_' + generateId() + ctx.id = 'op_' + (++globalId).toString(16) } if (ctx.metrics !== undefined) { if (ctx.metrics.opLog === undefined) { diff --git a/packages/measurements/src/index.ts b/packages/measurements/src/index.ts new file mode 100644 index 0000000000..d736098c8a --- /dev/null +++ b/packages/measurements/src/index.ts @@ -0,0 +1,13 @@ +export * from './context' +export * from './metrics' +export * from './types' + +/** + * Return a current performance timestamp + */ +export const platformNow: () => number = () => performance.now() + +/** + * Return a diff with previous performance snapshot with 2 digits after . max. + */ +export const platformNowDiff = (old: number): number => Math.round((performance.now() - old) * 100) / 100 diff --git a/packages/core/src/measurements/metrics.ts b/packages/measurements/src/metrics.ts similarity index 99% rename from packages/core/src/measurements/metrics.ts rename to packages/measurements/src/metrics.ts index 3db32913dd..55b23fc318 100644 --- a/packages/core/src/measurements/metrics.ts +++ b/packages/measurements/src/metrics.ts @@ -1,7 +1,6 @@ // Basic performance metrics suite. -import { type MetricsData } from '.' -import { platformNow } from '../utils' +import { platformNow, type MetricsData } from '.' import { type FullParamsType, type Metrics, type ParamsType } from './types' /** diff --git a/packages/core/src/measurements/types.ts b/packages/measurements/src/types.ts similarity index 98% rename from packages/core/src/measurements/types.ts rename to packages/measurements/src/types.ts index 84b9fa483a..77121a71d3 100644 --- a/packages/core/src/measurements/types.ts +++ b/packages/measurements/src/types.ts @@ -84,6 +84,8 @@ export interface MeasureContext { fullParams?: FullParamsType | (() => FullParamsType) ) => Promise + withoutTracing: (op: () => T) => T + withSync: ( name: string, params: ParamsType, diff --git a/packages/measurements/tsconfig.json b/packages/measurements/tsconfig.json new file mode 100644 index 0000000000..b5ae22f6e4 --- /dev/null +++ b/packages/measurements/tsconfig.json @@ -0,0 +1,12 @@ +{ + "extends": "./node_modules/@hcengineering/platform-rig/profiles/default/tsconfig.json", + + "compilerOptions": { + "rootDir": "./src", + "outDir": "./lib", + "declarationDir": "./types", + "tsBuildInfoFile": ".build/build.tsbuildinfo" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "lib", "dist", "types", "bundle"] +} \ No newline at end of file diff --git a/pods/account/src/__start.ts b/pods/account/src/__start.ts index 12f17d93d9..af8564206e 100644 --- a/pods/account/src/__start.ts +++ b/pods/account/src/__start.ts @@ -3,8 +3,8 @@ // import { serveAccount } from '@hcengineering/account-service' import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' import { initStatisticsContext, loadBrandingMap } from '@hcengineering/server-core' import { join } from 'path' @@ -13,7 +13,7 @@ Analytics.setTag('application', 'account') const metricsContext = initStatisticsContext('account', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'account', {}, {}, diff --git a/pods/backup/src/index.ts b/pods/backup/src/index.ts index a77804956a..a840fde315 100644 --- a/pods/backup/src/index.ts +++ b/pods/backup/src/index.ts @@ -14,9 +14,9 @@ // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' import { startBackup } from '@hcengineering/backup-service' -import { MeasureMetricsContext, newMetrics, type Tx } from '@hcengineering/core' +import { newMetrics, type Tx } from '@hcengineering/core' import { initStatisticsContext, type PipelineFactory } from '@hcengineering/server-core' import { createBackupPipeline, @@ -56,7 +56,7 @@ process.on('exit', () => { const metricsContext = initStatisticsContext('backup', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'backup', {}, {}, diff --git a/pods/collaborator/src/__start.ts b/pods/collaborator/src/__start.ts index baf5225a7d..f306be085c 100644 --- a/pods/collaborator/src/__start.ts +++ b/pods/collaborator/src/__start.ts @@ -14,9 +14,9 @@ // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' import { startCollaborator } from '@hcengineering/collaborator' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { newMetrics } from '@hcengineering/core' import { initStatisticsContext } from '@hcengineering/server-core' import { join } from 'path' @@ -25,7 +25,7 @@ Analytics.setTag('application', 'collaborator') const metricsContext = initStatisticsContext('collaborator', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'collaborator', {}, {}, diff --git a/pods/front/src/__start.ts b/pods/front/src/__start.ts index 54ca20c464..1688559e8c 100644 --- a/pods/front/src/__start.ts +++ b/pods/front/src/__start.ts @@ -3,8 +3,8 @@ // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' import { startFront } from '@hcengineering/front/src/starter' import { initStatisticsContext } from '@hcengineering/server-core' import { join } from 'path' @@ -14,7 +14,7 @@ Analytics.setTag('application', 'front') const metricsContext = initStatisticsContext('front', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'front', {}, {}, diff --git a/pods/fulltext/src/index.ts b/pods/fulltext/src/index.ts index f669ee64b2..146ac2b504 100644 --- a/pods/fulltext/src/index.ts +++ b/pods/fulltext/src/index.ts @@ -14,8 +14,8 @@ // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics, type Tx } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics, type Tx } from '@hcengineering/core' import { initStatisticsContext, type StorageConfiguration } from '@hcengineering/server-core' import { join } from 'path' @@ -41,7 +41,7 @@ setMetadata(serverToken.metadata.Service, 'fulltext') const metricsContext = initStatisticsContext('fulltext', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'fulltext', {}, {}, diff --git a/pods/media/src/index.ts b/pods/media/src/index.ts index a95e309524..4f5409172c 100644 --- a/pods/media/src/index.ts +++ b/pods/media/src/index.ts @@ -14,8 +14,8 @@ // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' -import { Doc, MeasureMetricsContext, TxCUD, newMetrics } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { Doc, newMetrics, TxCUD } from '@hcengineering/core' import { getPlatformQueue } from '@hcengineering/kafka' import { setMetadata } from '@hcengineering/platform' import serverClient from '@hcengineering/server-client' @@ -46,7 +46,7 @@ async function main (): Promise { const ctx = initStatisticsContext(application, { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( application, {}, {}, diff --git a/pods/server/src/__start.ts b/pods/server/src/__start.ts index 0a77736523..4fc819ee20 100644 --- a/pods/server/src/__start.ts +++ b/pods/server/src/__start.ts @@ -4,9 +4,9 @@ // Add this to the VERY top of the first file loaded in your app import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' import contactPlugin from '@hcengineering/contact' -import { MeasureMetricsContext, newMetrics, setOperationLogProfiling } from '@hcengineering/core' +import { newMetrics, setOperationLogProfiling } from '@hcengineering/core' import { getPlatformQueue } from '@hcengineering/kafka' import { setMetadata } from '@hcengineering/platform' import { setDBExtraOptions } from '@hcengineering/postgres' @@ -50,7 +50,7 @@ const metricsContext = initStatisticsContext('transactor', { return getStats() }, factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'server', {}, {}, diff --git a/pods/workspace/src/__start.ts b/pods/workspace/src/__start.ts index f111a036d1..0ffb6762e4 100644 --- a/pods/workspace/src/__start.ts +++ b/pods/workspace/src/__start.ts @@ -2,8 +2,8 @@ // Copyright © 2023 Hardcore Engineering Inc. // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics, type Tx } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics, type Tx } from '@hcengineering/core' import { getPlatformQueue } from '@hcengineering/kafka' import builder, { getModelVersion, migrateOperations } from '@hcengineering/model-all' import { initStatisticsContext, loadBrandingMap } from '@hcengineering/server-core' @@ -18,7 +18,7 @@ Analytics.setTag('application', 'workspace') // Force create server metrics context with proper logging const metricsContext = initStatisticsContext('workspace', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'workspace', {}, {}, diff --git a/rush.json b/rush.json index 0eaf80fc53..051cfb0140 100644 --- a/rush.json +++ b/rush.json @@ -422,6 +422,16 @@ "projectFolder": "packages/platform", "shouldPublish": true }, + { + "packageName": "@hcengineering/measurements", + "projectFolder": "packages/measurements", + "shouldPublish": true + }, + { + "packageName": "@hcengineering/measurements-otlp", + "projectFolder": "packages/measurements-otlp", + "shouldPublish": true + }, { "packageName": "@hcengineering/core", "projectFolder": "packages/core", diff --git a/server/account-service/src/index.ts b/server/account-service/src/index.ts index da7861a634..3e039eaaf8 100644 --- a/server/account-service/src/index.ts +++ b/server/account-service/src/index.ts @@ -385,7 +385,9 @@ export function serveAccount (measureCtx: MeasureContext, brandings: BrandingMap // Ignore } - const result = await measureCtx.with(request.method, { source }, (mctx) => { + const userCtx = measureCtx.newChild(request.method, { source }) + + try { if (method === undefined || typeof method !== 'function') { const response = { id: request.id, @@ -396,12 +398,14 @@ export function serveAccount (measureCtx: MeasureContext, brandings: BrandingMap return } - return method(mctx, db, branding, request, token, meta) - }) + const result = await method(userCtx, db, branding, request, token, meta) - const body = JSON.stringify(result) - ctx.res.writeHead(200, KEEP_ALIVE_HEADERS) - ctx.res.end(body) + const body = JSON.stringify(result) + ctx.res.writeHead(200, KEEP_ALIVE_HEADERS) + ctx.res.end(body) + } finally { + userCtx.end() + } }) app.use(router.routes()).use(router.allowedMethods()) diff --git a/server/core/src/stats.ts b/server/core/src/stats.ts index d978d0d827..4b598b92fb 100644 --- a/server/core/src/stats.ts +++ b/server/core/src/stats.ts @@ -1,7 +1,6 @@ import type { MeasureContext, Metrics } from '@hcengineering/core' -import { concatLink, MeasureMetricsContext, metricsToString, newMetrics, systemAccountUuid } from '@hcengineering/core' +import { concatLink, MeasureMetricsContext, newMetrics, systemAccountUuid } from '@hcengineering/core' import { generateToken } from '@hcengineering/server-token' -import { writeFile } from 'fs/promises' import os from 'os' export interface MemoryStatistics { @@ -79,14 +78,13 @@ export function initStatisticsContext ( serviceName: string, ops?: { logFile?: string - logConsole?: boolean - factory?: () => MeasureMetricsContext + factory?: () => MeasureContext getStats?: () => WorkspaceStatistics[] statsUrl?: string serviceName?: () => string } ): MeasureContext { - let metricsContext: MeasureMetricsContext + let metricsContext: MeasureContext if (ops?.factory !== undefined) { metricsContext = ops.factory() } else { @@ -95,16 +93,10 @@ export function initStatisticsContext ( const statsUrl = ops?.statsUrl ?? process.env.STATS_URL - const metricsFile = ops?.logFile - let errorToSend = 0 - if (metricsFile !== undefined || ops?.logConsole === true || statsUrl !== undefined) { + if (statsUrl !== undefined) { metricsContext.info('using stats url', { statsUrl, service: serviceName ?? '' }) - if (metricsFile !== undefined) { - console.info('storing measurements into local file', metricsFile) - } - let oldMetricsValue = '' const serviceId = encodeURIComponent(os.hostname() + '-' + serviceName) let prev: Promise | Promise | undefined @@ -120,20 +112,6 @@ export function initStatisticsContext ( const intTimer = setInterval(() => { try { - if (metricsFile !== undefined || ops?.logConsole === true) { - const val = metricsToString(metricsContext.metrics, serviceName, 140) - if (val !== oldMetricsValue) { - oldMetricsValue = val - if (metricsFile !== undefined) { - void writeFile(metricsFile, val).catch((err) => { - console.error(err) - }) - } - if (ops?.logConsole === true) { - console.info('METRICS:', val) - } - } - } if (prev !== undefined) { // In case of high load, skip return @@ -150,14 +128,17 @@ export function initStatisticsContext ( const statData = JSON.stringify(data) - prev = fetch(concatLink(statsUrl, '/api/v1/statistics') + `/?name=${serviceId}`, { - method: 'PUT', - headers: { - 'Content-Type': 'application/json', - authorization: `Bearer ${token}` - }, - body: statData - }) + prev = metricsContext + .withoutTracing(() => + fetch(concatLink(statsUrl, '/api/v1/statistics') + `/?name=${serviceId}`, { + method: 'PUT', + headers: { + 'Content-Type': 'application/json', + authorization: `Bearer ${token}` + }, + body: statData + }) + ) .finally(() => { prev = undefined }) diff --git a/services/ai-bot/pod-ai-bot/src/start.ts b/services/ai-bot/pod-ai-bot/src/start.ts index 8185dbf716..1fdd05cf57 100644 --- a/services/ai-bot/pod-ai-bot/src/start.ts +++ b/services/ai-bot/pod-ai-bot/src/start.ts @@ -18,8 +18,8 @@ import { initStatisticsContext } from '@hcengineering/server-core' import serverToken, { generateToken } from '@hcengineering/server-token' import { getClient as getAccountClient } from '@hcengineering/account-client' -import { SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics, type SocialId } from '@hcengineering/core' +import { createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics, type SocialId } from '@hcengineering/core' import { join } from 'path' import config from './config' import { AIControl } from './controller' @@ -38,7 +38,7 @@ export const start = async (): Promise => { const ctx = initStatisticsContext('ai-bot-service', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'ai-bot-service', {}, {}, diff --git a/services/analytics-collector/pod-analytics-collector/src/main.ts b/services/analytics-collector/pod-analytics-collector/src/main.ts index b50f7db3f6..645d802e1f 100644 --- a/services/analytics-collector/pod-analytics-collector/src/main.ts +++ b/services/analytics-collector/pod-analytics-collector/src/main.ts @@ -14,21 +14,21 @@ // import { setMetadata } from '@hcengineering/platform' -import serverToken from '@hcengineering/server-token' import serverClient from '@hcengineering/server-client' +import serverToken from '@hcengineering/server-token' import { Analytics } from '@hcengineering/analytics' -import { SplitLogger, configureAnalytics } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { SplitLogger, configureAnalytics, createOpenTelemetryMetricsContext } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' import { join } from 'path' -import config from './config' import { initStatisticsContext } from '@hcengineering/server-core' +import config from './config' import { createServer, listen } from './server' const ctx = initStatisticsContext('analytics-collector', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'analytics-collector-service', {}, {}, diff --git a/services/backup/backup-api-pod/src/main.ts b/services/backup/backup-api-pod/src/main.ts index 01c57b1929..3b68a48505 100644 --- a/services/backup/backup-api-pod/src/main.ts +++ b/services/backup/backup-api-pod/src/main.ts @@ -14,8 +14,8 @@ // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' import { setMetadata } from '@hcengineering/platform' import { initStatisticsContext } from '@hcengineering/server-core' import serverToken from '@hcengineering/server-token' @@ -37,7 +37,7 @@ export const main = async (): Promise => { const metricsContext = initStatisticsContext('backup-api', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'backup-api', {}, {}, diff --git a/services/billing/pod-billing/src/main.ts b/services/billing/pod-billing/src/main.ts index 782fd4e446..a89255cda8 100644 --- a/services/billing/pod-billing/src/main.ts +++ b/services/billing/pod-billing/src/main.ts @@ -13,16 +13,16 @@ // limitations under the License. // -import { createServer, listen } from './server' -import config from './config' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' import { Analytics } from '@hcengineering/analytics' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' -import { join } from 'path' -import { initStatisticsContext } from '@hcengineering/server-core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' import { setMetadata } from '@hcengineering/platform' import serverClient from '@hcengineering/server-client' +import { initStatisticsContext } from '@hcengineering/server-core' import serverToken from '@hcengineering/server-token' +import { join } from 'path' +import config from './config' +import { createServer, listen } from './server' const setupMetadata = (): void => { setMetadata(serverToken.metadata.Secret, config.Secret) @@ -38,7 +38,7 @@ export const main = async (): Promise => { const metricsContext = initStatisticsContext('billing', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'billing', {}, {}, diff --git a/services/calendar/pod-calendar-mailer/src/index.ts b/services/calendar/pod-calendar-mailer/src/index.ts index de85be42b3..0371727679 100644 --- a/services/calendar/pod-calendar-mailer/src/index.ts +++ b/services/calendar/pod-calendar-mailer/src/index.ts @@ -13,22 +13,22 @@ // limitations under the License. // -import { join } from 'path' import { Analytics } from '@hcengineering/analytics' -import { SplitLogger, configureAnalytics } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' +import { getPlatformQueue } from '@hcengineering/kafka' import { setMetadata } from '@hcengineering/platform' import { initStatisticsContext, QueueTopic } from '@hcengineering/server-core' import serverToken from '@hcengineering/server-token' -import { getPlatformQueue } from '@hcengineering/kafka' +import { join } from 'path' import config from './config' +import { eventCreated, eventDeleted, eventMixin, eventUpdated } from './handlers' import { EventCUDMessage } from './types' -import { eventCreated, eventUpdated, eventDeleted, eventMixin } from './handlers' async function main (): Promise { const ctx = initStatisticsContext('calendar-mailer', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'calendar-mailer', {}, {}, diff --git a/services/calendar/pod-calendar/src/main.ts b/services/calendar/pod-calendar/src/main.ts index 52e8f25397..0a90f8bede 100644 --- a/services/calendar/pod-calendar/src/main.ts +++ b/services/calendar/pod-calendar/src/main.ts @@ -14,7 +14,8 @@ // import { SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { createOpenTelemetryMetricsContext } from '@hcengineering/analytics-service/src' +import { newMetrics } from '@hcengineering/core' import { setMetadata } from '@hcengineering/platform' import serverClient, { getAccountClient } from '@hcengineering/server-client' import { initStatisticsContext } from '@hcengineering/server-core' @@ -43,7 +44,7 @@ const extractToken = (header: IncomingHttpHeaders): any => { export const main = async (): Promise => { const ctx = initStatisticsContext(CALENDAR_INTEGRATION, { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'calendar', {}, {}, diff --git a/services/datalake/pod-datalake/src/main.ts b/services/datalake/pod-datalake/src/main.ts index f20822da52..261cef6ba5 100644 --- a/services/datalake/pod-datalake/src/main.ts +++ b/services/datalake/pod-datalake/src/main.ts @@ -14,8 +14,8 @@ // import { Analytics } from '@hcengineering/analytics' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' import { getPlatformQueue } from '@hcengineering/kafka' import { setMetadata } from '@hcengineering/platform' import { initStatisticsContext } from '@hcengineering/server-core' @@ -38,7 +38,7 @@ export const main = async (): Promise => { const metricsContext = initStatisticsContext('datalake', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'datalake', {}, {}, diff --git a/services/github/pod-github/src/index.ts b/services/github/pod-github/src/index.ts index 9ce3e0167e..1824fc1e47 100644 --- a/services/github/pod-github/src/index.ts +++ b/services/github/pod-github/src/index.ts @@ -3,14 +3,14 @@ // import { Analytics } from '@hcengineering/analytics' -import { SplitLogger, configureAnalytics } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { SplitLogger, configureAnalytics, createOpenTelemetryMetricsContext } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' +import { setMetadata } from '@hcengineering/platform' import { initStatisticsContext, loadBrandingMap } from '@hcengineering/server-core' +import serverToken from '@hcengineering/server-token' import { join } from 'path' import config from './config' import { start } from './server' -import { setMetadata } from '@hcengineering/platform' -import serverToken from '@hcengineering/server-token' // Load and inc startID, to have easy logs. @@ -19,7 +19,7 @@ setMetadata(serverToken.metadata.Service, 'github') const metricsContext = initStatisticsContext('github', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'github', {}, {}, diff --git a/services/gmail/pod-gmail/src/__tests__/attachments.test.ts b/services/gmail/pod-gmail/src/__tests__/attachments.test.ts index 34983df25d..cefd1b69c0 100644 --- a/services/gmail/pod-gmail/src/__tests__/attachments.test.ts +++ b/services/gmail/pod-gmail/src/__tests__/attachments.test.ts @@ -28,6 +28,7 @@ describe('AttachmentHandler', () => { with: jest.fn(), withSync: jest.fn(), withLog: jest.fn(), + withoutTracing: jest.fn(), logger: { info: jest.fn(), error: jest.fn(), diff --git a/services/gmail/pod-gmail/src/main.ts b/services/gmail/pod-gmail/src/main.ts index 56f0d13db8..92f645f831 100644 --- a/services/gmail/pod-gmail/src/main.ts +++ b/services/gmail/pod-gmail/src/main.ts @@ -15,15 +15,15 @@ // limitations under the License. // -import { SplitLogger } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { isWorkspaceLoginInfo } from '@hcengineering/account-client' +import { createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' +import { closeQueue, initQueue } from '@hcengineering/mail-common' import { setMetadata } from '@hcengineering/platform' import serverClient, { getAccountClient } from '@hcengineering/server-client' -import { isWorkspaceLoginInfo } from '@hcengineering/account-client' import { initStatisticsContext, type StorageConfiguration } from '@hcengineering/server-core' import { buildStorageFromConfig, storageConfigFromEnv } from '@hcengineering/server-storage' import serverToken, { decodeToken } from '@hcengineering/server-token' -import { initQueue, closeQueue } from '@hcengineering/mail-common' import { type IncomingHttpHeaders } from 'http' import { join } from 'path' @@ -44,7 +44,7 @@ const extractToken = (header: IncomingHttpHeaders): any => { export const main = async (): Promise => { const ctx = initStatisticsContext('gmail', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'gmail', {}, {}, diff --git a/services/love/src/main.ts b/services/love/src/main.ts index ff33783484..191820035a 100644 --- a/services/love/src/main.ts +++ b/services/love/src/main.ts @@ -12,19 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. // -import { SplitLogger } from '@hcengineering/analytics-service' -import { MeasureContext, MeasureMetricsContext, newMetrics, Ref, WorkspaceIds } from '@hcengineering/core' -import { setMetadata } from '@hcengineering/platform' -import serverClient from '@hcengineering/server-client' -import { initStatisticsContext, StorageConfig, StorageConfiguration } from '@hcengineering/server-core' -import { storageConfigFromEnv } from '@hcengineering/server-storage' -import serverToken, { decodeToken, Token } from '@hcengineering/server-token' import { getClient as getAccountClientRaw, isWorkspaceLoginInfo, type AccountClient } from '@hcengineering/account-client' -import { RoomMetadata, TranscriptionStatus, MeetingMinutes } from '@hcengineering/love' +import { createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { MeasureContext, newMetrics, Ref, WorkspaceIds } from '@hcengineering/core' +import { MeetingMinutes, RoomMetadata, TranscriptionStatus } from '@hcengineering/love' +import { setMetadata } from '@hcengineering/platform' +import serverClient from '@hcengineering/server-client' +import { initStatisticsContext, StorageConfig, StorageConfiguration } from '@hcengineering/server-core' +import { storageConfigFromEnv } from '@hcengineering/server-storage' +import serverToken, { decodeToken, Token } from '@hcengineering/server-token' import cors from 'cors' import express, { type Request } from 'express' import { IncomingHttpHeaders } from 'http' @@ -38,8 +38,8 @@ import { WebhookReceiver } from 'livekit-server-sdk' import { join } from 'path' -import config from './config' import { saveLiveKitEgressBilling, updateLiveKitSessions } from './billing' +import config from './config' import { getRecordingPreset } from './preset' import { getS3UploadParams, saveFile } from './storage' import { WorkspaceClient } from './workspaceClient' @@ -68,7 +68,7 @@ export const main = async (): Promise => { const ctx = initStatisticsContext('love', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'love', {}, {}, diff --git a/services/mail/pod-inbound-mail/src/index.ts b/services/mail/pod-inbound-mail/src/index.ts index 3a81a54ecc..33b723cdb9 100644 --- a/services/mail/pod-inbound-mail/src/index.ts +++ b/services/mail/pod-inbound-mail/src/index.ts @@ -13,26 +13,26 @@ // limitations under the License. // -import cors from 'cors' -import express, { NextFunction, Request, Response } from 'express' -import { join } from 'path' -import { SplitLogger } from '@hcengineering/analytics-service' -import { MeasureContext, MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { MeasureContext, newMetrics } from '@hcengineering/core' +import { closeQueue, initQueue } from '@hcengineering/mail-common' import { setMetadata } from '@hcengineering/platform' import { initStatisticsContext } from '@hcengineering/server-core' import serverToken from '@hcengineering/server-token' -import { initQueue, closeQueue } from '@hcengineering/mail-common' +import cors from 'cors' +import express, { NextFunction, Request, Response } from 'express' +import { join } from 'path' -import { handleMtaHook } from './handlerMta' -import config from './config' import { baseConfig } from './client' +import config from './config' +import { handleMtaHook } from './handlerMta' type RequestHandler = (req: Request, res: Response, ctx: MeasureContext, next?: NextFunction) => Promise async function main (): Promise { const ctx = initStatisticsContext('inbound-mail', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'inbound-mail', {}, {}, diff --git a/services/mail/pod-mail/src/main.ts b/services/mail/pod-mail/src/main.ts index 4a732f0db9..87110b1bbd 100644 --- a/services/mail/pod-mail/src/main.ts +++ b/services/mail/pod-mail/src/main.ts @@ -13,19 +13,19 @@ // limitations under the License. // -import { type SendMailOptions } from 'nodemailer' import { Request, Response } from 'express' -import { join } from 'path' +import { type SendMailOptions } from 'nodemailer' import Mail from 'nodemailer/lib/mailer' +import { join } from 'path' import { Analytics } from '@hcengineering/analytics' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { MeasureContext, newMetrics } from '@hcengineering/core' import { initStatisticsContext } from '@hcengineering/server-core' -import { MeasureContext, MeasureMetricsContext, newMetrics } from '@hcengineering/core' -import { configureAnalytics, SplitLogger } from '@hcengineering/analytics-service' import config from './config' -import { createServer, listen } from './server' import { MailClient } from './mail' +import { createServer, listen } from './server' import { Endpoint } from './types' export const main = async (): Promise => { @@ -33,7 +33,7 @@ export const main = async (): Promise => { Analytics.setTag('application', 'mail') const measureCtx = initStatisticsContext('mail', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'mail', {}, {}, diff --git a/services/rekoni/src/server.ts b/services/rekoni/src/server.ts index bc52eb0e51..029fbec771 100644 --- a/services/rekoni/src/server.ts +++ b/services/rekoni/src/server.ts @@ -13,7 +13,11 @@ // limitations under the License. // +import { createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' +import { setMetadata } from '@hcengineering/platform' import { initStatisticsContext } from '@hcengineering/server-core' +import serverToken from '@hcengineering/server-token' import bodyParser from 'body-parser' import cors from 'cors' import express from 'express' @@ -21,6 +25,7 @@ import formData from 'express-form-data' import { type IncomingHttpHeaders, type Server } from 'http' import morgan from 'morgan' import os from 'os' +import { join } from 'path' import { type Readable } from 'stream' import config from './config' import { ApiError } from './error' @@ -29,11 +34,6 @@ import { parseGenericResume } from './generic' import { decode } from './jwt' import { extractDocument } from './process' import { type ReconiDocument } from './types' -import serverToken from '@hcengineering/server-token' -import { setMetadata } from '@hcengineering/platform' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' -import { join } from 'path' -import { SplitLogger } from '@hcengineering/analytics-service' // eslint-disable-next-line @typescript-eslint/no-var-requires const extractToken = (header: IncomingHttpHeaders): any => { @@ -51,7 +51,7 @@ export const startServer = async (): Promise => { setMetadata(serverToken.metadata.Service, 'rekoni') const ctx = initStatisticsContext('rekoni', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'rekoni', {}, {}, diff --git a/services/sign/pod-sign/src/server.ts b/services/sign/pod-sign/src/server.ts index 759072a045..da17abb867 100644 --- a/services/sign/pod-sign/src/server.ts +++ b/services/sign/pod-sign/src/server.ts @@ -14,21 +14,21 @@ // limitations under the License. // -import { generateId, MeasureMetricsContext, newMetrics, type WorkspaceIds } from '@hcengineering/core' +import { AccountClient, getClient as getAccountClientRaw, isWorkspaceLoginInfo } from '@hcengineering/account-client' +import { generateId, newMetrics, type WorkspaceIds } from '@hcengineering/core' import { initStatisticsContext, StorageConfiguration } from '@hcengineering/server-core' import { buildStorageFromConfig } from '@hcengineering/server-storage' -import { getClient as getAccountClientRaw, AccountClient, isWorkspaceLoginInfo } from '@hcengineering/account-client' import cors from 'cors' import express, { type Express, type NextFunction, type Request, type Response } from 'express' import { type Server } from 'http' -import { type Branding, type BrandingMap, extractBranding } from './branding' +import { createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { join } from 'path' +import { extractBranding, type Branding, type BrandingMap } from './branding' import config from './config' import { ApiError } from './error' import { signPDF } from './sign' import { extractToken } from './token' -import { join } from 'path' -import { SplitLogger } from '@hcengineering/analytics-service' function getAccountClient (token: string): AccountClient { return getAccountClientRaw(config.AccountsUrl, token) @@ -77,7 +77,7 @@ export function createServer (storageConfig: StorageConfiguration, brandings: Br const storageAdapter = buildStorageFromConfig(storageConfig) const measureCtx = initStatisticsContext('sign', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'sign', {}, {}, diff --git a/services/telegram-bot/pod-telegram-bot/src/start.ts b/services/telegram-bot/pod-telegram-bot/src/start.ts index 5ab56d754f..abfdccebcd 100644 --- a/services/telegram-bot/pod-telegram-bot/src/start.ts +++ b/services/telegram-bot/pod-telegram-bot/src/start.ts @@ -14,15 +14,15 @@ // import { Analytics } from '@hcengineering/analytics' -import { SplitLogger, configureAnalytics } from '@hcengineering/analytics-service' -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { configureAnalytics, createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' +import { newMetrics } from '@hcengineering/core' +import { getPlatformQueue } from '@hcengineering/kafka' import { setMetadata } from '@hcengineering/platform' import serverClient from '@hcengineering/server-client' import { initStatisticsContext, QueueTopic } from '@hcengineering/server-core' +import { TelegramQueueMessage, TelegramQueueMessageType } from '@hcengineering/server-telegram' import serverToken from '@hcengineering/server-token' import { join } from 'path' -import { getPlatformQueue } from '@hcengineering/kafka' -import { TelegramQueueMessage, TelegramQueueMessageType } from '@hcengineering/server-telegram' import config from './config' import { registerLoaders } from './loaders' @@ -32,7 +32,7 @@ import { PlatformWorker } from './worker' const ctx = initStatisticsContext('telegram-bot', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'telegram-bot-service', {}, {}, diff --git a/services/telegram/pod-telegram/src/main.ts b/services/telegram/pod-telegram/src/main.ts index 9784378b34..a53727b340 100644 --- a/services/telegram/pod-telegram/src/main.ts +++ b/services/telegram/pod-telegram/src/main.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ -import { MeasureMetricsContext, newMetrics } from '@hcengineering/core' +import { newMetrics } from '@hcengineering/core' import { setMetadata } from '@hcengineering/platform' import serverClient from '@hcengineering/server-client' import { initStatisticsContext, type StorageConfiguration } from '@hcengineering/server-core' @@ -7,7 +7,7 @@ import { buildStorageFromConfig, storageConfigFromEnv } from '@hcengineering/ser import serverToken, { decodeToken, type Token } from '@hcengineering/server-token' import { IncomingHttpHeaders } from 'http' -import { SplitLogger } from '@hcengineering/analytics-service' +import { createOpenTelemetryMetricsContext, SplitLogger } from '@hcengineering/analytics-service' import { join } from 'path' import config from './config' import { PlatformWorker } from './platform' @@ -28,7 +28,7 @@ const extractToken = (headers: IncomingHttpHeaders): Token | undefined => { export const main = async (): Promise => { const ctx = initStatisticsContext('telegram', { factory: () => - new MeasureMetricsContext( + createOpenTelemetryMetricsContext( 'telegram', {}, {},