From 8c66b46ce737ca8d7f9805c0c4bf13508bd1c17a Mon Sep 17 00:00:00 2001 From: Aswin V Date: Sat, 8 Apr 2023 22:19:57 +0530 Subject: [PATCH] Use @boxyhq/metrics wrapper package for telemetry (#1065) * Init sdk folder for otel * Update LICENSE * Add `directory` for `git` in package.json * Initialize metrics * Acquire meter * Operation for counter instrument * operation for gauge * - Move `otel` out of `sdk` folder into root folder" - Rename npm to `@boxyhq/metrics` * Add function instrumentation * Rename `otel` to `metrics` * Rename folder and add npm dependencies * Refactor * Add `instrumented` decorator * Exclude metrics from root tsconfig * Remove otel from names * Remove `metrics` folder * Swap creation of instruments with constants * Remove `metrics` from tsconfig * Use `@boxyhq/metrics` * Use `@boxyhq/metrics` from npm registry * Use `initializeMetrics` from `@boxyhq/metrics` * Cleanup * Wrap telemetry calls * Refactor * Refactor * Fix call * Update metrics to latest release --- lib/metrics.ts | 42 +--- npm/package-lock.json | 330 ++++++++++++++++++++++++++++++- npm/package.json | 8 +- npm/src/index.ts | 3 - npm/src/opentelemetry/metrics.ts | 85 ++++---- package-lock.json | 16 +- package.json | 3 +- 7 files changed, 399 insertions(+), 88 deletions(-) diff --git a/lib/metrics.ts b/lib/metrics.ts index 2f7e07416..79f53cc64 100644 --- a/lib/metrics.ts +++ b/lib/metrics.ts @@ -1,42 +1,4 @@ -import { metrics } from '@opentelemetry/api'; -import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http'; -import { OTLPMetricExporter as OTLPMetricExporterGRPC } from '@opentelemetry/exporter-metrics-otlp-grpc'; -import { MeterProvider, PeriodicExportingMetricReader } from '@opentelemetry/sdk-metrics'; -import { Resource } from '@opentelemetry/resources'; -import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'; -import { DiagConsoleLogger, DiagLogLevel, diag } from '@opentelemetry/api'; - import packageInfo from '../package.json'; +import { initializeMetrics } from '@boxyhq/metrics'; -if (process.env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT || process.env.OTEL_EXPORTER_OTLP_ENDPOINT) { - const meterProvider = new MeterProvider({ - resource: new Resource({ - [SemanticResourceAttributes.SERVICE_NAME]: `${packageInfo.name}`, - [SemanticResourceAttributes.SERVICE_VERSION]: `${packageInfo.version}`, - }), - }); - - let metricExporter; - if ( - process.env.OTEL_EXPORTER_OTLP_PROTOCOL === 'grpc' || - process.env.OTEL_EXPORTER_OTLP_METRICS_PROTOCOL === 'grpc' - ) { - metricExporter = new OTLPMetricExporterGRPC(); - } else { - metricExporter = new OTLPMetricExporter(); - } - - meterProvider.addMetricReader( - new PeriodicExportingMetricReader({ - exporter: metricExporter, - exportIntervalMillis: 60000, - }) - ); - - metrics.setGlobalMeterProvider(meterProvider); -} - -if (process.env.OTEL_EXPORTER_DEBUG) { - diag.disable(); - diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG); -} +initializeMetrics({ name: packageInfo.name, version: packageInfo.version }); diff --git a/npm/package-lock.json b/npm/package-lock.json index a12a6f71f..a99abc961 100644 --- a/npm/package-lock.json +++ b/npm/package-lock.json @@ -13,8 +13,8 @@ "@aws-sdk/credential-providers": "3.300.0", "@aws-sdk/util-dynamodb": "3.299.0", "@boxyhq/error-code-mnemonic": "0.1.1", + "@boxyhq/metrics": "0.1.0", "@boxyhq/saml20": "1.1.4", - "@opentelemetry/api": "1.4.1", "axios": "1.3.4", "jose": "4.13.1", "lodash": "4.17.21", @@ -2553,6 +2553,19 @@ "resolved": "https://registry.npmjs.org/@boxyhq/error-code-mnemonic/-/error-code-mnemonic-0.1.1.tgz", "integrity": "sha512-NmO111OG8GQDE8W/+uSREb67YSqnY2N/tHykGeFoIZc9Leher+lW+jN4U1OXzlc66hwB8yO7WRu2cbYsAKsi9g==" }, + "node_modules/@boxyhq/metrics": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@boxyhq/metrics/-/metrics-0.1.0.tgz", + "integrity": "sha512-ndb9fFe9KQsIrSCIyJj+2ryJVH2YVQt4OltHAT+xqmeLRmkM1f7ngezxCKK9Dn37mMPz8URnT1CHS3sCKQPmPw==", + "dependencies": { + "@opentelemetry/api": "1.4.1", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.37.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.37.0", + "@opentelemetry/resources": "1.11.0", + "@opentelemetry/sdk-metrics": "1.11.0", + "@opentelemetry/semantic-conventions": "1.11.0" + } + }, "node_modules/@boxyhq/saml20": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@boxyhq/saml20/-/saml20-1.1.4.tgz", @@ -2599,6 +2612,74 @@ "npm": ">=6.0.0" } }, + "node_modules/@grpc/grpc-js": { + "version": "1.8.13", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.13.tgz", + "integrity": "sha512-iY3jsdfbc0ARoCLFvbvUB8optgyb0r1XLPb142u+QtgBcKJYkCIFt3Fd/881KqjLYWjsBJF57N3b8Eop9NDfUA==", + "dependencies": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.6.tgz", + "integrity": "sha512-QyAXR8Hyh7uMDmveWxDSUcJr9NAWaZ2I6IXgAYvQmfflwouTM+rArE2eEaCtLlRqO81j7pRLCt81IefUei6Zbw==", + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/@grpc/proto-loader/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -2683,6 +2764,215 @@ "node": ">=8.0.0" } }, + "node_modules/@opentelemetry/core": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.11.0.tgz", + "integrity": "sha512-aP1wHSb+YfU0pM63UAkizYPuS4lZxzavHHw5KJfFNN2oWQ79HSm6JR3CzwFKHwKhSzHN8RE9fgP1IdVJ8zmo1w==", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.11.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.5.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.37.0.tgz", + "integrity": "sha512-WOPnnzj8VHR30K517awJRbBg+FV/woXgKD+JOi/B5umf40p/pW9OqBsXw2uIypgT78Q0GIXie3afExSunP9eCQ==", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.11.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.37.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.37.0", + "@opentelemetry/otlp-transformer": "0.37.0", + "@opentelemetry/resources": "1.11.0", + "@opentelemetry/sdk-metrics": "1.11.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.37.0.tgz", + "integrity": "sha512-xiZTndcdubYJ0z6Kku03UNdaJlVTTGtSXZDr02c+L/RHQU82221tjT2dtPbzZ52uXPu37TVcgaKpzCwNm/TfaQ==", + "dependencies": { + "@opentelemetry/core": "1.11.0", + "@opentelemetry/otlp-exporter-base": "0.37.0", + "@opentelemetry/otlp-transformer": "0.37.0", + "@opentelemetry/resources": "1.11.0", + "@opentelemetry/sdk-metrics": "1.11.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.37.0.tgz", + "integrity": "sha512-dLbv7nr7d14xrHzd+S1eW+RpXh7IC0onktc23pwzETh6J7Ytzf0+QwLV5iRatoNtwPU2hX1VGOipwEnC/BjXxg==", + "dependencies": { + "@opentelemetry/core": "1.11.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.37.0.tgz", + "integrity": "sha512-S5mhcl+Cdf9skIuEO3amfn7WtzXKZ8PVzyptwD1II2x8kvtD5z1lejXeMxTcsrb1lCc9raYVolohjnKF1uwccQ==", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@grpc/proto-loader": "^0.7.3", + "@opentelemetry/core": "1.11.0", + "@opentelemetry/otlp-exporter-base": "0.37.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.37.0.tgz", + "integrity": "sha512-cIzV9x2DhJ5gN0mld8OqN+XM95sDiuAJJvXsRjVuz9vu8TSNbbao/QCKNfJLOXqe8l3Ge05nKzQ6Q2gDDEN36w==", + "dependencies": { + "@opentelemetry/core": "1.11.0", + "@opentelemetry/resources": "1.11.0", + "@opentelemetry/sdk-metrics": "1.11.0", + "@opentelemetry/sdk-trace-base": "1.11.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.5.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.11.0.tgz", + "integrity": "sha512-y0z2YJTqk0ag+hGT4EXbxH/qPhDe8PfwltYb4tXIEsozgEFfut/bqW7H7pDvylmCjBRMG4NjtLp57V1Ev++brA==", + "dependencies": { + "@opentelemetry/core": "1.11.0", + "@opentelemetry/semantic-conventions": "1.11.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.5.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.11.0.tgz", + "integrity": "sha512-knuq3pwU0+46FEMdw9Ses+alXL9cbcLUUTdYBBBsaKkqKwoVMHfhBufW7u6YCu4i+47Wg6ZZTN/eGc4LbTbK5Q==", + "dependencies": { + "@opentelemetry/core": "1.11.0", + "@opentelemetry/resources": "1.11.0", + "lodash.merge": "4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.5.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.11.0.tgz", + "integrity": "sha512-DV8e5/Qo42V8FMBlQ0Y0Liv6Hl/Pp5bAZ73s7r1euX8w4bpRes1B7ACiA4yujADbWMJxBgSo4fGbi4yjmTMG2A==", + "dependencies": { + "@opentelemetry/core": "1.11.0", + "@opentelemetry/resources": "1.11.0", + "@opentelemetry/semantic-conventions": "1.11.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.5.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.11.0.tgz", + "integrity": "sha512-fG4D0AktoHyHwGhFGv+PzKrZjxbKJfckJauTJdq2A+ej5cTazmNYjJVAODXXkYyrsI10muMl+B1iO2q1R6Lp+w==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@redis/bloom": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.2.0.tgz", @@ -2812,6 +3102,11 @@ "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "node_modules/@types/node": { "version": "18.15.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", @@ -4933,6 +5228,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -4945,6 +5245,11 @@ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, "node_modules/long": { "version": "5.2.1", "license": "Apache-2.0" @@ -5707,6 +6012,29 @@ "node": ">=8" } }, + "node_modules/protobufjs": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz", + "integrity": "sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==", + "hasInstallScript": true, + "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" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", diff --git a/npm/package.json b/npm/package.json index d05a58911..b624aaf5e 100644 --- a/npm/package.json +++ b/npm/package.json @@ -41,11 +41,11 @@ }, "dependencies": { "@aws-sdk/client-dynamodb": "3.303.0", - "@aws-sdk/util-dynamodb": "3.299.0", "@aws-sdk/credential-providers": "3.300.0", - "@boxyhq/saml20": "1.1.4", + "@aws-sdk/util-dynamodb": "3.299.0", "@boxyhq/error-code-mnemonic": "0.1.1", - "@opentelemetry/api": "1.4.1", + "@boxyhq/metrics": "0.1.0", + "@boxyhq/saml20": "1.1.4", "axios": "1.3.4", "jose": "4.13.1", "lodash": "4.17.21", @@ -79,4 +79,4 @@ "engines": { "node": ">=16" } -} \ No newline at end of file +} diff --git a/npm/src/index.ts b/npm/src/index.ts index 7d1ca391a..c150f065c 100644 --- a/npm/src/index.ts +++ b/npm/src/index.ts @@ -2,7 +2,6 @@ import type { IDirectorySyncController, JacksonOption } from './typings'; import DB from './db/db'; import defaultDb from './db/defaultDb'; import loadConnection from './loadConnection'; -import { init as metricsInit } from './opentelemetry/metrics'; import { AdminController } from './controller/admin'; import { ConnectionAPIController } from './controller/api'; import { OAuthController } from './controller/oauth'; @@ -73,8 +72,6 @@ export const controllers = async ( }> => { opts = defaultOpts(opts); - metricsInit(); - const db = await DB.new(opts.db); const connectionStore = db.store('saml:config'); diff --git a/npm/src/opentelemetry/metrics.ts b/npm/src/opentelemetry/metrics.ts index 2306aac76..c5436ef23 100644 --- a/npm/src/opentelemetry/metrics.ts +++ b/npm/src/opentelemetry/metrics.ts @@ -1,43 +1,52 @@ -import { metrics } from '@opentelemetry/api'; +import { incrementCounter } from '@boxyhq/metrics'; -let meter = metrics.getMeterProvider().getMeter('jackson'); -let counters; +const METER = 'jackson'; -const increment = (action: string) => { - const counter = counters[action]; - if (counter) { - counter.add(1); +const counters = { + createConnection: () => + incrementCounter({ + meter: METER, + name: 'jackson.connection.create', + counterOptions: { description: 'Number of IdP connection create requests' }, + }), + getConnections: () => + incrementCounter({ + meter: METER, + name: 'jackson.connection.get', + counterOptions: { description: 'Number of IdP connections get requests' }, + }), + deleteConnections: () => + incrementCounter({ + meter: METER, + name: 'jackson.connection.delete', + counterOptions: { description: 'Number of IdP connections delete requests' }, + }), + oauthAuthorize: () => + incrementCounter({ + meter: METER, + name: 'jackson.oauth.authorize', + counterOptions: { description: 'Number of oauth authorize requests' }, + }), + oauthToken: () => + incrementCounter({ + meter: METER, + name: 'jackson.oauth.token', + counterOptions: { description: 'Number of oauth token requests' }, + }), + + oauthUserInfo: () => + incrementCounter({ + meter: METER, + name: 'jackson.oauth.userinfo', + counterOptions: { description: 'Number of oauth user info requests' }, + }), +}; + +const increment = (action: keyof typeof counters) => { + const counterIncrement = counters[action]; + if (typeof counterIncrement === 'function') { + counterIncrement(); } }; -const init = () => { - meter = metrics.getMeterProvider().getMeter('jackson'); - - counters = { - createConnection: meter.createCounter('jackson.connection.create', { - description: 'Number of IdP connection create requests', - }), - - getConnections: meter.createCounter('jackson.connection.get', { - description: 'Number of IdP connections get requests', - }), - - deleteConnections: meter.createCounter('jackson.connection.delete', { - description: 'Number of IdP connections delete requests', - }), - - oauthAuthorize: meter.createCounter('jackson.oauth.authorize', { - description: 'Number of oauth authorize requests', - }), - - oauthToken: meter.createCounter('jackson.oauth.token', { - description: 'Number of oauth token requests', - }), - - oauthUserInfo: meter.createCounter('jackson.oauth.userinfo', { - description: 'Number of oauth user info requests', - }), - }; -}; - -export { increment, init }; +export { increment }; diff --git a/package-lock.json b/package-lock.json index cb4de6799..cd15efb15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { + "@boxyhq/metrics": "0.1.0", "@boxyhq/react-ui": "file:sdk/ui/react", "@boxyhq/saml-jackson": "file:npm", "@heroicons/react": "2.0.16", @@ -2813,6 +2814,19 @@ "resolved": "https://registry.npmjs.org/@boxyhq/error-code-mnemonic/-/error-code-mnemonic-0.1.1.tgz", "integrity": "sha512-NmO111OG8GQDE8W/+uSREb67YSqnY2N/tHykGeFoIZc9Leher+lW+jN4U1OXzlc66hwB8yO7WRu2cbYsAKsi9g==" }, + "node_modules/@boxyhq/metrics": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@boxyhq/metrics/-/metrics-0.1.0.tgz", + "integrity": "sha512-ndb9fFe9KQsIrSCIyJj+2ryJVH2YVQt4OltHAT+xqmeLRmkM1f7ngezxCKK9Dn37mMPz8URnT1CHS3sCKQPmPw==", + "dependencies": { + "@opentelemetry/api": "1.4.1", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.37.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.37.0", + "@opentelemetry/resources": "1.11.0", + "@opentelemetry/sdk-metrics": "1.11.0", + "@opentelemetry/semantic-conventions": "1.11.0" + } + }, "node_modules/@boxyhq/react-ui": { "resolved": "sdk/ui/react", "link": true @@ -17858,8 +17872,8 @@ "@aws-sdk/credential-providers": "3.300.0", "@aws-sdk/util-dynamodb": "3.299.0", "@boxyhq/error-code-mnemonic": "0.1.1", + "@boxyhq/metrics": "0.1.0", "@boxyhq/saml20": "1.1.4", - "@opentelemetry/api": "1.4.1", "axios": "1.3.4", "jose": "4.13.1", "lodash": "4.17.21", diff --git a/package.json b/package.json index c74ed3db1..d37e804e8 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "prebuild": "mkdirp public/terminus && (cp node_modules/blockly/media/sprites.png public/terminus || copy .\\node_modules\\blockly\\media\\sprites.png .\\public\\terminus)" }, "dependencies": { + "@boxyhq/metrics": "0.1.0", "@boxyhq/react-ui": "file:sdk/ui/react", "@boxyhq/saml-jackson": "file:npm", "@heroicons/react": "2.0.16", @@ -105,4 +106,4 @@ "engines": { "node": ">=18.14.2" } -} \ No newline at end of file +}