From 3c956b5f4f9cbfc4aee86fdc62de2cec19fa6804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Czerpak?= Date: Mon, 9 Dec 2024 17:11:39 +0100 Subject: [PATCH 1/3] initial implementation --- instrumentation.js | 17 ++ package.json | 6 + routes/wpt.js | 8 +- wtp/locationSelector.js | 39 ++++ yarn.lock | 454 +++++++++++++++++++++++++++++++++++++++- 5 files changed, 520 insertions(+), 4 deletions(-) create mode 100644 instrumentation.js diff --git a/instrumentation.js b/instrumentation.js new file mode 100644 index 0000000..a9d2d74 --- /dev/null +++ b/instrumentation.js @@ -0,0 +1,17 @@ +const opentelemetry = require('@opentelemetry/sdk-node'); +const {Resource} = require('@opentelemetry/resources'); +const { + ATTR_SERVICE_NAME, + ATTR_SERVICE_VERSION, +} = require('@opentelemetry/semantic-conventions'); +const {PrometheusExporter} = require('@opentelemetry/exporter-prometheus'); +const sdk = new opentelemetry.NodeSDK({ + resource: new Resource({ + [ATTR_SERVICE_NAME]: 'web-speed-test-server', + [ATTR_SERVICE_VERSION]: require('./package.json').version, + }), + metricReader: new PrometheusExporter({ + port: 6060, + }), +}); +sdk.start(); diff --git a/package.json b/package.json index 1303de4..d87cc70 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,15 @@ "scripts": { "test": "mocha", "start": "node start.js", + "start-with-instrumentation": "node --require ./instrumentation.js start.js", "postinstall": "patch-package" }, "dependencies": { + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/exporter-prometheus": "^0.56.0", + "@opentelemetry/resources": "^1.29.0", + "@opentelemetry/sdk-node": "^0.56.0", + "@opentelemetry/semantic-conventions": "^1.28.0", "async": "^3.2.6", "async-mutex": "^0.5.0", "body-parser": "~1.20.3", diff --git a/routes/wpt.js b/routes/wpt.js index 463c7ef..2b27b44 100644 --- a/routes/wpt.js +++ b/routes/wpt.js @@ -6,6 +6,10 @@ const locationSelector = require("../wtp/locationSelector"); const logger = require('../logger').logger; const {LOG_LEVEL_INFO, LOG_LEVEL_WARNING, LOG_LEVEL_ERROR, LOG_LEVEL_CRITICAL, LOG_LEVEL_DEBUG} = require('../logger'); const path = require('path'); +const opentelemetry = require('@opentelemetry/api'); + +const WstMeter = opentelemetry.metrics.getMeter(); +const testrunCounter = WstMeter.createCounter('testrun.total'); const routeCallback = (error, result, res, rollBarMsg) => { if (error) { @@ -52,11 +56,11 @@ const wtp = (app) => { }); }); - app.post('/test/run', (req, res) => { let rollBarMsg = {testId: "N/A", thirdPartyErrorCode: "", file: path.basename((__filename))}; if (!req.body) { logger.error('Could not run test missing request body', rollBarMsg, req); + testrunCounter.add(1, {"status": "BAD_REQUEST"}); routeCallback({statusCode: 400}, null, res, rollBarMsg); return; } @@ -65,6 +69,7 @@ const wtp = (app) => { rollBarMsg.analyzedUrl = testUrl; if (!testUrl) { logger.error('Could not run test missing test url',rollBarMsg, req); + testrunCounter.add(1, {"status": "BAD_REQUEST"}); routeCallback({statusCode: 400}, null, res, rollBarMsg); return; } @@ -75,6 +80,7 @@ const wtp = (app) => { }*/ logger.info('Started test called from webspeedtest', rollBarMsg, req); apiCaller.runWtpTest(testUrl, mobile, (error, result, response, rollBarMsg) => { + testrunCounter.add(1, {"status": error ? "FAILURE" : "OK"}); routeCallback(error, result, res, rollBarMsg) }); }); diff --git a/wtp/locationSelector.js b/wtp/locationSelector.js index 3d8489e..05ae0b9 100644 --- a/wtp/locationSelector.js +++ b/wtp/locationSelector.js @@ -3,10 +3,29 @@ const config = require('config'); const {Mutex, withTimeout, E_TIMEOUT} = require('async-mutex'); const apiKeys = require('./apiKey'); const path = require("path"); +const opentelemetry = require("@opentelemetry/api"); const logger = require('../logger').logger; const GET_LOCATIONS = 'http://www.webpagetest.org/getLocations.php?f=json'; +const WstMeter = opentelemetry.metrics.getMeter(); +const locationMetrics = { + total: WstMeter.createGauge('location.total'), + lastUpdate: WstMeter.createGauge('location.last_update'), + ratio: WstMeter.createGauge('location.ratio'), + score: WstMeter.createGauge('location.score'), + selected: WstMeter.createGauge('location.selected'), + agent: { + total: WstMeter.createGauge('location.agent.total'), + idle: WstMeter.createGauge('location.agent.idle'), + queued: WstMeter.createGauge('location.agent.queued'), + highprio: WstMeter.createGauge('location.agent.highprio'), + lowprio: WstMeter.createGauge('location.agent.lowprio'), + testing: WstMeter.createGauge('location.agent.testing'), + blocking: WstMeter.createGauge('location.agent.blocking') + }, +}; + class LocationSelector { constructor() { if (!LocationSelector.instance) { @@ -111,6 +130,26 @@ class LocationSelector { this.location = this.getBestLocationId(filtered); this.cachedAllLocations = filtered; this.lastUpdated = Date.now(); + + // telemetry + locationMetrics.total = this.cachedAllLocations.length; + locationMetrics.lastUpdate = this.lastUpdated; + this.cachedAllLocations.forEach((loc) => { + let labels = {location: loc.location}; + + locationMetrics.ratio.record(loc.PendingTests.TestAgentRatio, labels); + locationMetrics.score.record(loc.score, labels); + + locationMetrics.selected.record(loc.location === this.location ? 1 : 0, labels); + + locationMetrics.agent.total.record(loc.PendingTests.Total, labels); + locationMetrics.agent.idle.record(loc.PendingTests.Idle, labels); + locationMetrics.agent.queued.record(loc.PendingTests.Queued, labels); + locationMetrics.agent.highprio.record(loc.PendingTests.HighPriority, labels); + locationMetrics.agent.lowprio.record(loc.PendingTests.LowPriority, labels); + locationMetrics.agent.testing.record(loc.PendingTests.Testing, labels); + locationMetrics.agent.blocking.record(loc.PendingTests.Blocking, labels); + }); }; async getLocation() { diff --git a/yarn.lock b/yarn.lock index 98ebd7a..9bfbf5b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,324 @@ # yarn lockfile v1 +"@grpc/grpc-js@^1.7.1": + version "1.12.4" + resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.4.tgz#3208808435ebf1e495f9a5c5c5a0bc3dc8c9e891" + integrity sha512-NBhrxEWnFh0FxeA0d//YP95lRFsSx2TNLEUQg4/W+5f/BMxcCjgOOIT24iD+ZB/tZw057j44DaIxja7w4XMrhg== + dependencies: + "@grpc/proto-loader" "^0.7.13" + "@js-sdsl/ordered-map" "^4.4.2" + +"@grpc/proto-loader@^0.7.13": + version "0.7.13" + resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" + integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== + dependencies: + lodash.camelcase "^4.3.0" + long "^5.0.0" + protobufjs "^7.2.5" + yargs "^17.7.2" + +"@js-sdsl/ordered-map@^4.4.2": + version "4.4.2" + resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" + integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== + +"@opentelemetry/api-logs@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.56.0.tgz#68f8c51ca905c260b610c8a3c67d3f9fa3d59a45" + integrity sha512-Wr39+94UNNG3Ei9nv3pHd4AJ63gq5nSemMRpCd8fPwDL9rN3vK26lzxfH27mw16XzOSO+TpyQwBAMaLxaPWG0g== + dependencies: + "@opentelemetry/api" "^1.3.0" + +"@opentelemetry/api@^1.3.0", "@opentelemetry/api@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" + integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== + +"@opentelemetry/context-async-hooks@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-1.29.0.tgz#3b3836c913834afa7720fdcf9687620f49b2cf37" + integrity sha512-TKT91jcFXgHyIDF1lgJF3BHGIakn6x0Xp7Tq3zoS3TMPzT9IlP0xEavWP8C1zGjU9UmZP2VR1tJhW9Az1A3w8Q== + +"@opentelemetry/core@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-1.29.0.tgz#a9397dfd9a8b37b2435b5e44be16d39ec1c82bd9" + integrity sha512-gmT7vAreXl0DTHD2rVZcw3+l2g84+5XiHIqdBUxXbExymPCvSsGOpiwMmn8nkiJur28STV31wnhIDrzWDPzjfA== + dependencies: + "@opentelemetry/semantic-conventions" "1.28.0" + +"@opentelemetry/exporter-logs-otlp-grpc@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.56.0.tgz#e32423fbc793404bc4376a33978921c39ab54363" + integrity sha512-/ef8wcphVKZ0uI7A1oqQI/gEMiBUlkeBkM9AGx6AviQFIbgPVSdNK3+bHBkyq5qMkyWgkeQCSJ0uhc5vJpf0dw== + dependencies: + "@grpc/grpc-js" "^1.7.1" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.56.0" + "@opentelemetry/otlp-transformer" "0.56.0" + "@opentelemetry/sdk-logs" "0.56.0" + +"@opentelemetry/exporter-logs-otlp-http@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.56.0.tgz#ba380cfb3d33fcca62d485d4384f1aa796c1726f" + integrity sha512-gN/itg2B30pa+yAqiuIHBCf3E77sSBlyWVzb+U/MDLzEMOwfnexlMvOWULnIO1l2xR2MNLEuPCQAOrL92JHEJg== + dependencies: + "@opentelemetry/api-logs" "0.56.0" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-exporter-base" "0.56.0" + "@opentelemetry/otlp-transformer" "0.56.0" + "@opentelemetry/sdk-logs" "0.56.0" + +"@opentelemetry/exporter-logs-otlp-proto@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.56.0.tgz#8116cc90ac16db4b555b3103644918a2732177d7" + integrity sha512-MaO+eGrdksd8MpEbDDLbWegHc3w6ualZV6CENxNOm3wqob0iOx78/YL2NVIKyP/0ktTUIs7xIppUYqfY3ogFLQ== + dependencies: + "@opentelemetry/api-logs" "0.56.0" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-exporter-base" "0.56.0" + "@opentelemetry/otlp-transformer" "0.56.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-logs" "0.56.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + +"@opentelemetry/exporter-prometheus@^0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.56.0.tgz#b989a14e4d824fc0b2478b77839b64e6c1ae9ae5" + integrity sha512-5kFcTumUveNREskg6n4aaXx2o3ADc9YxDkArGCIegzErlc3zfzreO4Y7HDc/fYBnV9aIhJUk5P8yotyVCuymkQ== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-metrics" "1.29.0" + +"@opentelemetry/exporter-trace-otlp-grpc@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.56.0.tgz#6b266eafe8bc704541b7ab88bad61d7d977cb875" + integrity sha512-9hRHue78CV2XShAt30HadBK8XEtOBiQmnkYquR1RQyf2RYIdJvhiypEZ+Jh3NGW8Qi14icTII/1oPTQlhuyQdQ== + dependencies: + "@grpc/grpc-js" "^1.7.1" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.56.0" + "@opentelemetry/otlp-transformer" "0.56.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + +"@opentelemetry/exporter-trace-otlp-http@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.56.0.tgz#184bd208d68bd19c3382a9a22737200b34f7edb9" + integrity sha512-vqVuJvcwameA0r0cNrRzrZqPLB0otS+95g0XkZdiKOXUo81wYdY6r4kyrwz4nSChqTBEFm0lqi/H2OWGboOa6g== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-exporter-base" "0.56.0" + "@opentelemetry/otlp-transformer" "0.56.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + +"@opentelemetry/exporter-trace-otlp-proto@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.56.0.tgz#e44473b84329aa0cd3174a26aee01bd57a383101" + integrity sha512-UYVtz8Kp1QZpZFg83ZrnwRIxF2wavNyi1XaIKuQNFjlYuGCh8JH4+GOuHUU4G8cIzOkWdjNR559vv0Q+MCz+1w== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-exporter-base" "0.56.0" + "@opentelemetry/otlp-transformer" "0.56.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + +"@opentelemetry/exporter-zipkin@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.29.0.tgz#a2bf1b22a93c23650e8542a3d74b420eba24079e" + integrity sha512-9wNUxbl/sju2AvA3UhL2kLF1nfhJ4dVJgvktc3hx80Bg/fWHvF6ik4R3woZ/5gYFqZ97dcuik0dWPQEzLPNBtg== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + "@opentelemetry/semantic-conventions" "1.28.0" + +"@opentelemetry/instrumentation@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.56.0.tgz#3330ce16d9235a548efa1019a4a7f01414edd44a" + integrity sha512-2KkGBKE+FPXU1F0zKww+stnlUxUTlBvLCiWdP63Z9sqXYeNI/ziNzsxAp4LAdUcTQmXjw1IWgvm5CAb/BHy99w== + dependencies: + "@opentelemetry/api-logs" "0.56.0" + "@types/shimmer" "^1.2.0" + import-in-the-middle "^1.8.1" + require-in-the-middle "^7.1.1" + semver "^7.5.2" + shimmer "^1.2.1" + +"@opentelemetry/otlp-exporter-base@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.56.0.tgz#3461fd403fbd3d366df46536a5a7dd7c7f499536" + integrity sha512-eURvv0fcmBE+KE1McUeRo+u0n18ZnUeSc7lDlW/dzlqFYasEbsztTK4v0Qf8C4vEY+aMTjPKUxBG0NX2Te3Pmw== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-transformer" "0.56.0" + +"@opentelemetry/otlp-grpc-exporter-base@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.56.0.tgz#384ebd4a1282eb56d591b1baed0a2c7b6900ec75" + integrity sha512-QqM4si8Ew8CW5xVk4mYbfusJzMXyk6tkYA5SI0w/5NBxmiZZaYPwQQ2cu58XUH2IMPAsi71yLJVJQaWBBCta0A== + dependencies: + "@grpc/grpc-js" "^1.7.1" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/otlp-exporter-base" "0.56.0" + "@opentelemetry/otlp-transformer" "0.56.0" + +"@opentelemetry/otlp-transformer@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.56.0.tgz#d2bae377ff2cabc0366d002ab993fcb8ea7d2700" + integrity sha512-kVkH/W2W7EpgWWpyU5VnnjIdSD7Y7FljQYObAQSKdRcejiwMj2glypZtUdfq1LTJcv4ht0jyTrw1D3CCxssNtQ== + dependencies: + "@opentelemetry/api-logs" "0.56.0" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-logs" "0.56.0" + "@opentelemetry/sdk-metrics" "1.29.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + protobufjs "^7.3.0" + +"@opentelemetry/propagator-b3@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-1.29.0.tgz#5b64b071e63ca1120afd45069bc271c1e9205e8b" + integrity sha512-ktsNDlqhu+/IPGEJRMj81upg2JupUp+SwW3n1ZVZTnrDiYUiMUW41vhaziA7Q6UDhbZvZ58skDpQhe2ZgNIPvg== + dependencies: + "@opentelemetry/core" "1.29.0" + +"@opentelemetry/propagator-jaeger@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.29.0.tgz#1bb78799d193a8dfe93fbf65128757c2bd7b1698" + integrity sha512-EXIEYmFgybnFMijVgqx1mq/diWwSQcd0JWVksytAVQEnAiaDvP45WuncEVQkFIAC0gVxa2+Xr8wL5pF5jCVKbg== + dependencies: + "@opentelemetry/core" "1.29.0" + +"@opentelemetry/resources@1.29.0", "@opentelemetry/resources@^1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-1.29.0.tgz#d170f39b2ac93d61b53d13dfcd96795181bdc372" + integrity sha512-s7mLXuHZE7RQr1wwweGcaRp3Q4UJJ0wazeGlc/N5/XSe6UyXfsh1UQGMADYeg7YwD+cEdMtU1yJAUXdnFzYzyQ== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/semantic-conventions" "1.28.0" + +"@opentelemetry/sdk-logs@0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.56.0.tgz#2ce3416111d1524305f4ec92dccf9e9f9e9626cf" + integrity sha512-OS0WPBJF++R/cSl+terUjQH5PebloidB1Jbbecgg2rnCmQbTST9xsRes23bLfDQVRvmegmHqDh884h0aRdJyLw== + dependencies: + "@opentelemetry/api-logs" "0.56.0" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/resources" "1.29.0" + +"@opentelemetry/sdk-metrics@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-1.29.0.tgz#26b9891e47715c0caaaa4d4e8b536685e1937a06" + integrity sha512-MkVtuzDjXZaUJSuJlHn6BSXjcQlMvHcsDV7LjY4P6AJeffMa4+kIGDjzsCf6DkAh6Vqlwag5EWEam3KZOX5Drw== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/resources" "1.29.0" + +"@opentelemetry/sdk-node@^0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-node/-/sdk-node-0.56.0.tgz#54bd677ccf0ffdb5a7e19c25721c7d9e9ed6d67a" + integrity sha512-FOY7tWboBBxqftLNHPJFmDXo9fRoPd2PlzfEvSd6058BJM9gY4pWCg8lbVlu03aBrQjcfCTAhXk/tz1Yqd/m6g== + dependencies: + "@opentelemetry/api-logs" "0.56.0" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/exporter-logs-otlp-grpc" "0.56.0" + "@opentelemetry/exporter-logs-otlp-http" "0.56.0" + "@opentelemetry/exporter-logs-otlp-proto" "0.56.0" + "@opentelemetry/exporter-trace-otlp-grpc" "0.56.0" + "@opentelemetry/exporter-trace-otlp-http" "0.56.0" + "@opentelemetry/exporter-trace-otlp-proto" "0.56.0" + "@opentelemetry/exporter-zipkin" "1.29.0" + "@opentelemetry/instrumentation" "0.56.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/sdk-logs" "0.56.0" + "@opentelemetry/sdk-metrics" "1.29.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + "@opentelemetry/sdk-trace-node" "1.29.0" + "@opentelemetry/semantic-conventions" "1.28.0" + +"@opentelemetry/sdk-trace-base@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.29.0.tgz#f48d95dae0e58e601d0596bd2e482122d2688fb8" + integrity sha512-hEOpAYLKXF3wGJpXOtWsxEtqBgde0SCv+w+jvr3/UusR4ll3QrENEGnSl1WDCyRrpqOQ5NCNOvZch9UFVa7MnQ== + dependencies: + "@opentelemetry/core" "1.29.0" + "@opentelemetry/resources" "1.29.0" + "@opentelemetry/semantic-conventions" "1.28.0" + +"@opentelemetry/sdk-trace-node@1.29.0": + version "1.29.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.29.0.tgz#433adf34ffdd3221088544415db1859c52b3637c" + integrity sha512-ZpGYt+VnMu6O0SRKzhuIivr7qJm3GpWnTCMuJspu4kt3QWIpIenwixo5Vvjuu3R4h2Onl/8dtqAiPIs92xd5ww== + dependencies: + "@opentelemetry/context-async-hooks" "1.29.0" + "@opentelemetry/core" "1.29.0" + "@opentelemetry/propagator-b3" "1.29.0" + "@opentelemetry/propagator-jaeger" "1.29.0" + "@opentelemetry/sdk-trace-base" "1.29.0" + semver "^7.5.2" + +"@opentelemetry/semantic-conventions@1.28.0", "@opentelemetry/semantic-conventions@^1.28.0": + version "1.28.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz#337fb2bca0453d0726696e745f50064411f646d6" + integrity sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA== + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + "@sec-ant/readable-stream@^0.4.1": version "0.4.1" resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" @@ -69,13 +387,18 @@ resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== -"@types/node@*": +"@types/node@*", "@types/node@>=13.7.0": version "22.10.1" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.10.1.tgz#41ffeee127b8975a05f8c4f83fb89bcb2987d766" integrity sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ== dependencies: undici-types "~6.20.0" +"@types/shimmer@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded" + integrity sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg== + "@types/superagent@4.1.13": version "4.1.13" resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-4.1.13.tgz#0aaa3f4ff9404b94932d1dcdfb7f3d39d23997a0" @@ -97,6 +420,16 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +acorn-import-attributes@^1.9.5: + version "1.9.5" + resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" + integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== + +acorn@^8.8.2: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -332,6 +665,11 @@ ci-info@^3.7.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== +cjs-module-lexer@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.1.tgz#707413784dbb3a72aa11c2f2b042a0bef4004170" + integrity sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA== + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -341,6 +679,15 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + cloudinary-core@^2.13.0: version "2.13.1" resolved "https://registry.yarnpkg.com/cloudinary-core/-/cloudinary-core-2.13.1.tgz#7abb62bf1db41773acfe1eebb7fd40571c34495b" @@ -911,6 +1258,16 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +import-in-the-middle@^1.8.1: + version "1.11.3" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.11.3.tgz#08559f2c05fd65ba7062e747af056ed18a80120c" + integrity sha512-tNpKEb4AjZrCyrxi+Eyu43h5ig0O8ZRFSXPHh/00/o+4P4pKzVEW/m5lsVtsAT7fCIgmQOAPjdqecGDsBXRxsw== + dependencies: + acorn "^8.8.2" + acorn-import-attributes "^1.9.5" + cjs-module-lexer "^1.2.2" + module-details-from-path "^1.0.3" + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -941,6 +1298,13 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-core-module@^2.13.0: + version "2.15.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" + integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== + dependencies: + hasown "^2.0.2" + is-docker@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" @@ -1079,6 +1443,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -1097,6 +1466,11 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" +long@^5.0.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + loupe@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" @@ -1214,6 +1588,11 @@ mocha@^10.8.2: yargs-parser "^20.2.9" yargs-unparser "^2.0.0" +module-details-from-path@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" + integrity sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -1356,6 +1735,11 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + path-to-regexp@0.1.12: version "0.1.12" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" @@ -1381,6 +1765,24 @@ propagate@^2.0.0: resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== +protobufjs@^7.2.5, protobufjs@^7.3.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" + integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/node" ">=13.7.0" + long "^5.0.0" + proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -1452,11 +1854,29 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== +require-in-the-middle@^7.1.1: + version "7.4.0" + resolved "https://registry.yarnpkg.com/require-in-the-middle/-/require-in-the-middle-7.4.0.tgz#606977820d4b5f9be75e5a108ce34cfed25b3bb4" + integrity sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ== + dependencies: + debug "^4.3.5" + module-details-from-path "^1.0.3" + resolve "^1.22.8" + resolve-alpn@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== +resolve@^1.22.8: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" @@ -1496,7 +1916,7 @@ safe-buffer@5.2.1, safe-buffer@^5.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@^7.3.8, semver@^7.5.3: +semver@^7.3.8, semver@^7.5.2, semver@^7.5.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -1566,6 +1986,11 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +shimmer@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" + integrity sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== + side-channel@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" @@ -1613,7 +2038,7 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -1664,6 +2089,11 @@ supports-color@^8.1.1: dependencies: has-flag "^4.0.0" +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -1787,6 +2217,11 @@ yargs-parser@^20.2.2, yargs-parser@^20.2.9: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + yargs-unparser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" @@ -1810,6 +2245,19 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@^17.7.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" From 62a28cc299c919877fef1396ba2ce85e7de17e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Czerpak?= Date: Mon, 9 Dec 2024 18:44:42 +0100 Subject: [PATCH 2/3] fix --- wtp/locationSelector.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wtp/locationSelector.js b/wtp/locationSelector.js index 05ae0b9..1a97c4d 100644 --- a/wtp/locationSelector.js +++ b/wtp/locationSelector.js @@ -8,7 +8,7 @@ const logger = require('../logger').logger; const GET_LOCATIONS = 'http://www.webpagetest.org/getLocations.php?f=json'; -const WstMeter = opentelemetry.metrics.getMeter(); +const WstMeter = opentelemetry.metrics.getMeter("web-speed-test-server"); const locationMetrics = { total: WstMeter.createGauge('location.total'), lastUpdate: WstMeter.createGauge('location.last_update'), @@ -132,8 +132,8 @@ class LocationSelector { this.lastUpdated = Date.now(); // telemetry - locationMetrics.total = this.cachedAllLocations.length; - locationMetrics.lastUpdate = this.lastUpdated; + locationMetrics.total.record(this.cachedAllLocations.length); + locationMetrics.lastUpdate.record(this.lastUpdated); this.cachedAllLocations.forEach((loc) => { let labels = {location: loc.location}; From 36f36fc49c2e3977318b69372b77832a42c75598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Czerpak?= Date: Mon, 9 Dec 2024 20:27:38 +0100 Subject: [PATCH 3/3] fix --- instrumentation.js | 4 ++-- routes/wpt.js | 2 +- wtp/locationSelector.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/instrumentation.js b/instrumentation.js index a9d2d74..fb6f17f 100644 --- a/instrumentation.js +++ b/instrumentation.js @@ -2,13 +2,13 @@ const opentelemetry = require('@opentelemetry/sdk-node'); const {Resource} = require('@opentelemetry/resources'); const { ATTR_SERVICE_NAME, - ATTR_SERVICE_VERSION, + ATTR_SERVICE_VERSION } = require('@opentelemetry/semantic-conventions'); const {PrometheusExporter} = require('@opentelemetry/exporter-prometheus'); const sdk = new opentelemetry.NodeSDK({ resource: new Resource({ [ATTR_SERVICE_NAME]: 'web-speed-test-server', - [ATTR_SERVICE_VERSION]: require('./package.json').version, + [ATTR_SERVICE_VERSION]: require('./package.json').version }), metricReader: new PrometheusExporter({ port: 6060, diff --git a/routes/wpt.js b/routes/wpt.js index 2b27b44..f814627 100644 --- a/routes/wpt.js +++ b/routes/wpt.js @@ -8,7 +8,7 @@ const {LOG_LEVEL_INFO, LOG_LEVEL_WARNING, LOG_LEVEL_ERROR, LOG_LEVEL_CRITICAL, L const path = require('path'); const opentelemetry = require('@opentelemetry/api'); -const WstMeter = opentelemetry.metrics.getMeter(); +const WstMeter = opentelemetry.metrics.getMeter('default'); const testrunCounter = WstMeter.createCounter('testrun.total'); const routeCallback = (error, result, res, rollBarMsg) => { diff --git a/wtp/locationSelector.js b/wtp/locationSelector.js index 1a97c4d..8325f67 100644 --- a/wtp/locationSelector.js +++ b/wtp/locationSelector.js @@ -8,7 +8,7 @@ const logger = require('../logger').logger; const GET_LOCATIONS = 'http://www.webpagetest.org/getLocations.php?f=json'; -const WstMeter = opentelemetry.metrics.getMeter("web-speed-test-server"); +const WstMeter = opentelemetry.metrics.getMeter('default'); const locationMetrics = { total: WstMeter.createGauge('location.total'), lastUpdate: WstMeter.createGauge('location.last_update'),