diff --git a/libraries/metrics/README.md b/libraries/metrics/README.md index 70504e9ddc..faf9c5335c 100644 --- a/libraries/metrics/README.md +++ b/libraries/metrics/README.md @@ -5,10 +5,11 @@ Wrappers the [prom-client](https://github.com/siimon/prom-client) npm module to Use: ``` -const metrics = require('@overleaf/metrics') -metrics.initialize('myapp') +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') const express = require('express') +const metrics = require('@overleaf/metrics') const app = express() metrics.injectMetricsRoute(app) ``` @@ -24,8 +25,9 @@ app.use(metrics.http.monitor(logger)) The metrics module can be configured through the following environment variables: - `DEBUG_METRICS` - enables display of debugging messages to the console. -- `ENABLE_TRACE_AGENT` - enables @google-cloud/trace-agent on Google Cloud -- `ENABLE_PROFILE_AGENT` - enables @google-cloud/profiler on Google Cloud +- `GCP_OPENTELEMETRY` - enables OpenTelemetry tracing for GCP +- `JAEGER_OPENTELEMETRY` - enables OpenTelemetry tracing for Jaeger (in the dev environment) +- `METRICS_APP_NAME` - the app label for metrics and spans - `METRICS_COMPRESSION_LEVEL` - sets the [compression level](https://www.npmjs.com/package/compression#level) for `/metrics` - `STACKDRIVER_LOGGING` - toggles the request logging format - `UV_THREADPOOL_SIZE` - sets the libuv [thread pool](http://docs.libuv.org/en/v1.x/threadpool.html) size diff --git a/libraries/metrics/index.js b/libraries/metrics/index.js index 72bd11d28a..eeb5a94978 100644 --- a/libraries/metrics/index.js +++ b/libraries/metrics/index.js @@ -1,72 +1,13 @@ /* eslint-disable no-console */ -const os = require('os') + const ExpressCompression = require('compression') const promClient = require('prom-client') const promWrapper = require('./prom_wrapper') -const tracing = require('./tracing') -const DEFAULT_APP_NAME = 'unknown' - -const { collectDefaultMetrics } = promWrapper const destructors = [] require('./uv_threadpool_size') -/** - * Configure the metrics module - */ -function configure(opts = {}) { - const appName = opts.appName || DEFAULT_APP_NAME - const hostname = os.hostname() - promClient.register.setDefaultLabels({ app: appName, host: hostname }) - if (opts.ttlInMinutes) { - promWrapper.ttlInMinutes = opts.ttlInMinutes - } -} - -let initialized = false - -/** - * Configure the metrics module and start the default metrics collectors and - * profiling agents. - */ -function initialize(appName, opts = {}) { - if (initialized) { - return - } - appName = appName || DEFAULT_APP_NAME - if (tracing.tracingEnabled()) { - tracing.initialize(appName) - } - configure({ ...opts, appName }) - collectDefaultMetrics({ timeout: 5000, prefix: '' }) - promWrapper.setupSweeping() - - console.log(`ENABLE_TRACE_AGENT set to ${process.env.ENABLE_TRACE_AGENT}`) - if (process.env.ENABLE_TRACE_AGENT === 'true') { - console.log('starting google trace agent') - const traceAgent = require('@google-cloud/trace-agent') - - const traceOpts = { ignoreUrls: [/^\/status/, /^\/health_check/] } - traceAgent.start(traceOpts) - } - - console.log(`ENABLE_PROFILE_AGENT set to ${process.env.ENABLE_PROFILE_AGENT}`) - if (process.env.ENABLE_PROFILE_AGENT === 'true') { - console.log('starting google profile agent') - const profiler = require('@google-cloud/profiler') - profiler.start({ - serviceContext: { - service: appName, - version: process.env.BUILD_VERSION, - }, - }) - } - - inc('process_startup') - initialized = true -} - function registerDestructor(func) { destructors.push(func) } @@ -215,8 +156,6 @@ function close() { } } -module.exports.configure = configure -module.exports.initialize = initialize module.exports.registerDestructor = registerDestructor module.exports.injectMetricsRoute = injectMetricsRoute module.exports.buildPromKey = buildPromKey diff --git a/libraries/metrics/initialize.js b/libraries/metrics/initialize.js new file mode 100644 index 0000000000..63be4e5d2e --- /dev/null +++ b/libraries/metrics/initialize.js @@ -0,0 +1,105 @@ +/* eslint-disable no-console */ + +/** + * This module initializes the metrics module. It should be imported once + * before any other module to support code instrumentation. + */ + +const APP_NAME = process.env.METRICS_APP_NAME || 'unknown' +const BUILD_VERSION = process.env.BUILD_VERSION +const ENABLE_PROFILE_AGENT = process.env.ENABLE_PROFILE_AGENT === 'true' +const GCP_OPENTELEMETRY = process.env.GCP_OPENTELEMETRY === 'true' +const JAEGER_OPENTELEMETRY = process.env.JAEGER_OPENTELEMETRY === 'true' + +console.log('Initializing metrics') + +if (GCP_OPENTELEMETRY || JAEGER_OPENTELEMETRY) { + initializeOpenTelemetryInstrumentation() + initializeOpenTelemetryLogging() +} + +if (ENABLE_PROFILE_AGENT) { + initializeProfileAgent() +} + +initializePrometheus() +initializePromWrapper() +recordProcessStart() + +function initializeOpenTelemetryInstrumentation() { + console.log('Starting OpenTelemetry instrumentation') + const opentelemetry = require('@opentelemetry/sdk-node') + const { + getNodeAutoInstrumentations, + } = require('@opentelemetry/auto-instrumentations-node') + const { Resource } = require('@opentelemetry/resources') + const { + SemanticResourceAttributes, + } = require('@opentelemetry/semantic-conventions') + + const resource = new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: APP_NAME, + [SemanticResourceAttributes.SERVICE_NAMESPACE]: 'Overleaf', + 'host.type': 'VM', + }) + + let exporter + if (GCP_OPENTELEMETRY) { + const GCP = require('@google-cloud/opentelemetry-cloud-trace-exporter') + exporter = new GCP.TraceExporter() + } else if (JAEGER_OPENTELEMETRY) { + const { + OTLPTraceExporter, + } = require('@opentelemetry/exporter-trace-otlp-http') + exporter = new OTLPTraceExporter({ + url: `http://${process.env.JAEGER_HOST || 'jaeger'}:4318/v1/traces`, + }) + } else { + return + } + + const sdk = new opentelemetry.NodeSDK({ + traceExporter: exporter, + logger: console, + instrumentations: [getNodeAutoInstrumentations()], + resource, + }) + sdk.start() +} + +function initializeOpenTelemetryLogging() { + const { + diag, + DiagConsoleLogger, + DiagLogLevel, + } = require('@opentelemetry/api') + diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO) +} + +function initializeProfileAgent() { + console.log('Starting Google Profile Agent') + const profiler = require('@google-cloud/profiler') + profiler.start({ + serviceContext: { + service: APP_NAME, + version: BUILD_VERSION, + }, + }) +} + +function initializePrometheus() { + const os = require('os') + const promClient = require('prom-client') + promClient.register.setDefaultLabels({ app: APP_NAME, host: os.hostname() }) + promClient.collectDefaultMetrics({ timeout: 5000, prefix: '' }) +} + +function initializePromWrapper() { + const promWrapper = require('./prom_wrapper') + promWrapper.setupSweeping() +} + +function recordProcessStart() { + const metrics = require('.') + metrics.inc('process_startup') +} diff --git a/libraries/metrics/package.json b/libraries/metrics/package.json index 311cb72a71..bf6478792f 100644 --- a/libraries/metrics/package.json +++ b/libraries/metrics/package.json @@ -9,7 +9,6 @@ "dependencies": { "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.1.0", "@google-cloud/profiler": "^6.0.0", - "@google-cloud/trace-agent": "^7.1.2", "@opentelemetry/api": "^1.4.1", "@opentelemetry/auto-instrumentations-node": "^0.39.1", "@opentelemetry/exporter-trace-otlp-http": "^0.41.2", diff --git a/libraries/metrics/test/acceptance/metrics_tests.js b/libraries/metrics/test/acceptance/metrics_tests.js index 42235eba73..1a5b78103e 100644 --- a/libraries/metrics/test/acceptance/metrics_tests.js +++ b/libraries/metrics/test/acceptance/metrics_tests.js @@ -10,7 +10,8 @@ const sleep = promisify(setTimeout) describe('Metrics module', function () { before(function () { - Metrics.initialize(APP_NAME) + process.env.METRICS_APP_NAME = 'test-app' + require('../../initialize') }) describe('at startup', function () { diff --git a/libraries/metrics/tracing.js b/libraries/metrics/tracing.js deleted file mode 100644 index 33b2eb81f2..0000000000 --- a/libraries/metrics/tracing.js +++ /dev/null @@ -1,62 +0,0 @@ -let tracer - -function tracingEnabled() { - return process.env.GCP_OPENTELEMETRY || process.env.JAEGER_OPENTELEMETRY -} - -function initialize(appName) { - const opentelemetry = require('@opentelemetry/sdk-node') - const { - getNodeAutoInstrumentations, - } = require('@opentelemetry/auto-instrumentations-node') - const { - diag, - DiagConsoleLogger, - DiagLogLevel, - trace, - } = require('@opentelemetry/api') - const { - OTLPTraceExporter, - } = require('@opentelemetry/exporter-trace-otlp-http') - const { Resource } = require('@opentelemetry/resources') - const { - SemanticResourceAttributes, - } = require('@opentelemetry/semantic-conventions') - const GCP = require('@google-cloud/opentelemetry-cloud-trace-exporter') - - diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.INFO) - - const resource = new Resource({ - [SemanticResourceAttributes.SERVICE_NAME]: appName, - [SemanticResourceAttributes.SERVICE_NAMESPACE]: 'Overleaf', - 'host.type': 'VM', - }) - - let exporter - if (process.env.GCP_OPENTELEMETRY) { - exporter = new GCP.TraceExporter() - } else if (process.env.JAEGER_OPENTELEMETRY) { - exporter = new OTLPTraceExporter({ - url: `http://${process.env.JAEGER_HOST || 'jaeger'}:4318/v1/traces`, - }) - } else { - return - } - - const sdk = new opentelemetry.NodeSDK({ - traceExporter: exporter, - logger: console, - - instrumentations: [getNodeAutoInstrumentations()], - resource, - }) - - tracer = trace.getTracer(appName) - sdk.start() -} - -function getTracer() { - return tracer -} - -module.exports = { initialize, getTracer, tracingEnabled } diff --git a/package-lock.json b/package-lock.json index 0b3b922c7c..719670d0f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -284,7 +284,6 @@ "dependencies": { "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.1.0", "@google-cloud/profiler": "^6.0.0", - "@google-cloud/trace-agent": "^7.1.2", "@opentelemetry/api": "^1.4.1", "@opentelemetry/auto-instrumentations-node": "^0.39.1", "@opentelemetry/exporter-trace-otlp-http": "^0.41.2", @@ -4196,9 +4195,13 @@ } }, "node_modules/@google-cloud/logging-min/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -4533,9 +4536,9 @@ } }, "node_modules/@google-cloud/profiler/node_modules/gaxios": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.0.tgz", - "integrity": "sha512-EIHuesZxNyIkUGcTQKQPMICyOpDD/bi+LJIJx+NLsSGmnS7N+xCLRX5bi4e9yAu9AlSZdVq+qlyWWVuTh/483w==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", @@ -4547,9 +4550,9 @@ } }, "node_modules/@google-cloud/profiler/node_modules/gaxios/node_modules/https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -4571,9 +4574,9 @@ } }, "node_modules/@google-cloud/profiler/node_modules/google-auth-library": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", - "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.1.0.tgz", + "integrity": "sha512-1M9HdOcQNPV5BwSXqwwT238MTKodJFBxZ/V2JP397ieOLv4FjQdfYb9SooR7Mb+oUT2IJ92mLJQf804dyx0MJA==", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", @@ -4681,9 +4684,13 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/@google-cloud/profiler/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } @@ -4905,201 +4912,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/@google-cloud/trace-agent": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-7.1.2.tgz", - "integrity": "sha512-LcPKMM80bBvaUG3Nb1R4FPYlGZQX/tDMmwN9bx3ML954W61Pj8D3bjwIleSWO36lIdo0tl+Cz6UHJEOKLSNcvw==", - "dependencies": { - "@google-cloud/common": "^4.0.0", - "@opencensus/propagation-stackdriver": "0.1.0", - "builtin-modules": "^3.0.0", - "console-log-level": "^1.4.0", - "continuation-local-storage": "^3.2.1", - "extend": "^3.0.2", - "gcp-metadata": "^5.0.0", - "google-auth-library": "^8.0.2", - "hex2dec": "^1.0.1", - "is": "^3.2.0", - "methods": "^1.1.1", - "require-in-the-middle": "^5.0.0", - "semver": "^7.0.0", - "shimmer": "^1.2.0", - "source-map-support": "^0.5.16", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/@google-cloud/common": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", - "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", - "dependencies": { - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "dependencies": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "dependencies": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "dependencies": { - "node-forge": "^1.3.1" - }, - "bin": { - "gp12-pem": "build/src/bin/gp12-pem.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "dependencies": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "dependencies": { - "debug": "^4.1.1", - "extend": "^3.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/teeny-request": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.3.tgz", - "integrity": "sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==", - "dependencies": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@google-cloud/trace-agent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@grpc/grpc-js": { "version": "1.8.21", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", @@ -6202,77 +6014,6 @@ "@octokit/openapi-types": "^11.2.0" } }, - "node_modules/@opencensus/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz", - "integrity": "sha512-Bdbi5vi44a1fwyHNyKh6bwzuFZJeZJPhzdwogk/Kw5juoEeRGPworK1sgtB3loeR8cqLyi5us0mz9h0xqINiSQ==", - "dependencies": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^7.0.0", - "shimmer": "^1.2.0", - "uuid": "^8.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@opencensus/core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@opencensus/core/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@opencensus/core/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@opencensus/core/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@opencensus/propagation-stackdriver": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@opencensus/propagation-stackdriver/-/propagation-stackdriver-0.1.0.tgz", - "integrity": "sha512-YLklu8jnnYKaJ8gUFz3rM0FVdsWXEJAMLzeeU4JRac6LI34raENy4kvRezZtNEFS5KthaJUsYg04sPc/Ag0w4w==", - "dependencies": { - "@opencensus/core": "^0.1.0", - "hex2dec": "^1.0.1", - "uuid": "^8.0.0" - } - }, - "node_modules/@opencensus/propagation-stackdriver/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@opentelemetry/api": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", @@ -17115,9 +16856,9 @@ } }, "node_modules/@types/console-log-level": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@types/console-log-level/-/console-log-level-1.4.2.tgz", - "integrity": "sha512-TnhDAntcJthcCMrR3OAKAUjgHyQgoms1yaBJepGv+BtXi8PLf8aX2L/NMCfofRTpVqW0bLklpGTsuqmUSCR2Uw==" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/console-log-level/-/console-log-level-1.4.3.tgz", + "integrity": "sha512-B6Mzad6H4RugduMX84ehFVvGM/JRAd9lZQk4a6dztB4+zcIUehIjKrbWH/nHO2+0wwx05rgyqjXBvOjAv0uL6A==" }, "node_modules/@types/content-disposition": { "version": "0.5.5", @@ -19046,26 +18787,6 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "node_modules/async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "dependencies": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - }, - "engines": { - "node": "<=0.11.8 || >0.11.10" - } - }, - "node_modules/async-listener/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/async-retry": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", @@ -20189,17 +19910,6 @@ "node": ">= 0.10.x" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/builtins": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz", @@ -21575,15 +21285,6 @@ "node": ">=6" } }, - "node_modules/continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "dependencies": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" - } - }, "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -24185,14 +23886,6 @@ "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==" }, - "node_modules/emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "dependencies": { - "shimmer": "^1.2.0" - } - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -28416,11 +28109,6 @@ "node": ">= 0.8" } }, - "node_modules/hex2dec": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hex2dec/-/hex2dec-1.1.2.tgz", - "integrity": "sha512-Yu+q/XWr2fFQ11tHxPq4p4EiNkb2y+lAacJNhAdRXVfRIcDH6gi7htWFnnlIzvqHMHoWeIsfXlNAjZInpAOJDA==" - }, "node_modules/hexer": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/hexer/-/hexer-1.5.0.tgz", @@ -31653,14 +31341,6 @@ "uni-global": "^1.0.0" } }, - "node_modules/log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", - "engines": { - "node": ">=0.8.6" - } - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -36941,16 +36621,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-in-the-middle": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz", - "integrity": "sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ==", - "dependencies": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.12.0" - } - }, "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", @@ -42227,7 +41897,6 @@ "@google-cloud/bigquery": "^5.6.0", "@overleaf/fetch-utils": "*", "@overleaf/logger": "*", - "@overleaf/metrics": "*", "@overleaf/o-error": "*", "@overleaf/settings": "*", "bunyan": "^1.8.15", @@ -48203,9 +47872,9 @@ } }, "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "yallist": { "version": "4.0.0", @@ -48329,9 +47998,9 @@ } }, "gaxios": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.0.tgz", - "integrity": "sha512-EIHuesZxNyIkUGcTQKQPMICyOpDD/bi+LJIJx+NLsSGmnS7N+xCLRX5bi4e9yAu9AlSZdVq+qlyWWVuTh/483w==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", + "integrity": "sha512-bw8smrX+XlAoo9o1JAksBwX+hi/RG15J+NTSxmNPIclKC3ZVK6C2afwY8OSdRvOK0+ZLecUJYtj2MmjOt3Dm0w==", "requires": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", @@ -48340,9 +48009,9 @@ }, "dependencies": { "https-proxy-agent": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.1.tgz", - "integrity": "sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -48360,9 +48029,9 @@ } }, "google-auth-library": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", - "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.1.0.tgz", + "integrity": "sha512-1M9HdOcQNPV5BwSXqwwT238MTKodJFBxZ/V2JP397ieOLv4FjQdfYb9SooR7Mb+oUT2IJ92mLJQf804dyx0MJA==", "requires": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", @@ -48438,9 +48107,9 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" }, "webidl-conversions": { "version": "3.0.1", @@ -48614,158 +48283,6 @@ } } }, - "@google-cloud/trace-agent": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@google-cloud/trace-agent/-/trace-agent-7.1.2.tgz", - "integrity": "sha512-LcPKMM80bBvaUG3Nb1R4FPYlGZQX/tDMmwN9bx3ML954W61Pj8D3bjwIleSWO36lIdo0tl+Cz6UHJEOKLSNcvw==", - "requires": { - "@google-cloud/common": "^4.0.0", - "@opencensus/propagation-stackdriver": "0.1.0", - "builtin-modules": "^3.0.0", - "console-log-level": "^1.4.0", - "continuation-local-storage": "^3.2.1", - "extend": "^3.0.2", - "gcp-metadata": "^5.0.0", - "google-auth-library": "^8.0.2", - "hex2dec": "^1.0.1", - "is": "^3.2.0", - "methods": "^1.1.1", - "require-in-the-middle": "^5.0.0", - "semver": "^7.0.0", - "shimmer": "^1.2.0", - "source-map-support": "^0.5.16", - "uuid": "^9.0.0" - }, - "dependencies": { - "@google-cloud/common": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-4.0.3.tgz", - "integrity": "sha512-fUoMo5b8iAKbrYpneIRV3z95AlxVJPrjpevxs4SKoclngWZvTXBSGpNisF5+x5m+oNGve7jfB1e6vNBZBUs7Fw==", - "requires": { - "@google-cloud/projectify": "^3.0.0", - "@google-cloud/promisify": "^3.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "ent": "^2.2.0", - "extend": "^3.0.2", - "google-auth-library": "^8.0.2", - "retry-request": "^5.0.0", - "teeny-request": "^8.0.0" - } - }, - "@google-cloud/projectify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", - "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==" - }, - "@google-cloud/promisify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", - "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==" - }, - "duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "requires": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "gcp-metadata": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", - "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", - "requires": { - "gaxios": "^5.0.0", - "json-bigint": "^1.0.0" - } - }, - "google-auth-library": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", - "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", - "requires": { - "arrify": "^2.0.0", - "base64-js": "^1.3.0", - "ecdsa-sig-formatter": "^1.0.11", - "fast-text-encoding": "^1.0.0", - "gaxios": "^5.0.0", - "gcp-metadata": "^5.3.0", - "gtoken": "^6.1.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" - } - }, - "google-p12-pem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", - "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", - "requires": { - "node-forge": "^1.3.1" - } - }, - "gtoken": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", - "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", - "requires": { - "gaxios": "^5.0.1", - "google-p12-pem": "^4.0.0", - "jws": "^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "retry-request": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", - "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", - "requires": { - "debug": "^4.1.1", - "extend": "^3.0.2" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "teeny-request": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.3.tgz", - "integrity": "sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==", - "requires": { - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" - } - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, "@grpc/grpc-js": { "version": "1.8.21", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", @@ -49678,63 +49195,6 @@ "@octokit/openapi-types": "^11.2.0" } }, - "@opencensus/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@opencensus/core/-/core-0.1.0.tgz", - "integrity": "sha512-Bdbi5vi44a1fwyHNyKh6bwzuFZJeZJPhzdwogk/Kw5juoEeRGPworK1sgtB3loeR8cqLyi5us0mz9h0xqINiSQ==", - "requires": { - "continuation-local-storage": "^3.2.1", - "log-driver": "^1.2.7", - "semver": "^7.0.0", - "shimmer": "^1.2.0", - "uuid": "^8.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@opencensus/propagation-stackdriver": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@opencensus/propagation-stackdriver/-/propagation-stackdriver-0.1.0.tgz", - "integrity": "sha512-YLklu8jnnYKaJ8gUFz3rM0FVdsWXEJAMLzeeU4JRac6LI34raENy4kvRezZtNEFS5KthaJUsYg04sPc/Ag0w4w==", - "requires": { - "@opencensus/core": "^0.1.0", - "hex2dec": "^1.0.1", - "uuid": "^8.0.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } - } - }, "@opentelemetry/api": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", @@ -50897,7 +50357,6 @@ "@google-cloud/bigquery": "^5.6.0", "@overleaf/fetch-utils": "*", "@overleaf/logger": "*", - "@overleaf/metrics": "*", "@overleaf/o-error": "*", "@overleaf/settings": "*", "bunyan": "^1.8.15", @@ -51477,7 +50936,6 @@ "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.1.0", "@google-cloud/profiler": "^6.0.0", - "@google-cloud/trace-agent": "^7.1.2", "@opentelemetry/api": "^1.4.1", "@opentelemetry/auto-instrumentations-node": "^0.39.1", "@opentelemetry/exporter-trace-otlp-http": "^0.41.2", @@ -59687,9 +59145,9 @@ } }, "@types/console-log-level": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/@types/console-log-level/-/console-log-level-1.4.2.tgz", - "integrity": "sha512-TnhDAntcJthcCMrR3OAKAUjgHyQgoms1yaBJepGv+BtXi8PLf8aX2L/NMCfofRTpVqW0bLklpGTsuqmUSCR2Uw==" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/console-log-level/-/console-log-level-1.4.3.tgz", + "integrity": "sha512-B6Mzad6H4RugduMX84ehFVvGM/JRAd9lZQk4a6dztB4+zcIUehIjKrbWH/nHO2+0wwx05rgyqjXBvOjAv0uL6A==" }, "@types/content-disposition": { "version": "0.5.5", @@ -61378,22 +60836,6 @@ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" - }, - "dependencies": { - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - } - } - }, "async-retry": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", @@ -62256,11 +61698,6 @@ "xtend": "^4.0.0" } }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==" - }, "builtins": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz", @@ -63327,15 +62764,6 @@ "qs": "^6.9.4" } }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" - } - }, "convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", @@ -65247,14 +64675,6 @@ "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-5.0.0.tgz", "integrity": "sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==" }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" - } - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -68466,11 +67886,6 @@ } } }, - "hex2dec": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/hex2dec/-/hex2dec-1.1.2.tgz", - "integrity": "sha512-Yu+q/XWr2fFQ11tHxPq4p4EiNkb2y+lAacJNhAdRXVfRIcDH6gi7htWFnnlIzvqHMHoWeIsfXlNAjZInpAOJDA==" - }, "hexer": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/hexer/-/hexer-1.5.0.tgz", @@ -70974,11 +70389,6 @@ "uni-global": "^1.0.0" } }, - "log-driver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", - "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==" - }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -75204,16 +74614,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "require-in-the-middle": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-5.1.0.tgz", - "integrity": "sha512-M2rLKVupQfJ5lf9OvqFGIT+9iVLnTmjgbOmpil12hiSQNn5zJTKGPoIisETNjfK+09vP3rpm1zJajmErpr2sEQ==", - "requires": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.12.0" - } - }, "require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", diff --git a/services/chat/app.js b/services/chat/app.js index d47bd2594c..691b4ceda5 100644 --- a/services/chat/app.js +++ b/services/chat/app.js @@ -1,3 +1,6 @@ +// Metrics must be initialized before importing anything else +import '@overleaf/metrics/initialize.js' + import logger from '@overleaf/logger' import settings from '@overleaf/settings' import { mongoClient } from './app/js/mongodb.js' diff --git a/services/chat/app/js/server.js b/services/chat/app/js/server.js index f388ab3336..aa4ea42482 100644 --- a/services/chat/app/js/server.js +++ b/services/chat/app/js/server.js @@ -9,7 +9,6 @@ import * as messagesController from './Features/Messages/MessageHttpController.j const __dirname = fileURLToPath(new URL('.', import.meta.url)) -metrics.initialize('chat') logger.initialize('chat') metrics.open_sockets.monitor() diff --git a/services/clsi/app.js b/services/clsi/app.js index b9a70316f0..2339c78ab7 100644 --- a/services/clsi/app.js +++ b/services/clsi/app.js @@ -1,5 +1,5 @@ -const Metrics = require('@overleaf/metrics') -Metrics.initialize('clsi') +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') const CompileController = require('./app/js/CompileController') const ContentController = require('./app/js/ContentController') @@ -9,6 +9,7 @@ logger.initialize('clsi') if (Settings.sentry.dsn != null) { logger.initializeErrorReporting(Settings.sentry.dsn) } +const Metrics = require('@overleaf/metrics') const smokeTest = require('./test/smoke/js/SmokeTests') const ContentTypeMapper = require('./app/js/ContentTypeMapper') diff --git a/services/contacts/app.js b/services/contacts/app.js index b7637ebc71..0d22ff3346 100644 --- a/services/contacts/app.js +++ b/services/contacts/app.js @@ -1,3 +1,6 @@ +// Metrics must be initialized before importing anything else +import '@overleaf/metrics/initialize.js' + import logger from '@overleaf/logger' import Settings from '@overleaf/settings' import { mongoClient } from './app/js/mongodb.js' diff --git a/services/contacts/app/js/server.js b/services/contacts/app/js/server.js index e0b5a0e010..7d4cc88660 100644 --- a/services/contacts/app/js/server.js +++ b/services/contacts/app/js/server.js @@ -5,7 +5,6 @@ import bodyParser from 'body-parser' import * as HttpController from './HttpController.js' import * as Errors from './Errors.js' -Metrics.initialize('contacts') logger.initialize('contacts') Metrics.event_loop?.monitor(logger) Metrics.open_sockets.monitor() diff --git a/services/docstore/app.js b/services/docstore/app.js index 70e3a6d8a0..20c7c2fced 100644 --- a/services/docstore/app.js +++ b/services/docstore/app.js @@ -1,12 +1,8 @@ -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * DS207: Consider shorter variations of null checks - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') + const Events = require('events') const Metrics = require('@overleaf/metrics') -Metrics.initialize('docstore') const Settings = require('@overleaf/settings') const logger = require('@overleaf/logger') const express = require('express') @@ -36,18 +32,18 @@ app.use(Metrics.http.monitor(logger)) Metrics.injectMetricsRoute(app) app.param('project_id', function (req, res, next, projectId) { - if (projectId != null ? projectId.match(/^[0-9a-f]{24}$/) : undefined) { - return next() + if (projectId?.match(/^[0-9a-f]{24}$/)) { + next() } else { - return next(new Error('invalid project id')) + next(new Error('invalid project id')) } }) app.param('doc_id', function (req, res, next, docId) { - if (docId != null ? docId.match(/^[0-9a-f]{24}$/) : undefined) { - return next() + if (docId?.match(/^[0-9a-f]{24}$/)) { + next() } else { - return next(new Error('invalid doc id')) + next(new Error('invalid doc id')) } }) @@ -93,13 +89,13 @@ app.use(handleValidationErrors()) app.use(function (error, req, res, next) { logger.error({ err: error, req }, 'request errored') if (error instanceof Errors.NotFoundError) { - return res.sendStatus(404) + res.sendStatus(404) } else if (error instanceof Errors.DocModifiedError) { - return res.sendStatus(409) + res.sendStatus(409) } else if (error instanceof Errors.DocVersionDecrementedError) { - return res.sendStatus(409) + res.sendStatus(409) } else { - return res.status(500).send('Oops, something went wrong') + res.status(500).send('Oops, something went wrong') } }) @@ -116,9 +112,7 @@ if (!module.parent) { logger.fatal({ err }, `Cannot bind to ${host}:${port}. Exiting.`) process.exit(1) } - return logger.debug( - `Docstore starting up, listening on ${host}:${port}` - ) + logger.debug(`Docstore starting up, listening on ${host}:${port}`) }) server.timeout = 120000 server.keepAliveTimeout = 5000 diff --git a/services/document-updater/app.js b/services/document-updater/app.js index 3ade1ec285..6d21490b98 100644 --- a/services/document-updater/app.js +++ b/services/document-updater/app.js @@ -1,6 +1,7 @@ -const Metrics = require('@overleaf/metrics') -Metrics.initialize('doc-updater') +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') +const Metrics = require('@overleaf/metrics') const express = require('express') const Settings = require('@overleaf/settings') const logger = require('@overleaf/logger') diff --git a/services/filestore/app.js b/services/filestore/app.js index 0c8bf50d12..5854b6b79d 100644 --- a/services/filestore/app.js +++ b/services/filestore/app.js @@ -1,6 +1,8 @@ +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') + const Events = require('events') const Metrics = require('@overleaf/metrics') -Metrics.initialize(process.env.METRICS_APP_NAME || 'filestore') const logger = require('@overleaf/logger') logger.initialize(process.env.METRICS_APP_NAME || 'filestore') diff --git a/services/git-bridge/Dockerfile b/services/git-bridge/Dockerfile index 738deb2d45..b0b95ea8c3 100644 --- a/services/git-bridge/Dockerfile +++ b/services/git-bridge/Dockerfile @@ -35,11 +35,6 @@ RUN mkdir -p /opt/cprof && \ wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \ | tar xzv -C /opt/cprof -# Install Google Cloud Debugger agent -RUN mkdir /opt/cdbg && \ - wget -qO- https://storage.googleapis.com/cloud-debugger/compute-java/debian-wheezy/cdbg_java_agent_gce.tar.gz | \ - tar xvz -C /opt/cdbg - RUN useradd --create-home node COPY --from=builder /git-bridge.jar / diff --git a/services/git-bridge/start.sh b/services/git-bridge/start.sh index 1aa0a9314a..6f1f6fba76 100755 --- a/services/git-bridge/start.sh +++ b/services/git-bridge/start.sh @@ -12,8 +12,4 @@ if [ "$ENABLE_PROFILE_AGENT" == "true" ]; then GIT_BRIDGE_JVM_ARGS="-agentpath:/opt/cprof/profiler_java_agent.so=-cprof_service=git-bridge,-cprof_service_version=${VERSION},-cprof_enable_heap_sampling=true ${GIT_BRIDGE_JVM_ARGS}" fi -if [ "$ENABLE_DEBUG_AGENT" == "true" ]; then - GIT_BRIDGE_JVM_ARGS="-agentpath:/opt/cdbg/cdbg_java_agent.so -Dcom.google.cdbg.module=git-bridge -Dcom.google.cdbg.version=$VERSION ${GIT_BRIDGE_JVM_ARGS}" -fi - exec java $GIT_BRIDGE_JVM_ARGS -jar /git-bridge.jar /conf/runtime.json diff --git a/services/history-v1/app.js b/services/history-v1/app.js index c942bb9e10..6b3a2ba8f8 100644 --- a/services/history-v1/app.js +++ b/services/history-v1/app.js @@ -2,10 +2,8 @@ /* eslint-disable no-console */ -// Initialize metrics as early as possible because this is where the Google -// profiling agents are also started. -const Metrics = require('@overleaf/metrics') -Metrics.initialize('history-v1') +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') const Events = require('events') const BPromise = require('bluebird') @@ -14,6 +12,7 @@ const cors = require('cors') const helmet = require('helmet') const HTTPStatus = require('http-status') const logger = require('@overleaf/logger') +const Metrics = require('@overleaf/metrics') const cookieParser = require('cookie-parser') const bodyParser = require('body-parser') const swaggerTools = require('swagger-tools') diff --git a/services/history-v1/storage/lib/metrics.js b/services/history-v1/storage/lib/metrics.js deleted file mode 100644 index 906a1224d1..0000000000 --- a/services/history-v1/storage/lib/metrics.js +++ /dev/null @@ -1,3 +0,0 @@ -const metrics = require('@overleaf/metrics') -metrics.configure({ appName: 'history-v1' }) -module.exports = metrics diff --git a/services/history-v1/storage/lib/persistor.js b/services/history-v1/storage/lib/persistor.js index 138e826c3c..5b3400dd16 100644 --- a/services/history-v1/storage/lib/persistor.js +++ b/services/history-v1/storage/lib/persistor.js @@ -1,6 +1,6 @@ const _ = require('lodash') const config = require('config') -const metrics = require('./metrics') +const metrics = require('@overleaf/metrics') const objectPersistor = require('@overleaf/object-persistor') const persistorConfig = _.cloneDeep(config.get('persistor')) diff --git a/services/notifications/app.js b/services/notifications/app.js index 6f75629be5..4e38d33cf6 100644 --- a/services/notifications/app.js +++ b/services/notifications/app.js @@ -1,12 +1,7 @@ -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * DS103: Rewrite code to no longer use __guard__ - * DS207: Consider shorter variations of null checks - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') + const metrics = require('@overleaf/metrics') -metrics.initialize('notifications') const Settings = require('@overleaf/settings') const logger = require('@overleaf/logger') logger.initialize('notifications-sharelatex') @@ -43,27 +38,19 @@ app.get('/status', (req, res) => res.send('notifications sharelatex up')) app.get('/health_check', (req, res) => HealthCheckController.check(function (err) { - if (err != null) { + if (err) { logger.err({ err }, 'error performing health check') - return res.sendStatus(500) + res.sendStatus(500) } else { - return res.sendStatus(200) + res.sendStatus(200) } }) ) app.get('*', (req, res) => res.sendStatus(404)) -const host = - __guard__( - Settings.internal != null ? Settings.internal.notifications : undefined, - x => x.host - ) || 'localhost' -const port = - __guard__( - Settings.internal != null ? Settings.internal.notifications : undefined, - x1 => x1.port - ) || 3042 +const host = Settings.internal?.notifications?.host || 'localhost' +const port = Settings.internal?.notifications?.port || 3042 mongoClient .connect() @@ -76,9 +63,3 @@ mongoClient logger.fatal({ err }, 'Cannot connect to mongo. Exiting.') process.exit(1) }) - -function __guard__(value, transform) { - return typeof value !== 'undefined' && value !== null - ? transform(value) - : undefined -} diff --git a/services/project-history/app.js b/services/project-history/app.js index bd4f7fae05..1c2f93bfbc 100644 --- a/services/project-history/app.js +++ b/services/project-history/app.js @@ -1,3 +1,6 @@ +// Metrics must be initialized before importing anything else +import '@overleaf/metrics/initialize.js' + import Settings from '@overleaf/settings' import logger from '@overleaf/logger' import OError from '@overleaf/o-error' diff --git a/services/project-history/app/js/server.js b/services/project-history/app/js/server.js index c583f55927..e573848e3e 100644 --- a/services/project-history/app/js/server.js +++ b/services/project-history/app/js/server.js @@ -13,7 +13,6 @@ if (Settings.sentry.dsn) { logger.initializeErrorReporting(Settings.sentry.dsn) } -Metrics.initialize('project-history') Metrics.event_loop.monitor(logger) Metrics.memory.monitor(logger) Metrics.leaked_sockets.monitor(logger) diff --git a/services/real-time/app.js b/services/real-time/app.js index 295cdede39..2a024abc57 100644 --- a/services/real-time/app.js +++ b/services/real-time/app.js @@ -1,6 +1,8 @@ +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') + const Metrics = require('@overleaf/metrics') const Settings = require('@overleaf/settings') -Metrics.initialize(process.env.METRICS_APP_NAME || 'real-time') const async = require('async') const logger = require('@overleaf/logger') diff --git a/services/spelling/app.js b/services/spelling/app.js index 9aaff3ff5f..239f2151e4 100644 --- a/services/spelling/app.js +++ b/services/spelling/app.js @@ -1,3 +1,6 @@ +// Metrics must be initialized before importing anything else +import '@overleaf/metrics/initialize.js' + import Settings from '@overleaf/settings' import logger from '@overleaf/logger' import { app } from './app/js/server.js' diff --git a/services/spelling/app/js/server.js b/services/spelling/app/js/server.js index ba5ba8e0e8..22c6f97a22 100644 --- a/services/spelling/app/js/server.js +++ b/services/spelling/app/js/server.js @@ -6,7 +6,6 @@ import bodyParser from 'body-parser' import * as SpellingAPIController from './SpellingAPIController.js' import * as HealthCheckController from './HealthCheckController.js' -metrics.initialize('spelling') logger.initialize('spelling') if (Settings.sentry?.dsn != null) { logger.initializeErrorReporting(Settings.sentry.dsn) diff --git a/services/web/app.js b/services/web/app.js index 80f939b904..bad8a9aced 100644 --- a/services/web/app.js +++ b/services/web/app.js @@ -1,16 +1,7 @@ -/* eslint-disable - max-len, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * DS207: Consider shorter variations of null checks - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ +// Metrics must be initialized before importing anything else +require('@overleaf/metrics/initialize') + const metrics = require('@overleaf/metrics') -metrics.initialize(process.env.METRICS_APP_NAME || 'web') const Settings = require('@overleaf/settings') const logger = require('@overleaf/logger') const PlansLocator = require('./app/src/Features/Subscription/PlansLocator') @@ -24,7 +15,7 @@ logger.logger.serializers.files = require('./app/src/infrastructure/LoggerSerializers').files logger.logger.serializers.project = require('./app/src/infrastructure/LoggerSerializers').project -if ((Settings.sentry != null ? Settings.sentry.dsn : undefined) != null) { +if (Settings.sentry?.dsn != null) { logger.initializeErrorReporting(Settings.sentry.dsn) }