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
This commit is contained in:
Aswin V 2023-04-08 22:19:57 +05:30 committed by GitHub
parent e1c5f4e3eb
commit 8c66b46ce7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 399 additions and 88 deletions

View File

@ -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 });

330
npm/package-lock.json generated
View File

@ -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",

View File

@ -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"
}
}
}

View File

@ -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');

View File

@ -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 };

16
package-lock.json generated
View File

@ -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",

View File

@ -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"
}
}
}