From fe03683f0ce97c491f450f38f42b57351d845d2a Mon Sep 17 00:00:00 2001 From: Vinod Kiran Date: Fri, 8 Nov 2024 05:30:43 +0530 Subject: [PATCH] FEATURE:: Support for metrics collection - Prometheus and Open Telemetry (#3420) * adding support for prometheus and grafana * open telemetry * lint fixes * missing counter and telemetry standardization --------- Co-authored-by: Henry --- docker/.env.example | 13 + .../grafana/grafana.dashboard.app.json.txt | 639 ++++++++ .../grafana/grafana.dashboard.server.json.txt | 1017 +++++++++++++ metrics/otel/compose.yaml | 15 + metrics/otel/otel.config.yml | 72 + metrics/prometheus/prometheus.config.yml | 9 + .../PostgresRecordManager/README.md | 18 +- .../nodes/vectorstores/Postgres/README.md | 20 +- packages/server/.env.example | 15 +- packages/server/package.json | 15 + packages/server/src/Interface.Metrics.ts | 25 + packages/server/src/index.ts | 29 +- packages/server/src/metrics/OpenTelemetry.ts | 157 ++ packages/server/src/metrics/Prometheus.ts | 122 ++ .../server/src/services/assistants/index.ts | 2 + .../server/src/services/chatflows/index.ts | 6 + .../src/services/documentstore/index.ts | 16 +- .../server/src/services/telemetry/index.ts | 10 - packages/server/src/services/tools/index.ts | 2 + packages/server/src/utils/buildChatflow.ts | 21 +- packages/server/src/utils/upsertVector.ts | 18 +- pnpm-lock.yaml | 1306 ++++++++++++++++- 22 files changed, 3493 insertions(+), 54 deletions(-) create mode 100644 metrics/grafana/grafana.dashboard.app.json.txt create mode 100644 metrics/grafana/grafana.dashboard.server.json.txt create mode 100644 metrics/otel/compose.yaml create mode 100644 metrics/otel/otel.config.yml create mode 100644 metrics/prometheus/prometheus.config.yml create mode 100644 packages/server/src/Interface.Metrics.ts create mode 100644 packages/server/src/metrics/OpenTelemetry.ts create mode 100644 packages/server/src/metrics/Prometheus.ts delete mode 100644 packages/server/src/services/telemetry/index.ts diff --git a/docker/.env.example b/docker/.env.example index 2edb488d7..bb7f8c1a9 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -53,6 +53,19 @@ BLOB_STORAGE_PATH=/root/.flowise/storage # APIKEY_STORAGE_TYPE=json (json | db) # SHOW_COMMUNITY_NODES=true +###################### +# METRICS COLLECTION +####################### +# ENABLE_METRICS=false +# METRICS_PROVIDER=prometheus # prometheus | open_telemetry +# METRICS_INCLUDE_NODE_METRICS=true # default is true +# METRICS_SERVICE_NAME=FlowiseAI + +# ONLY NEEDED if METRICS_PROVIDER=open_telemetry +# METRICS_OPEN_TELEMETRY_METRIC_ENDPOINT=http://localhost:4318/v1/metrics +# METRICS_OPEN_TELEMETRY_PROTOCOL=http # http | grpc | proto (default is http) +# METRICS_OPEN_TELEMETRY_DEBUG=true # default is false + # Uncomment the following lines to enable global agent proxy # see https://www.npmjs.com/package/global-agent for more details # GLOBAL_AGENT_HTTP_PROXY=CorporateHttpProxyUrl diff --git a/metrics/grafana/grafana.dashboard.app.json.txt b/metrics/grafana/grafana.dashboard.app.json.txt new file mode 100644 index 000000000..d68c5ff36 --- /dev/null +++ b/metrics/grafana/grafana.dashboard.app.json.txt @@ -0,0 +1,639 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "enable": true, + "expr": "ALERTS", + "hide": false, + "iconColor": "rgba(255, 96, 96, 1)", + "limit": 100, + "name": "Alerts", + "showIn": 0, + "step": "10s", + "type": "alert" + } + ] + }, + "description": "Application metrics", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 3, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 11, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(rate(internal_predictions[1m])) by (status) * 60", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "B", + "useBackend": false + } + ], + "title": "Internal Predictions", + "type": "timeseries" + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 8 + }, + "id": 7, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "refId": "A" + } + ], + "title": "Throughput", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "max": 1, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "rgba(50, 172, 45, 0.97)", + "value": null + }, + { + "color": "rgba(237, 129, 40, 0.89)", + "value": 0.1 + }, + { + "color": "rgba(245, 54, 54, 0.9)" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 6, + "x": 0, + "y": 9 + }, + "hideTimeOverride": false, + "id": 6, + "maxDataPoints": 100, + "options": { + "colorMode": "value", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/^Value$/", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "sum(increase(http_request_duration_ms_count{code=~\"^5..$\"}[1m])) / sum(increase(http_request_duration_ms_count[1m]))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "", + "refId": "A", + "step": 20 + } + ], + "title": "Error rate", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "rpm" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 18, + "x": 6, + "y": 9 + }, + "id": 1, + "links": [ + { + "url": "/" + } + ], + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "sum(rate(http_request_duration_ms_count[1m])) by (service, route, method, code) * 60", + "format": "time_series", + "hide": false, + "intervalFactor": 2, + "legendFormat": "{{service}} - {{method}} {{route}} {{code}}", + "metric": "", + "refId": "A", + "step": 2 + } + ], + "title": "Throughput", + "type": "timeseries" + }, + { + "collapsed": true, + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 16 + }, + "id": 8, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 4, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "histogram_quantile(0.5, sum(rate(http_request_duration_ms_bucket[1m])) by (le, service, route, method))", + "format": "time_series", + "intervalFactor": 2, + "legendFormat": "{{service}} - {{method}} {{route}}", + "refId": "A", + "step": 2 + } + ], + "title": "Median Response Time", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ms" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 24, + "x": 0, + "y": 24 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_ms_bucket[1m])) by (le, service, route, method))", + "format": "time_series", + "interval": "", + "intervalFactor": 2, + "legendFormat": "{{service}} - {{method}} {{route}}", + "refId": "A", + "step": 2 + } + ], + "title": "95th Response Time", + "type": "timeseries" + } + ], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "refId": "A" + } + ], + "title": "Response time", + "type": "row" + }, + { + "collapsed": false, + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 17 + }, + "id": 10, + "panels": [], + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "refId": "A" + } + ], + "title": "Business", + "type": "row" + } + ], + "refresh": "10s", + "schemaVersion": 39, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "browser", + "title": "FlowiseAI - Custom Metrics", + "uid": "dds4pojnfec5cc", + "version": 8, + "weekStart": "" +} \ No newline at end of file diff --git a/metrics/grafana/grafana.dashboard.server.json.txt b/metrics/grafana/grafana.dashboard.server.json.txt new file mode 100644 index 000000000..20e8ba79e --- /dev/null +++ b/metrics/grafana/grafana.dashboard.server.json.txt @@ -0,0 +1,1017 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "node.js prometheus client basic metrics", + "editable": true, + "fiscalYearStartMonth": 0, + "gnetId": 11159, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 10, + "x": 0, + "y": 0 + }, + "id": 6, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "irate(process_cpu_user_seconds_total{instance=~\"$instance\"}[2m]) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "User CPU - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "irate(process_cpu_system_seconds_total{instance=~\"$instance\"}[2m]) * 100", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Sys CPU - {{instance}}", + "refId": "B" + } + ], + "title": "Process CPU Usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "s" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 9, + "x": 10, + "y": 0 + }, + "id": 8, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_eventloop_lag_seconds{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Event Loop Lag", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "description": "", + "fieldConfig": { + "defaults": { + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 5, + "x": 19, + "y": 0 + }, + "id": 2, + "interval": "", + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "none", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "mean" + ], + "fields": "/^v22\\.3\\.0$/", + "values": false + }, + "showPercentChange": false, + "textMode": "name", + "wideLayout": true + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "disableTextWrap": false, + "editorMode": "code", + "expr": "sum(nodejs_version_info{instance=~\"$instance\"}) by (version)", + "fullMetaSearch": false, + "hide": false, + "includeNullMetadata": true, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A", + "useBackend": false + } + ], + "title": "Node.js Version", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "#F2495C", + "mode": "fixed" + }, + "mappings": [ + { + "options": { + "match": "null", + "result": { + "text": "N/A" + } + }, + "type": "special" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 4, + "w": 5, + "x": 19, + "y": 3 + }, + "id": 4, + "maxDataPoints": 100, + "options": { + "colorMode": "none", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "horizontal", + "percentChangeColorMode": "standard", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showPercentChange": false, + "textMode": "auto", + "wideLayout": true + }, + "pluginVersion": "11.1.0", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "sum(changes(process_start_time_seconds{instance=~\"$instance\"}[1m]))", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "{{instance}}", + "refId": "A" + } + ], + "title": "Process Restart Times", + "type": "stat" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 16, + "x": 0, + "y": 7 + }, + "id": 7, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "process_resident_memory_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Process Memory - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_heap_size_total_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Total - {{instance}}", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_heap_size_used_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Used - {{instance}}", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_external_memory_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "External Memory - {{instance}}", + "refId": "D" + } + ], + "title": "Process Memory Usage", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "short" + }, + "overrides": [] + }, + "gridPos": { + "h": 7, + "w": 8, + "x": 16, + "y": 7 + }, + "id": 9, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_active_handles_total{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Active Handler - {{instance}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_active_requests_total{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Active Request - {{instance}}", + "refId": "B" + } + ], + "title": "Active Handlers/Requests Total", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 14 + }, + "id": 10, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_heap_space_size_total_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Total - {{instance}} - {{space}}", + "refId": "A" + } + ], + "title": "Heap Total Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 14 + }, + "id": 11, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_heap_space_size_used_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Used - {{instance}} - {{space}}", + "refId": "A" + } + ], + "title": "Heap Used Detail", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "bytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 14 + }, + "id": 12, + "options": { + "legend": { + "calcs": [ + "mean", + "lastNotNull", + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "multi", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "expr": "nodejs_heap_space_size_available_bytes{instance=~\"$instance\"}", + "format": "time_series", + "intervalFactor": 1, + "legendFormat": "Heap Used - {{instance}} - {{space}}", + "refId": "A" + } + ], + "title": "Heap Available Detail", + "type": "timeseries" + } + ], + "schemaVersion": 39, + "tags": [ + "nodejs" + ], + "templating": { + "list": [ + { + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "prometheus", + "uid": "cds4j1ybfuhogb" + }, + "definition": "label_values(nodejs_version_info, instance)", + "hide": 0, + "includeAll": true, + "label": "instance", + "multi": true, + "name": "instance", + "options": [], + "query": "label_values(nodejs_version_info, instance)", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 1, + "tagValuesQuery": "", + "tagsQuery": "", + "type": "query", + "useTags": false + } + ] + }, + "time": { + "from": "now-1h", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m", + "15m", + "30m", + "1h", + "2h", + "1d" + ], + "time_options": [ + "5m", + "15m", + "1h", + "6h", + "12h", + "24h", + "2d", + "7d", + "30d" + ] + }, + "timezone": "", + "title": "FlowiseAI Server", + "uid": "PTSqcpJWk", + "version": 5, + "weekStart": "" +} \ No newline at end of file diff --git a/metrics/otel/compose.yaml b/metrics/otel/compose.yaml new file mode 100644 index 000000000..4567588ff --- /dev/null +++ b/metrics/otel/compose.yaml @@ -0,0 +1,15 @@ +version: "2" +services: + otel-collector: + image: otel/opentelemetry-collector-contrib + command: ["--config=/etc/otelcol-contrib/config.yaml", "--feature-gates=-exporter.datadogexporter.DisableAPMStats", "${OTELCOL_ARGS}"] + volumes: + - ./otel.config.yml:/etc/otelcol-contrib/config.yaml + ports: + - 1888:1888 # pprof extension + - 8888:8888 # Prometheus metrics exposed by the Collector + - 8889:8889 # Prometheus exporter metrics + - 13133:13133 # health_check extension + - 4317:4317 # OTLP gRPC receiver + - 4318:4318 # OTLP http receiver + - 55679:55679 # zpages extension diff --git a/metrics/otel/otel.config.yml b/metrics/otel/otel.config.yml new file mode 100644 index 000000000..a77c6cb3b --- /dev/null +++ b/metrics/otel/otel.config.yml @@ -0,0 +1,72 @@ +receivers: + otlp: + protocols: + http: + endpoint: 0.0.0.0:4318 + grpc: + endpoint: 0.0.0.0:4317 + # The hostmetrics receiver is required to get correct infrastructure metrics in Datadog. + hostmetrics: + collection_interval: 10s + scrapers: + paging: + metrics: + system.paging.utilization: + enabled: true + cpu: + metrics: + system.cpu.utilization: + enabled: true + disk: + filesystem: + metrics: + system.filesystem.utilization: + enabled: true + load: + memory: + network: + + # The prometheus receiver scrapes metrics needed for the OpenTelemetry Collector Dashboard. + prometheus: + config: + scrape_configs: + - job_name: 'otelcol' + scrape_interval: 10s + static_configs: + - targets: ['0.0.0.0:8888'] + + filelog: + include_file_path: true + poll_interval: 10s + include: + - /var/log/**/*example*/*.log + +processors: + batch: + send_batch_max_size: 100 + send_batch_size: 10 + timeout: 10s + +connectors: + datadog/connector: + +exporters: + datadog/exporter: + api: + site: us5.datadoghq.com + key: "4f5778c6cf5381df89606004b4cacbc9" + +service: + pipelines: + metrics: + receivers: [datadog/connector, hostmetrics, prometheus, otlp] + processors: [batch] + exporters: [datadog/exporter] + traces: + receivers: [otlp] + processors: [batch] + exporters: [datadog/connector, datadog/exporter] + logs: + receivers: [otlp, filelog] + processors: [batch] + exporters: [datadog/exporter] \ No newline at end of file diff --git a/metrics/prometheus/prometheus.config.yml b/metrics/prometheus/prometheus.config.yml new file mode 100644 index 000000000..82ae71fc7 --- /dev/null +++ b/metrics/prometheus/prometheus.config.yml @@ -0,0 +1,9 @@ +global: + scrape_interval: 5s +scrape_configs: + - job_name: "FlowiseAI" + static_configs: + - targets: ["localhost:8080","localhost:3000"] + + metrics_path: /api/v1/metrics/ + scheme: http \ No newline at end of file diff --git a/packages/components/nodes/recordmanager/PostgresRecordManager/README.md b/packages/components/nodes/recordmanager/PostgresRecordManager/README.md index b2a73ded6..4c2c592f7 100644 --- a/packages/components/nodes/recordmanager/PostgresRecordManager/README.md +++ b/packages/components/nodes/recordmanager/PostgresRecordManager/README.md @@ -4,15 +4,15 @@ Postgres Record Manager integration for Flowise ## 🌱 Env Variables -| Variable | Description | Type | Default | -| ---------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | -| POSTGRES_RECORDMANAGER_HOST | Default `host` for Postgres Record Manager | String | | -| POSTGRES_RECORDMANAGER_PORT | Default `port` for Postgres Record Manager | Number | 5432 | -| POSTGRES_RECORDMANAGER_USER | Default `user` for Postgres Record Manager | String | | -| POSTGRES_RECORDMANAGER_PASSWORD | Default `password` for Postgres Record Manager | String | | -| POSTGRES_RECORDMANAGER_DATABASE | Default `database` for Postgres Record Manager | String | | -| POSTGRES_RECORDMANAGER_TABLE_NAME | Default `tableName` for Postgres Record Manager | String | upsertion_records | +| Variable | Description | Type | Default | +| --------------------------------- | ----------------------------------------------- | ------ | ----------------- | +| POSTGRES_RECORDMANAGER_HOST | Default `host` for Postgres Record Manager | String | | +| POSTGRES_RECORDMANAGER_PORT | Default `port` for Postgres Record Manager | Number | 5432 | +| POSTGRES_RECORDMANAGER_USER | Default `user` for Postgres Record Manager | String | | +| POSTGRES_RECORDMANAGER_PASSWORD | Default `password` for Postgres Record Manager | String | | +| POSTGRES_RECORDMANAGER_DATABASE | Default `database` for Postgres Record Manager | String | | +| POSTGRES_RECORDMANAGER_TABLE_NAME | Default `tableName` for Postgres Record Manager | String | upsertion_records | ## License -Source code in this repository is made available under the [Apache License Version 2.0](https://github.com/FlowiseAI/Flowise/blob/master/LICENSE.md). \ No newline at end of file +Source code in this repository is made available under the [Apache License Version 2.0](https://github.com/FlowiseAI/Flowise/blob/master/LICENSE.md). diff --git a/packages/components/nodes/vectorstores/Postgres/README.md b/packages/components/nodes/vectorstores/Postgres/README.md index 84e31b0a7..2f85ada23 100644 --- a/packages/components/nodes/vectorstores/Postgres/README.md +++ b/packages/components/nodes/vectorstores/Postgres/README.md @@ -4,16 +4,16 @@ Postgres Vector Store integration for Flowise ## 🌱 Env Variables -| Variable | Description | Type | Default | -| ---------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------------- | -| POSTGRES_VECTORSTORE_HOST | Default `host` for Postgres Vector Store | String | | -| POSTGRES_VECTORSTORE_PORT | Default `port` for Postgres Vector Store | Number | 5432 | -| POSTGRES_VECTORSTORE_USER | Default `user` for Postgres Vector Store | String | | -| POSTGRES_VECTORSTORE_PASSWORD | Default `password` for Postgres Vector Store | String | | -| POSTGRES_VECTORSTORE_DATABASE | Default `database` for Postgres Vector Store | String | | -| POSTGRES_VECTORSTORE_TABLE_NAME | Default `tableName` for Postgres Vector Store | String | documents | -| POSTGRES_VECTORSTORE_CONTENT_COLUMN_NAME | Default `contentColumnName` for Postgres Vector Store | String | pageContent | +| Variable | Description | Type | Default | +| ---------------------------------------- | ----------------------------------------------------- | ------ | ----------- | +| POSTGRES_VECTORSTORE_HOST | Default `host` for Postgres Vector Store | String | | +| POSTGRES_VECTORSTORE_PORT | Default `port` for Postgres Vector Store | Number | 5432 | +| POSTGRES_VECTORSTORE_USER | Default `user` for Postgres Vector Store | String | | +| POSTGRES_VECTORSTORE_PASSWORD | Default `password` for Postgres Vector Store | String | | +| POSTGRES_VECTORSTORE_DATABASE | Default `database` for Postgres Vector Store | String | | +| POSTGRES_VECTORSTORE_TABLE_NAME | Default `tableName` for Postgres Vector Store | String | documents | +| POSTGRES_VECTORSTORE_CONTENT_COLUMN_NAME | Default `contentColumnName` for Postgres Vector Store | String | pageContent | ## License -Source code in this repository is made available under the [Apache License Version 2.0](https://github.com/FlowiseAI/Flowise/blob/master/LICENSE.md). \ No newline at end of file +Source code in this repository is made available under the [Apache License Version 2.0](https://github.com/FlowiseAI/Flowise/blob/master/LICENSE.md). diff --git a/packages/server/.env.example b/packages/server/.env.example index 47148a423..29d8f438f 100644 --- a/packages/server/.env.example +++ b/packages/server/.env.example @@ -53,8 +53,21 @@ PORT=3000 # APIKEY_STORAGE_TYPE=json (json | db) # SHOW_COMMUNITY_NODES=true +###################### +# METRICS COLLECTION +####################### +# ENABLE_METRICS=false +# METRICS_PROVIDER=prometheus # prometheus | open_telemetry +# METRICS_INCLUDE_NODE_METRICS=true # default is true +# METRICS_SERVICE_NAME=FlowiseAI + +# ONLY NEEDED if METRICS_PROVIDER=open_telemetry +# METRICS_OPEN_TELEMETRY_METRIC_ENDPOINT=http://localhost:4318/v1/metrics +# METRICS_OPEN_TELEMETRY_PROTOCOL=http # http | grpc | proto (default is http) +# METRICS_OPEN_TELEMETRY_DEBUG=true # default is false + # Uncomment the following lines to enable global agent proxy # see https://www.npmjs.com/package/global-agent for more details # GLOBAL_AGENT_HTTP_PROXY=CorporateHttpProxyUrl # GLOBAL_AGENT_HTTPS_PROXY=CorporateHttpsProxyUrl -# GLOBAL_AGENT_NO_PROXY=ExceptionHostsToBypassProxyIfNeeded \ No newline at end of file +# GLOBAL_AGENT_NO_PROXY=ExceptionHostsToBypassProxyIfNeeded diff --git a/packages/server/package.json b/packages/server/package.json index 2d22574ca..05533e5a0 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -55,6 +55,20 @@ "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@oclif/core": "^1.13.10", + "@opentelemetry/api": "^1.3.0", + "@opentelemetry/core": "1.27.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.54.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.54.0", + "@opentelemetry/exporter-metrics-otlp-proto": "0.54.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.54.0", + "@opentelemetry/exporter-trace-otlp-http": "0.54.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.54.0", + "@opentelemetry/resources": "1.27.0", + "@opentelemetry/sdk-metrics": "1.27.0", + "@opentelemetry/sdk-trace-base": "1.27.0", + "@opentelemetry/semantic-conventions": "1.27.0", + "@opentelemetry/auto-instrumentations-node": "^0.52.0", + "@opentelemetry/sdk-node": "^0.54.0", "@types/lodash": "^4.14.202", "@types/uuid": "^9.0.7", "async-mutex": "^0.4.0", @@ -79,6 +93,7 @@ "openai": "^4.57.3", "pg": "^8.11.1", "posthog-node": "^3.5.0", + "prom-client": "^15.1.3", "reflect-metadata": "^0.1.13", "sanitize-html": "^2.11.0", "socket.io": "^4.6.1", diff --git a/packages/server/src/Interface.Metrics.ts b/packages/server/src/Interface.Metrics.ts new file mode 100644 index 000000000..e437631cc --- /dev/null +++ b/packages/server/src/Interface.Metrics.ts @@ -0,0 +1,25 @@ +export interface IMetricsProvider { + getName(): string + initializeCounters(): void + setupMetricsEndpoint(): void + incrementCounter(counter: FLOWISE_METRIC_COUNTERS, payload: any): void +} + +export enum FLOWISE_COUNTER_STATUS { + SUCCESS = 'success', + FAILURE = 'failure' +} + +export enum FLOWISE_METRIC_COUNTERS { + CHATFLOW_CREATED = 'chatflow_created', + AGENTFLOW_CREATED = 'agentflow_created', + ASSISTANT_CREATED = 'assistant_created', + TOOL_CREATED = 'tool_created', + VECTORSTORE_UPSERT = 'vector_upserted', + + CHATFLOW_PREDICTION_INTERNAL = 'chatflow_prediction_internal', + CHATFLOW_PREDICTION_EXTERNAL = 'chatflow_prediction_external', + + AGENTFLOW_PREDICTION_INTERNAL = 'agentflow_prediction_internal', + AGENTFLOW_PREDICTION_EXTERNAL = 'agentflow_prediction_external' +} diff --git a/packages/server/src/index.ts b/packages/server/src/index.ts index a5fb40b9f..3b6742f6f 100644 --- a/packages/server/src/index.ts +++ b/packages/server/src/index.ts @@ -22,6 +22,9 @@ import flowiseApiV1Router from './routes' import errorHandlerMiddleware from './middlewares/errors' import { SSEStreamer } from './utils/SSEStreamer' import { validateAPIKey } from './utils/validateKey' +import { IMetricsProvider } from './Interface.Metrics' +import { Prometheus } from './metrics/Prometheus' +import { OpenTelemetry } from './metrics/OpenTelemetry' import 'global-agent/bootstrap' declare global { @@ -40,6 +43,7 @@ export class App { telemetry: Telemetry AppDataSource: DataSource = getDataSource() sseStreamer: SSEStreamer + metricsProvider: IMetricsProvider constructor() { this.app = express() @@ -138,7 +142,8 @@ export class App { '/api/v1/ip', '/api/v1/ping', '/api/v1/version', - '/api/v1/attachments' + '/api/v1/attachments', + '/api/v1/metrics' ] const URL_CASE_INSENSITIVE_REGEX: RegExp = /\/api\/v1\//i const URL_CASE_SENSITIVE_REGEX: RegExp = /\/api\/v1\// @@ -204,6 +209,28 @@ export class App { }) } + if (process.env.ENABLE_METRICS === 'true') { + switch (process.env.METRICS_PROVIDER) { + // default to prometheus + case 'prometheus': + case undefined: + this.metricsProvider = new Prometheus(this.app) + break + case 'open_telemetry': + this.metricsProvider = new OpenTelemetry(this.app) + break + // add more cases for other metrics providers here + } + if (this.metricsProvider) { + await this.metricsProvider.initializeCounters() + logger.info(`📊 [server]: Metrics Provider [${this.metricsProvider.getName()}] has been initialized!`) + } else { + logger.error( + "❌ [server]: Metrics collection is enabled, but failed to initialize provider (valid values are 'prometheus' or 'open_telemetry'." + ) + } + } + this.app.use('/api/v1', flowiseApiV1Router) this.sseStreamer = new SSEStreamer(this.app) diff --git a/packages/server/src/metrics/OpenTelemetry.ts b/packages/server/src/metrics/OpenTelemetry.ts new file mode 100644 index 000000000..7686225db --- /dev/null +++ b/packages/server/src/metrics/OpenTelemetry.ts @@ -0,0 +1,157 @@ +import { FLOWISE_METRIC_COUNTERS, IMetricsProvider } from '../Interface.Metrics' +import { Resource } from '@opentelemetry/resources' +import { ATTR_SERVICE_NAME, ATTR_SERVICE_VERSION } from '@opentelemetry/semantic-conventions' +import { MeterProvider, PeriodicExportingMetricReader, Histogram } from '@opentelemetry/sdk-metrics' +import { diag, DiagLogLevel, DiagConsoleLogger, Attributes, Counter } from '@opentelemetry/api' +import { getVersion } from 'flowise-components' +import express from 'express' + +export class OpenTelemetry implements IMetricsProvider { + private app: express.Application + private resource: Resource + private otlpMetricExporter: any + // private otlpTraceExporter: any + // private tracerProvider: NodeTracerProvider + private metricReader: PeriodicExportingMetricReader + private meterProvider: MeterProvider + + // Map to hold all counters and histograms + private counters = new Map() + private httpRequestCounter: Counter + private httpRequestDuration: any + + constructor(app: express.Application) { + this.app = app + + if (!process.env.METRICS_OPEN_TELEMETRY_METRIC_ENDPOINT) { + throw new Error('METRICS_OPEN_TELEMETRY_METRIC_ENDPOINT is not defined') + } + + if (process.env.METRICS_OPEN_TELEMETRY_DEBUG === 'true') { + diag.setLogger(new DiagConsoleLogger(), DiagLogLevel.DEBUG) + } + } + + public getName(): string { + return 'OpenTelemetry' + } + + async initializeCounters(): Promise { + // Define the resource with the service name for trace grouping + const flowiseVersion = await getVersion() + + this.resource = new Resource({ + [ATTR_SERVICE_NAME]: process.env.METRICS_SERVICE_NAME || 'FlowiseAI', + [ATTR_SERVICE_VERSION]: flowiseVersion.version // Version as a label + }) + + const metricProtocol = process.env.METRICS_OPEN_TELEMETRY_PROTOCOL || 'http' // Default to 'http' + // Conditionally import the correct OTLP exporters based on protocol + let OTLPMetricExporter + if (metricProtocol === 'http') { + OTLPMetricExporter = require('@opentelemetry/exporter-metrics-otlp-http').OTLPMetricExporter + } else if (metricProtocol === 'grpc') { + OTLPMetricExporter = require('@opentelemetry/exporter-metrics-otlp-grpc').OTLPMetricExporter + } else if (metricProtocol === 'proto') { + OTLPMetricExporter = require('@opentelemetry/exporter-metrics-otlp-proto').OTLPMetricExporter + } else { + console.error('Invalid METRICS_OPEN_TELEMETRY_PROTOCOL specified. Please set it to "http", "grpc", or "proto".') + process.exit(1) // Exit if invalid protocol type is specified + } + + this.otlpMetricExporter = new OTLPMetricExporter({ + url: process.env.METRICS_OPEN_TELEMETRY_METRIC_ENDPOINT // OTLP endpoint for metrics + }) + + this.metricReader = new PeriodicExportingMetricReader({ + exporter: this.otlpMetricExporter, + exportIntervalMillis: 5000 // Export metrics every 5 seconds + }) + this.meterProvider = new MeterProvider({ resource: this.resource, readers: [this.metricReader] }) + + const meter = this.meterProvider.getMeter('flowise-metrics') + // look at the FLOWISE_COUNTER enum in Interface.Metrics.ts and get all values + // for each counter in the enum, create a new promClient.Counter and add it to the registry + const enumEntries = Object.entries(FLOWISE_METRIC_COUNTERS) + enumEntries.forEach(([name, value]) => { + // derive proper counter name from the enum value (chatflow_created = Chatflow Created) + const properCounterName: string = name.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()) + this.counters.set( + value, + meter.createCounter(value, { + description: properCounterName + }) + ) + }) + + // in addition to the enum counters, add a few more custom counters + + const versionGuage = meter.createGauge('flowise_version', { + description: 'Flowise version' + }) + // remove the last dot from the version string, e.g. 2.1.3 -> 2.13 (guage needs a number - float) + const formattedVersion = flowiseVersion.version.replace(/\.(\d+)$/, '$1') + versionGuage.record(parseFloat(formattedVersion)) + + // Counter for HTTP requests with method, path, and status as labels + this.httpRequestCounter = meter.createCounter('http_requests_total', { + description: 'Counts the number of HTTP requests received' + }) + + // Histogram to measure HTTP request duration in milliseconds + this.httpRequestDuration = meter.createHistogram('http_request_duration_ms', { + description: 'Records the duration of HTTP requests in ms' + }) + } + + // Function to record HTTP request duration + private recordHttpRequestDuration(durationMs: number, method: string, path: string, status: number) { + this.httpRequestDuration.record(durationMs, { + method, + path, + status: status.toString() + }) + } + + // Function to record HTTP requests with specific labels + private recordHttpRequest(method: string, path: string, status: number) { + this.httpRequestCounter.add(1, { + method, + path, + status: status.toString() + }) + } + + async setupMetricsEndpoint(): Promise { + // Graceful shutdown for telemetry data flushing + process.on('SIGTERM', async () => { + await this.metricReader.shutdown() + await this.meterProvider.shutdown() + }) + + // Runs before each requests + this.app.use((req, res, next) => { + res.locals.startEpoch = Date.now() + next() + }) + + // Runs after each requests + this.app.use((req, res, next) => { + res.on('finish', async () => { + if (res.locals.startEpoch) { + const responseTimeInMs = Date.now() - res.locals.startEpoch + this.recordHttpRequest(req.method, req.path, res.statusCode) + this.recordHttpRequestDuration(responseTimeInMs, req.method, req.path, res.statusCode) + } + }) + next() + }) + } + + async incrementCounter(counter: string, payload: any): Promise { + // Increment OpenTelemetry counter with the payload + if (this.counters.has(counter)) { + ;(this.counters.get(counter) as Counter).add(1, payload) + } + } +} diff --git a/packages/server/src/metrics/Prometheus.ts b/packages/server/src/metrics/Prometheus.ts new file mode 100644 index 000000000..15eaafeac --- /dev/null +++ b/packages/server/src/metrics/Prometheus.ts @@ -0,0 +1,122 @@ +import { FLOWISE_METRIC_COUNTERS, IMetricsProvider } from '../Interface.Metrics' +import express from 'express' +import promClient, { Counter, Histogram, Registry } from 'prom-client' +import { getVersion } from 'flowise-components' + +export class Prometheus implements IMetricsProvider { + private app: express.Application + private readonly register: Registry + private counters: Map | promClient.Gauge | promClient.Histogram> + private requestCounter: Counter + private httpRequestDurationMicroseconds: Histogram + + constructor(app: express.Application) { + this.app = app + this.register = new promClient.Registry() + } + + public getName(): string { + return 'Prometheus' + } + + async initializeCounters(): Promise { + const serviceName: string = process.env.METRICS_SERVICE_NAME || 'FlowiseAI' + this.register.setDefaultLabels({ + app: serviceName + }) + + // look at the FLOWISE_COUNTER enum in Interface.Metrics.ts and get all values + // for each counter in the enum, create a new promClient.Counter and add it to the registry + this.counters = new Map>() + const enumEntries = Object.entries(FLOWISE_METRIC_COUNTERS) + enumEntries.forEach(([name, value]) => { + // derive proper counter name from the enum value (chatflow_created = Chatflow Created) + const properCounterName: string = name.replace(/_/g, ' ').replace(/\b\w/g, (l) => l.toUpperCase()) + this.counters.set( + value, + new promClient.Counter({ + name: value, + help: `Total number of ${properCounterName}`, + labelNames: ['status'] + }) + ) + }) + + // in addition to the enum counters, add a few more custom counters + // version, http_request_duration_ms, http_requests_total + const versionGaugeCounter = new promClient.Gauge({ + name: 'flowise_version_info', + help: 'Flowise version info.', + labelNames: ['version'] + }) + + const { version } = await getVersion() + versionGaugeCounter.set({ version: 'v' + version }, 1) + this.counters.set('flowise_version', versionGaugeCounter) + + this.httpRequestDurationMicroseconds = new promClient.Histogram({ + name: 'http_request_duration_ms', + help: 'Duration of HTTP requests in ms', + labelNames: ['method', 'route', 'code'], + buckets: [1, 5, 15, 50, 100, 200, 300, 400, 500] // buckets for response time from 0.1ms to 500ms + }) + this.counters.set('http_request_duration_ms', this.httpRequestDurationMicroseconds) + + this.requestCounter = new Counter({ + name: 'http_requests_total', + help: 'Total number of HTTP requests', + labelNames: ['method', 'path', 'status'] + }) + this.counters.set('http_requests_total', this.requestCounter) + + this.registerMetrics() + await this.setupMetricsEndpoint() + } + + async setupMetricsEndpoint() { + // Add Prometheus middleware to the app + this.app.use('/api/v1/metrics', async (req, res) => { + res.set('Content-Type', this.register.contentType) + const currentMetrics = await this.register.metrics() + res.send(currentMetrics).end() + }) + + // Runs before each requests + this.app.use((req, res, next) => { + res.locals.startEpoch = Date.now() + next() + }) + + // Runs after each requests + this.app.use((req, res, next) => { + res.on('finish', async () => { + if (res.locals.startEpoch) { + this.requestCounter.inc() + const responseTimeInMs = Date.now() - res.locals.startEpoch + this.httpRequestDurationMicroseconds + .labels(req.method, req.baseUrl, res.statusCode.toString()) + .observe(responseTimeInMs) + } + }) + next() + }) + } + + public incrementCounter(counter: FLOWISE_METRIC_COUNTERS, payload: any) { + // increment the counter with the payload + if (this.counters.has(counter)) { + ;(this.counters.get(counter) as Counter).labels(payload).inc() + } + } + + private registerMetrics() { + if (process.env.METRICS_INCLUDE_NODE_METRICS !== 'false') { + // enable default metrics like CPU usage, memory usage, etc. + promClient.collectDefaultMetrics({ register: this.register }) + } + // Add our custom metrics to the registry + for (const counter of this.counters.values()) { + this.register.registerMetric(counter) + } + } +} diff --git a/packages/server/src/services/assistants/index.ts b/packages/server/src/services/assistants/index.ts index 10b176a36..976d2d7dc 100644 --- a/packages/server/src/services/assistants/index.ts +++ b/packages/server/src/services/assistants/index.ts @@ -8,6 +8,7 @@ import { decryptCredentialData, getAppVersion } from '../../utils' import { InternalFlowiseError } from '../../errors/internalFlowiseError' import { getErrorMessage } from '../../errors/utils' import { DeleteResult } from 'typeorm' +import { FLOWISE_METRIC_COUNTERS, FLOWISE_COUNTER_STATUS } from '../../Interface.Metrics' const createAssistant = async (requestBody: any): Promise => { try { @@ -111,6 +112,7 @@ const createAssistant = async (requestBody: any): Promise => { version: await getAppVersion(), assistantId: dbResponse.id }) + appServer.metricsProvider.incrementCounter(FLOWISE_METRIC_COUNTERS.ASSISTANT_CREATED, { status: FLOWISE_COUNTER_STATUS.SUCCESS }) return dbResponse } catch (error) { throw new InternalFlowiseError( diff --git a/packages/server/src/services/chatflows/index.ts b/packages/server/src/services/chatflows/index.ts index 4feff1590..6aed7e885 100644 --- a/packages/server/src/services/chatflows/index.ts +++ b/packages/server/src/services/chatflows/index.ts @@ -13,6 +13,7 @@ import { containsBase64File, updateFlowDataWithFilePaths } from '../../utils/fil import { getRunningExpressApp } from '../../utils/getRunningExpressApp' import { utilGetUploadsConfig } from '../../utils/getUploadsConfig' import logger from '../../utils/logger' +import { FLOWISE_METRIC_COUNTERS, FLOWISE_COUNTER_STATUS } from '../../Interface.Metrics' // Check if chatflow valid for streaming const checkIfChatflowIsValidForStreaming = async (chatflowId: string): Promise => { @@ -191,6 +192,11 @@ const saveChatflow = async (newChatFlow: ChatFlow): Promise => { chatflowId: dbResponse.id, flowGraph: getTelemetryFlowObj(JSON.parse(dbResponse.flowData)?.nodes, JSON.parse(dbResponse.flowData)?.edges) }) + appServer.metricsProvider.incrementCounter( + dbResponse?.type === 'MULTIAGENT' ? FLOWISE_METRIC_COUNTERS.AGENTFLOW_CREATED : FLOWISE_METRIC_COUNTERS.CHATFLOW_CREATED, + { status: FLOWISE_COUNTER_STATUS.SUCCESS } + ) + return dbResponse } catch (error) { throw new InternalFlowiseError( diff --git a/packages/server/src/services/documentstore/index.ts b/packages/server/src/services/documentstore/index.ts index d5ef3dd9e..4bf07e8ff 100644 --- a/packages/server/src/services/documentstore/index.ts +++ b/packages/server/src/services/documentstore/index.ts @@ -31,7 +31,7 @@ import { Document } from '@langchain/core/documents' import { App } from '../../index' import { UpsertHistory } from '../../database/entities/UpsertHistory' import { cloneDeep, omit } from 'lodash' -import telemetryService from '../telemetry' +import { FLOWISE_COUNTER_STATUS, FLOWISE_METRIC_COUNTERS } from '../../Interface.Metrics' const DOCUMENT_STORE_BASE_FOLDER = 'docustore' @@ -990,15 +990,13 @@ const _insertIntoVectorStoreWorkerThread = async (data: ICommonObject) => { await appServer.AppDataSource.getRepository(UpsertHistory).save(upsertHistoryItem) } - await telemetryService.createEvent({ - name: `vector_upserted`, - data: { - version: await getAppVersion(), - chatlowId: chatflowid, - type: ChatType.INTERNAL, - flowGraph: omit(indexResult['result'], ['totalKeys', 'addedDocs']) - } + await appServer.telemetry.sendTelemetry('vector_upserted', { + version: await getAppVersion(), + chatlowId: chatflowid, + type: ChatType.INTERNAL, + flowGraph: omit(indexResult['result'], ['totalKeys', 'addedDocs']) }) + appServer.metricsProvider.incrementCounter(FLOWISE_METRIC_COUNTERS.VECTORSTORE_UPSERT, { status: FLOWISE_COUNTER_STATUS.SUCCESS }) entity.status = DocumentStoreStatus.UPSERTED await appServer.AppDataSource.getRepository(DocumentStore).save(entity) diff --git a/packages/server/src/services/telemetry/index.ts b/packages/server/src/services/telemetry/index.ts deleted file mode 100644 index 4c77efd53..000000000 --- a/packages/server/src/services/telemetry/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { getRunningExpressApp } from '../../utils/getRunningExpressApp' - -const createEvent = async (eventInfo: any) => { - const appServer = getRunningExpressApp() - await appServer.telemetry.sendTelemetry(eventInfo.name, eventInfo.data) -} - -export default { - createEvent -} diff --git a/packages/server/src/services/tools/index.ts b/packages/server/src/services/tools/index.ts index dcfdc9499..1f1fac591 100644 --- a/packages/server/src/services/tools/index.ts +++ b/packages/server/src/services/tools/index.ts @@ -4,6 +4,7 @@ import { InternalFlowiseError } from '../../errors/internalFlowiseError' import { getErrorMessage } from '../../errors/utils' import { getAppVersion } from '../../utils' import { getRunningExpressApp } from '../../utils/getRunningExpressApp' +import { FLOWISE_METRIC_COUNTERS, FLOWISE_COUNTER_STATUS } from '../../Interface.Metrics' const createTool = async (requestBody: any): Promise => { try { @@ -17,6 +18,7 @@ const createTool = async (requestBody: any): Promise => { toolId: dbResponse.id, toolName: dbResponse.name }) + appServer.metricsProvider.incrementCounter(FLOWISE_METRIC_COUNTERS.TOOL_CREATED, { status: FLOWISE_COUNTER_STATUS.SUCCESS }) return dbResponse } catch (error) { throw new InternalFlowiseError(StatusCodes.INTERNAL_SERVER_ERROR, `Error: toolsService.createTool - ${getErrorMessage(error)}`) diff --git a/packages/server/src/utils/buildChatflow.ts b/packages/server/src/utils/buildChatflow.ts index e2d2db12b..fb271f7ab 100644 --- a/packages/server/src/utils/buildChatflow.ts +++ b/packages/server/src/utils/buildChatflow.ts @@ -55,6 +55,7 @@ import { buildAgentGraph } from './buildAgentGraph' import { getErrorMessage } from '../errors/utils' import { ChatMessage } from '../database/entities/ChatMessage' import { IAction } from 'flowise-components' +import { FLOWISE_METRIC_COUNTERS, FLOWISE_COUNTER_STATUS } from '../Interface.Metrics' /** * Build Chatflow @@ -62,8 +63,8 @@ import { IAction } from 'flowise-components' * @param {boolean} isInternal */ export const utilBuildChatflow = async (req: Request, isInternal: boolean = false): Promise => { + const appServer = getRunningExpressApp() try { - const appServer = getRunningExpressApp() const chatflowid = req.params.id const httpProtocol = req.get('x-forwarded-proto') || req.protocol @@ -493,6 +494,10 @@ export const utilBuildChatflow = async (req: Request, isInternal: boolean = fals flowGraph: getTelemetryFlowObj(nodes, edges) }) + appServer.metricsProvider.incrementCounter( + isInternal ? FLOWISE_METRIC_COUNTERS.CHATFLOW_PREDICTION_INTERNAL : FLOWISE_METRIC_COUNTERS.CHATFLOW_PREDICTION_EXTERNAL, + { status: FLOWISE_COUNTER_STATUS.SUCCESS } + ) // Prepare response // return the question in the response // this is used when input text is empty but question is in audio format @@ -507,6 +512,10 @@ export const utilBuildChatflow = async (req: Request, isInternal: boolean = fals return result } catch (e) { + appServer.metricsProvider.incrementCounter( + isInternal ? FLOWISE_METRIC_COUNTERS.CHATFLOW_PREDICTION_INTERNAL : FLOWISE_METRIC_COUNTERS.CHATFLOW_PREDICTION_EXTERNAL, + { status: FLOWISE_COUNTER_STATUS.FAILURE } + ) logger.error('[server]: Error:', e) if (e instanceof InternalFlowiseError && e.statusCode === StatusCodes.UNAUTHORIZED) { throw e @@ -533,8 +542,8 @@ const utilBuildAgentResponse = async ( shouldStreamResponse?: boolean, uploadedFilesContent?: string ) => { + const appServer = getRunningExpressApp() try { - const appServer = getRunningExpressApp() const streamResults = await buildAgentGraph( agentflow, chatId, @@ -599,6 +608,10 @@ const utilBuildAgentResponse = async ( type: isInternal ? ChatType.INTERNAL : ChatType.EXTERNAL, flowGraph: getTelemetryFlowObj(nodes, edges) }) + appServer.metricsProvider.incrementCounter( + isInternal ? FLOWISE_METRIC_COUNTERS.AGENTFLOW_PREDICTION_INTERNAL : FLOWISE_METRIC_COUNTERS.AGENTFLOW_PREDICTION_EXTERNAL, + { status: FLOWISE_COUNTER_STATUS.SUCCESS } + ) // Find the previous chat message with the same action id and remove the action if (incomingInput.action && Object.keys(incomingInput.action).length) { @@ -645,6 +658,10 @@ const utilBuildAgentResponse = async ( return undefined } catch (e) { logger.error('[server]: Error:', e) + appServer.metricsProvider.incrementCounter( + isInternal ? FLOWISE_METRIC_COUNTERS.AGENTFLOW_PREDICTION_INTERNAL : FLOWISE_METRIC_COUNTERS.AGENTFLOW_PREDICTION_EXTERNAL, + { status: FLOWISE_COUNTER_STATUS.FAILURE } + ) throw new InternalFlowiseError(StatusCodes.INTERNAL_SERVER_ERROR, getErrorMessage(e)) } } diff --git a/packages/server/src/utils/upsertVector.ts b/packages/server/src/utils/upsertVector.ts index 7d7fd7030..62678bc9d 100644 --- a/packages/server/src/utils/upsertVector.ts +++ b/packages/server/src/utils/upsertVector.ts @@ -3,7 +3,6 @@ import * as fs from 'fs' import * as path from 'path' import { cloneDeep, omit } from 'lodash' import { ICommonObject, IMessage, addArrayFilesToStorage, mapMimeTypeToInputField, mapExtToInputField } from 'flowise-components' -import telemetryService from '../services/telemetry' import logger from '../utils/logger' import { buildFlow, @@ -24,6 +23,7 @@ import { InternalFlowiseError } from '../errors/internalFlowiseError' import { StatusCodes } from 'http-status-codes' import { getErrorMessage } from '../errors/utils' import { v4 as uuidv4 } from 'uuid' +import { FLOWISE_COUNTER_STATUS, FLOWISE_METRIC_COUNTERS } from '../Interface.Metrics' /** * Upsert documents * @param {Request} req @@ -190,16 +190,14 @@ export const upsertVector = async (req: Request, isInternal: boolean = false) => await appServer.AppDataSource.getRepository(UpsertHistory).save(upsertHistory) } - await telemetryService.createEvent({ - name: `vector_upserted`, - data: { - version: await getAppVersion(), - chatlowId: chatflowid, - type: isInternal ? ChatType.INTERNAL : ChatType.EXTERNAL, - flowGraph: getTelemetryFlowObj(nodes, edges), - stopNodeId - } + await appServer.telemetry.sendTelemetry('vector_upserted', { + version: await getAppVersion(), + chatlowId: chatflowid, + type: isInternal ? ChatType.INTERNAL : ChatType.EXTERNAL, + flowGraph: getTelemetryFlowObj(nodes, edges), + stopNodeId }) + appServer.metricsProvider.incrementCounter(FLOWISE_METRIC_COUNTERS.VECTORSTORE_UPSERT, { status: FLOWISE_COUNTER_STATUS.SUCCESS }) return upsertedResult['result'] ?? { result: 'Successfully Upserted' } } catch (e) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8858d4a99..aa7ccc212 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -460,6 +460,48 @@ importers: '@oclif/core': specifier: ^1.13.10 version: 1.26.2 + '@opentelemetry/api': + specifier: ^1.3.0 + version: 1.9.0 + '@opentelemetry/auto-instrumentations-node': + specifier: ^0.52.0 + version: 0.52.0(@opentelemetry/api@1.9.0)(encoding@0.1.13) + '@opentelemetry/core': + specifier: 1.27.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-grpc': + specifier: 0.54.0 + version: 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': + specifier: 0.54.0 + version: 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-proto': + specifier: 0.54.0 + version: 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': + specifier: 0.54.0 + version: 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': + specifier: 0.54.0 + version: 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': + specifier: 0.54.0 + version: 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': + specifier: 1.27.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': + specifier: 1.27.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': + specifier: ^0.54.0 + version: 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': + specifier: 1.27.0 + version: 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': + specifier: 1.27.0 + version: 1.27.0 '@types/lodash': specifier: ^4.14.202 version: 4.14.202 @@ -535,6 +577,9 @@ importers: posthog-node: specifier: ^3.5.0 version: 3.6.3 + prom-client: + specifier: ^15.1.3 + version: 15.1.3 reflect-metadata: specifier: ^0.1.13 version: 0.1.14 @@ -4104,10 +4149,460 @@ packages: resolution: { integrity: sha512-bX0aUz5e7rlY1lKz1rFrqnNbl/l1CHvvysYB2Jn+C3WNs7nL6FnQjuxLhGwyRdW9W1bFokDoOVgPMIOi/Nn9/g== } engines: { node: '>=10' } + '@opentelemetry/api-logs@0.54.0': + resolution: { integrity: sha512-9HhEh5GqFrassUndqJsyW7a0PzfyWr2eV2xwzHLIS+wX3125+9HE9FMRAKmJRwxZhgZGwH3HNQQjoMGZqmOeVA== } + engines: { node: '>=14' } + '@opentelemetry/api@1.9.0': resolution: { integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== } engines: { node: '>=8.0.0' } + '@opentelemetry/auto-instrumentations-node@0.52.0': + resolution: { integrity: sha512-J9SgX7NOpTvQ7itvlOlHP3lTlsMWtVh5WQSHUSTlg2m3A9HlZBri2DtZ8QgNj8rYWe0EQxQ3TQ3H6vabfun4vw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.4.1 + + '@opentelemetry/context-async-hooks@1.27.0': + resolution: { integrity: sha512-CdZ3qmHCwNhFAzjTgHqrDQ44Qxcpz43cVxZRhOs+Ns/79ug+Mr84Bkb626bkJLkA3+BLimA5YAEVRlJC6pFb7g== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.26.0': + resolution: { integrity: sha512-1iKxXXE8415Cdv0yjG3G6hQnB5eVEsJce3QaawX8SjDn0mAS0ZM8fAbZZJD4ajvhC15cePvosSCut404KrIIvQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.27.0': + resolution: { integrity: sha512-yQPKnK5e+76XuiqUH/gKyS8wv/7qITd5ln56QkBTf3uggr0VkXOXfcaAuG330UfdYu83wsyoBwqwxigpIG+Jkg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-logs-otlp-grpc@0.54.0': + resolution: { integrity: sha512-CQC9xl9p8EIvx2KggdM7yffbpmUArKjiqAcjTTTEvqE8kOOf71NSuBU0FXs14FU8vBGTUlsr3oI4vGeWF8FakA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-http@0.54.0': + resolution: { integrity: sha512-EX/5YPtFw5hugURWSmOtJEGsjphkwTRAiv2yay40ADCLEzajhI/tM3v/7hFCj+rm37sGFMNawpi3mGLvfKGexQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-logs-otlp-proto@0.54.0': + resolution: { integrity: sha512-Q8p1eLP6BGu26VdiR8qBiyufXTZimUl2kv6EwZZPLRU0CJWAFR562UOyUtDxbwQioQFq57DVjCd6mQWBvydAlg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-grpc@0.54.0': + resolution: { integrity: sha512-xzehh4aIoOuUrS2WFDlKVIz3Ayufa4AO8JOYwUsb65e8oWT3VWJV/V6kV80zC5xK/Wv/xJxfCBNA4FPazW1eDg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-http@0.54.0': + resolution: { integrity: sha512-9jRNyeyjPjGGRY4Fx7NdIAJ8Rook5D5z1toCp+xevujQcltgZOO/3rCqMo95UiY3d6zQu/H9ky5zzeCaYtXijg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-metrics-otlp-proto@0.54.0': + resolution: { integrity: sha512-2XOuSna24CWn1vCTqu/dY0Iva+3azP3tIPffjbCy+EDboATT6wpDJSkuT0gMgVb1HG7h0hxdq5XMIlJk/pS03A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-grpc@0.54.0': + resolution: { integrity: sha512-DOoK7yk/L/RHoyuYTxIyGY7PLFSTS7OGNks9htMS7eAFkm4Lsa6EtPlGANCT39NXWP4XIQR1c+Y+YIQ7lJdI+w== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-http@0.54.0': + resolution: { integrity: sha512-00X6rtr6Ew59+MM9pPSH7Ww5ScpWKBLiBA49awbPqQuVL/Bp0qp7O1cTxKHgjWdNkhsELzJxAEYwuRnDGrMXyA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-trace-otlp-proto@0.54.0': + resolution: { integrity: sha512-cpDQj5wl7G8pLu3lW94SnMpn0C85A9Ehe7+JBow2IL5DGPWXTkynFngMtCC3PpQzQgzlyOVe0MVZfoBB3M5ECA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/exporter-zipkin@1.27.0': + resolution: { integrity: sha512-eGMY3s4QprspFZojqsuQyQpWNFpo+oNVE/aosTbtvAlrJBAlvXcwwsOROOHOd8Y9lkU4i0FpQW482rcXkgwCSw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-amqplib@0.43.0': + resolution: { integrity: sha512-ALjfQC+0dnIEcvNYsbZl/VLh7D2P1HhFF4vicRKHhHFIUV3Shpg4kXgiek5PLhmeKSIPiUB25IYH5RIneclL4A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-lambda@0.46.0': + resolution: { integrity: sha512-rNmhTC1e1qQD4jw+TZSHlpLYNhrkbKA0P5rlqPpTVHqZXHQctu9+dity2lLBh4DlFKt4p/ibVDLVDoBqjvetKA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-aws-sdk@0.45.0': + resolution: { integrity: sha512-3EGgC0LFZuFfXcOeslhXHhsiInVhhN046YQsYIPflsicAk7v0wN946sZKWuerEfmqx/kFXOsbOeI1SkkTRmqWQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-bunyan@0.42.0': + resolution: { integrity: sha512-GBh6ybwKmFZjc86SyHVx72jHg+4pFPaXT3IZgJ4QtnMsMf0/q5m2aHAjid+yakmEkApsnRWX8pJ8nkl1e+6mag== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cassandra-driver@0.42.0': + resolution: { integrity: sha512-35I9Gw4BeSs9NPe7fugu9e/mWKaapc/N1wounHnGt259/Q3ISGMOQRrOwIBw+x/XJygJvn4Ss1c+r5h89TsVAw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.40.0': + resolution: { integrity: sha512-3aR/3YBQ160siitwwRLjwqrv2KBT16897+bo6yz8wIfel6nWOxTZBJudcbsK3p42pTC7qrbotJ9t/1wRLpv79Q== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-cucumber@0.10.0': + resolution: { integrity: sha512-5sT6Ap3W7StEL0Oax/vd1YTEcTPTefx+9myzkKrr72hxzFzSooGRCxlU3sfPwZqWptUV7+QWTMd7SqGEEPnE/w== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/instrumentation-dataloader@0.13.0': + resolution: { integrity: sha512-wbU3WdgUAXljEIY2nfpkqID/VH70ThnES8mZZHKCZlV/Pl5T4+qmrVdT7U9/WUzz8flwsXfER6T6jl48Wbl+LQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dns@0.40.0': + resolution: { integrity: sha512-tLNR8XLPiYRKKk3/UqifXnPP2TVt1RcwvHU0R1ETL1xkZ1ZHMTmSC4x6TignnHOFtRixtJ05EgMGejnffaBXkQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-express@0.44.0': + resolution: { integrity: sha512-GWgibp6Q0wxyFaaU8ERIgMMYgzcHmGrw3ILUtGchLtLncHNOKk0SNoWGqiylXWWT4HTn5XdV8MGawUgpZh80cA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fastify@0.41.0': + resolution: { integrity: sha512-pNRjFvf0mvqfJueaeL/qEkuGJwgtE5pgjIHGYwjc2rMViNCrtY9/Sf+Nu8ww6dDd/Oyk2fwZZP7i0XZfCnETrA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.16.0': + resolution: { integrity: sha512-hMDRUxV38ln1R3lNz6osj3YjlO32ykbHqVrzG7gEhGXFQfu7LJUx8t9tEwE4r2h3CD4D0Rw4YGDU4yF4mP3ilg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.40.0': + resolution: { integrity: sha512-k+/JlNDHN3bPi/Cir+Ew6tKHFVCa1ZFeQyGUw5HQkRX/twCRaN3kJFXJW+rDAN90XwK3RtC9AWwBihDGh/oSlQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.44.0': + resolution: { integrity: sha512-FYXTe3Bv96aNpYktqm86BFUTpjglKD0kWI5T5bxYkLUPEPvFn38vWGMJTGrDMVou/i55E4jlWvcm6hFIqLsMbg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-grpc@0.54.0': + resolution: { integrity: sha512-IwLwAf1uC6I5lYjUxfvG0jFuppqNuaBIiaDxYFHMWeRX1Rejh4eqtQi2u+VVtSOHsCn2sRnS9hOxQ2w7+zzPLw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.42.0': + resolution: { integrity: sha512-TQC0BtIWLHrp6nKsYdZ5t5B7aiZ16BwbRqZtYYQxeJVsq/HQTANWpknjtA7KMxv5tAUMCrU/eDo8F3qioUOSZg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.54.0': + resolution: { integrity: sha512-ovl0UrL+vGpi0O7fdZ1mHRdiQkuv6NGMRBRKZZygVCUFNXdoqTpvJRRbTYih5U5FC+PHIFssEordmlblRCaGUg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-ioredis@0.44.0': + resolution: { integrity: sha512-312pE2xc0ihX9haTf9WC4OF9in5EfVO1y5I8Ef9aMQKJNhuSe3IgzQAqGoLfaYajC+ig0IZ9SQKU8mRbFwHU+A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.4.0': + resolution: { integrity: sha512-I9VwDG314g7SDL4t8kD/7+1ytaDBRbZQjhVaQaVIDR8K+mlsoBhLsWH79yHxhHQKvwCSZwqXF+TiTOhoQVUt7A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-knex@0.41.0': + resolution: { integrity: sha512-OhI1SlLv5qnsnm2dOVrian/x3431P75GngSpnR7c4fcVFv7prXGYu29Z6ILRWJf/NJt6fkbySmwdfUUnFnHCTg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.44.0': + resolution: { integrity: sha512-ryPqGIQ4hpMGd85bAGjRMDAy/ic+Qdh1GtFGJo9KaXdzbcvZoF1ZgXVsKTYDxbD1n5C0BoQy6rcWg8Lu68iCJA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.41.0': + resolution: { integrity: sha512-6OePkk4RYCPVsnS0TroEK6UZzxxxjVWaE6EPdOn2qxGHMtm+Qb80tiBQ6BbmC+f7bjc27O85JY8gxeTybhHZXw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-memcached@0.40.0': + resolution: { integrity: sha512-VzJUUH6cVz8yrb25RvvjhxCpwu4vUk28I0m5nnnhebULOo8p9lda5PgQeVde2+jQAd977C/vN714fkbYOmwb+A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.48.0': + resolution: { integrity: sha512-9YWvaGvrrcrydMsYGLu0w+RgmosLMKe3kv/UNlsPy8RLnCkN2z+bhhbjjjuxtUmvEuKZMCoXFluABVuBr1yhjw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.43.0': + resolution: { integrity: sha512-y1mWuL/zb6IKi199HkROgmStxF/ybEsnKYgx+/lpLATd57oZHOqrXP9tLmp9qRVI5c6P5XEWfe7ZCvrj07iDMQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.42.0': + resolution: { integrity: sha512-CQqOjCbHwEnaC+Bd6Sms+82iJkSbPpd7jD7Jwif7q8qXo6yrKLVDYDVK+zKbfnmQtu2xHaHj+xiq4tyjb3sMfg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.42.0': + resolution: { integrity: sha512-1GN2EBGVSZABGQ25MSz3faeBW/DwhzmE10aNW1/A2mvQAxF1CvpMk17YmNUzwapVt29iKsiU3SXQG7vjh/019A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-nestjs-core@0.41.0': + resolution: { integrity: sha512-XCqtghFktpcJ2BOaJtFfqtTMsHffJADxfYhJl28WT6ygCChS2uZVxMKKLsy+i9VtPaw/i1IumPICL6mbhwq+Vw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-net@0.40.0': + resolution: { integrity: sha512-abErnVRxTmtiF7EvBISW81Se2nj/j3Xtpfy//9++dgvDOXwbcD1Xz1via6ZHOm/VamboGhqPlYiO7ABzluPLwg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.47.0': + resolution: { integrity: sha512-aKu5PCeUv3S8s1wq60JZ2o3DWV2wqvO7WAktjmkx5wXd2+tZRfyDCKFHbP90QuDG1HDzjJ138Ob4d4rJdPETCQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pino@0.43.0': + resolution: { integrity: sha512-jlOOgbODWRRNknWXY1VLgmqgG0SO4kLgU3XnejjO/3De4OisroAsMGk+1cRB5AQ6WZ8WLAMkMyTShaOe6j2Asw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis-4@0.43.0': + resolution: { integrity: sha512-6B2+CFRY9xRnkeZrSvlTyY2yB/zAgxjbXS5EwXhE3ZAKR1hWWoUzaTADIKT5xe9/VbDW42U3UoOPCcaCmeAXww== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis@0.43.0': + resolution: { integrity: sha512-dufe08W3sCOjutbTJmV6tg2Y3+7IBe59oQrnIW2RCgjRhsW0Jjaenezt490eawO0MdXjUfFyrIUg8WetKhE4xA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-restify@0.42.0': + resolution: { integrity: sha512-ApDD9HNy6de6xrHmISEfkQHwwX1f1JrBj0ADnlk6tVdJ0j/vNmsZNLwaU2IA2K3mHqbp2YLarLgxAZp6rjcfWg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-router@0.41.0': + resolution: { integrity: sha512-IbvzgaoylMqStOOtwucEvSu5CDbfQN+H1ZZ2p6c9Kmvzptqh6G441GFy0FFVVqxOAHNhQm2w6n0Ag8trdBjCfw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-socket.io@0.43.0': + resolution: { integrity: sha512-HAQoIZ6N/ey1L4jF69gmqo7RyeSv5rc4sZZAd1v6SVaB8ZolTEyWEzGlu1NRZZTnqfWNxDkX6J1/omWpDd9k0w== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-tedious@0.15.0': + resolution: { integrity: sha512-Kb7yo8Zsq2TUwBbmwYgTAMPK0VbhoS8ikJ6Bup9KrDtCx2JC01nCb+M0VJWXt7tl0+5jARUbKWh5jRSoImxdCw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.7.0': + resolution: { integrity: sha512-1AAqbVt1QOLgnc9DEkHS2R/0FIPI74ud5qgitwP9sVYzRg6e66bPSoAIARCyuANJrWCUrfgI69vLTfRxhBM+3A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation-winston@0.41.0': + resolution: { integrity: sha512-qtqGDx2Plu71s9xaeXut0YgZFG/y68ENG9vvo/SODeEC+4/APiS/htQ5YNJIxxjOuxYowdFYRqV9Kmef2EUzmw== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation@0.54.0': + resolution: { integrity: sha512-B0Ydo9g9ehgNHwtpc97XivEzjz0XBKR6iQ83NTENIxEEf5NHE0otZQuZLgDdey1XNk+bP1cfRpIkSFWM5YlSyg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.54.0': + resolution: { integrity: sha512-g+H7+QleVF/9lz4zhaR9Dt4VwApjqG5WWupy5CTMpWJfHB/nLxBbX73GBZDgdiNfh08nO3rNa6AS7fK8OhgF5g== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-grpc-exporter-base@0.54.0': + resolution: { integrity: sha512-Yl2Dw0jlRWisEia9Hv/N8u2JLITCvzA6gAIKEvxpEu6nwHEftD2WhTJMIclkTtfmSW0rLmEEXymwmboG4xDN0Q== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.54.0': + resolution: { integrity: sha512-jRexIASQQzdK4AjfNIBfn94itAq4Q8EXR9d3b/OVbhd3kKQKvMr7GkxYDjbeTbY7hHCOLcLfJ3dpYQYGOe8qOQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/propagation-utils@0.30.12': + resolution: { integrity: sha512-bgab3q/4dYUutUpQCEaSDa+mLoQJG3vJKeSiGuhM4iZaSpkz8ov0fs1MGil5PfxCo6Hhw3bB3bFYhUtnsfT/Pg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/propagator-aws-xray@1.26.0': + resolution: { integrity: sha512-Sex+JyEZ/xX328TArBqQjh1NZSfNyw5NdASUIi9hnPsnMBMSBaDe7B9JRnXv0swz7niNyAnXa6MY7yOCV76EvA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-b3@1.27.0': + resolution: { integrity: sha512-pTsko3gnMioe3FeWcwTQR3omo5C35tYsKKwjgTCTVCgd3EOWL9BZrMfgLBmszrwXABDfUrlAEFN/0W0FfQGynQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/propagator-jaeger@1.27.0': + resolution: { integrity: sha512-EI1bbK0wn0yIuKlc2Qv2LKBRw6LiUWevrjCF80fn/rlaB+7StAi8Y5s8DBqAYNpY7v1q86+NjU18v7hj2ejU3A== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/redis-common@0.36.2': + resolution: { integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g== } + engines: { node: '>=14' } + + '@opentelemetry/resource-detector-alibaba-cloud@0.29.4': + resolution: { integrity: sha512-U3sWPoBXiEE51jJGhRrW19hLvrRbBbZWTp3Yc7IaRVFODNNzmibOolyi2ow1XN68UgRT4BRuwgwbnM5GbG/E5Q== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-aws@1.7.0': + resolution: { integrity: sha512-VxrwUi/9QcVIV+40d/jOKQthfD/E4/ppQ9FsYpDH7qy16cOO5519QOdihCQJYpVNbgDqf6q3hVrCy1f8UuG8YA== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-azure@0.2.12': + resolution: { integrity: sha512-iIarQu6MiCjEEp8dOzmBvCSlRITPFTinFB2oNKAjU6xhx8d7eUcjNOKhBGQTvuCriZrxrEvDaEEY9NfrPQ6uYQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-container@0.5.0': + resolution: { integrity: sha512-ozp+ggcbl17xFfL91+DFgP8nmfzthNLxVTDOQUVgQgngVsSaBb5/I1Tnt63ZX2GCMdBJTxUBbFsqFvO0CjfGLg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resource-detector-gcp@0.29.13': + resolution: { integrity: sha512-vdotx+l3Q+89PeyXMgKEGnZ/CwzwMtuMi/ddgD9/5tKZ08DfDGB2Npz9m2oXPHRCjc4Ro6ifMqFlRyzIvgOjhg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.0.0 + + '@opentelemetry/resources@1.27.0': + resolution: { integrity: sha512-jOwt2VJ/lUD5BLc+PMNymDrUCpm5PKi1E9oSVYAvz01U/VdndGmrtV3DU1pG4AwlYhJRHbHfOUIlpBeXCPw6QQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.54.0': + resolution: { integrity: sha512-HeWvOPiWhEw6lWvg+lCIi1WhJnIPbI4/OFZgHq9tKfpwF3LX6/kk3+GR8sGUGAEZfbjPElkkngzvd2s03zbD7Q== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@1.27.0': + resolution: { integrity: sha512-JzWgzlutoXCydhHWIbLg+r76m+m3ncqvkCcsswXAQ4gqKS+LOHKhq+t6fx1zNytvLuaOUBur7EvWxECc4jPQKg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-node@0.54.0': + resolution: { integrity: sha512-F0mdwb4WPFJNypcmkxQnj3sIfh/73zkBgYePXMK8ghsBwYw4+PgM3/85WT6NzNUeOvWtiXacx5CFft2o7rGW3w== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.27.0': + resolution: { integrity: sha512-btz6XTQzwsyJjombpeqCX6LhiMQYpzt2pIYNPnw0IPO/3AhT6yjnf8Mnv3ZC2A4eRYOjqrg+bfaXg9XHDRJDWQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@1.27.0': + resolution: { integrity: sha512-dWZp/dVGdUEfRBjBq2BgNuBlFqHCxyyMc8FsN0NX15X07mxSUO0SZRLyK/fdAVrde8nqFI/FEdMH4rgU9fqJfQ== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.27.0': + resolution: { integrity: sha512-sAay1RrB+ONOem0OZanAR1ZI/k7yDpnOQSQmTMuGImUQb2y8EbSaCJ94FQluM74xoU03vlb2d2U90hZluL6nQg== } + engines: { node: '>=14' } + + '@opentelemetry/sql-common@0.40.1': + resolution: { integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg== } + engines: { node: '>=14' } + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@petamoriken/float16@3.8.7': resolution: { integrity: sha512-/Ri4xDDpe12NT6Ex/DRgHzLlobiQXEW/hmG08w1wj/YU7hLemk97c+zHQFp0iZQ9r7YqgLEXZR2sls4HxBf9NA== } @@ -5011,6 +5506,9 @@ packages: '@types/aria-query@5.0.4': resolution: { integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== } + '@types/aws-lambda@8.10.143': + resolution: { integrity: sha512-u5vzlcR14ge/4pMTTMDQr3MF0wEe38B2F9o84uC4F43vN5DGTy63npRrB6jQhyt+C0lGv4ZfiRcRkqJoZuPnmg== } + '@types/babel__core@7.20.5': resolution: { integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== } @@ -5029,6 +5527,9 @@ packages: '@types/bonjour@3.5.13': resolution: { integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== } + '@types/bunyan@1.8.9': + resolution: { integrity: sha512-ZqS9JGpBxVOvsawzmVt30sP++gSQMTejCkIAQ3VdadOcRE8izTyW66hufvwLeH+YEGP6Js2AW7Gz+RMyvrEbmw== } + '@types/cacheable-request@6.0.3': resolution: { integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== } @@ -5041,6 +5542,9 @@ packages: '@types/connect-history-api-fallback@1.5.4': resolution: { integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw== } + '@types/connect@3.4.36': + resolution: { integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w== } + '@types/connect@3.4.38': resolution: { integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== } @@ -5263,6 +5767,9 @@ packages: '@types/mdast@4.0.3': resolution: { integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== } + '@types/memcached@2.2.10': + resolution: { integrity: sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg== } + '@types/mime@1.3.5': resolution: { integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== } @@ -5278,6 +5785,9 @@ packages: '@types/multer@1.4.11': resolution: { integrity: sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w== } + '@types/mysql@2.15.26': + resolution: { integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ== } + '@types/node-fetch@2.6.11': resolution: { integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g== } @@ -5311,12 +5821,18 @@ packages: '@types/parse-json@4.0.2': resolution: { integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== } + '@types/pg-pool@2.0.6': + resolution: { integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ== } + '@types/pg@8.11.2': resolution: { integrity: sha512-G2Mjygf2jFMU/9hCaTYxJrwdObdcnuQde1gndooZSOHsNSaCehAuwc7EIuSA34Do8Jx2yZ19KtvW8P0j4EuUXw== } '@types/pg@8.11.6': resolution: { integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ== } + '@types/pg@8.6.1': + resolution: { integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w== } + '@types/phoenix@1.6.4': resolution: { integrity: sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA== } @@ -5380,6 +5896,9 @@ packages: '@types/serve-static@1.15.5': resolution: { integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== } + '@types/shimmer@1.2.0': + resolution: { integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg== } + '@types/sinonjs__fake-timers@8.1.1': resolution: { integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== } @@ -5401,6 +5920,9 @@ packages: '@types/swagger-ui-express@4.1.6': resolution: { integrity: sha512-UVSiGYXa5IzdJJG3hrc86e8KdZWLYxyEsVoUI4iPXc7CO4VZ3AfNP8d/8+hrDRIqz+HAaSMtZSqAsF3Nq2X/Dg== } + '@types/tedious@4.0.14': + resolution: { integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw== } + '@types/testing-library__jest-dom@5.14.9': resolution: { integrity: sha512-FSYhIjFlfOpGSRyVoMBMuS3ws5ehFQODymf3vlI7U1K8c7PHwWwFY7VREfmsuzHSOnoKs/9/Y983ayOs7eRzqw== } @@ -5714,6 +6236,11 @@ packages: peerDependencies: acorn: ^8 + acorn-import-attributes@1.9.5: + resolution: { integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ== } + peerDependencies: + acorn: ^8 + acorn-jsx@5.3.2: resolution: { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } peerDependencies: @@ -6361,6 +6888,9 @@ packages: bindings@1.5.0: resolution: { integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== } + bintrees@1.0.2: + resolution: { integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw== } + bl@4.1.0: resolution: { integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== } @@ -7372,6 +7902,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: { integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== } + engines: { node: '>=6.0' } + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debuglog@1.0.1: resolution: { integrity: sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw== } deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. @@ -8520,6 +9059,9 @@ packages: peerDependencies: react: '>=16.8.0' + forwarded-parse@2.1.2: + resolution: { integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw== } + forwarded@0.2.0: resolution: { integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== } engines: { node: '>= 0.6' } @@ -9245,6 +9787,9 @@ packages: resolution: { integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== } engines: { node: '>=6' } + import-in-the-middle@1.11.2: + resolution: { integrity: sha512-gK6Rr6EykBcc6cVWRSBR5TWf8nn6hZMYSRYqCcHa0l0d1fPK7JSYo6+Mlmck76jIX9aL/IZ71c06U2VpFwl1zA== } + import-local@3.1.0: resolution: { integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== } engines: { node: '>=8' } @@ -11266,6 +11811,9 @@ packages: mnemonist@0.38.3: resolution: { integrity: sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== } + module-details-from-path@1.0.3: + resolution: { integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A== } + moment-timezone@0.5.45: resolution: { integrity: sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ== } @@ -12814,6 +13362,10 @@ packages: resolution: { integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== } engines: { node: '>=0.4.0' } + prom-client@15.1.3: + resolution: { integrity: sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g== } + engines: { node: ^16 || ^18 || >=20 } + promise-all-reject-late@1.0.1: resolution: { integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== } @@ -13428,6 +13980,10 @@ packages: resolution: { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== } engines: { node: '>=0.10.0' } + require-in-the-middle@7.4.0: + resolution: { integrity: sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ== } + engines: { node: '>=8.6.0' } + require-main-filename@1.0.1: resolution: { integrity: sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== } @@ -13804,6 +14360,9 @@ packages: engines: { node: '>=4' } hasBin: true + shimmer@1.2.1: + resolution: { integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw== } + shx@0.3.4: resolution: { integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g== } engines: { node: '>=6' } @@ -14421,6 +14980,9 @@ packages: resolution: { integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== } engines: { node: '>=10' } + tdigest@0.1.2: + resolution: { integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA== } + teeny-request@9.0.0: resolution: { integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g== } engines: { node: '>=14' } @@ -19379,7 +19941,7 @@ snapshots: dependencies: lodash.camelcase: 4.3.0 long: 5.2.3 - protobufjs: 7.2.6 + protobufjs: 7.3.2 yargs: 17.7.2 '@grpc/proto-loader@0.7.13': @@ -20703,8 +21265,674 @@ snapshots: transitivePeerDependencies: - supports-color + '@opentelemetry/api-logs@0.54.0': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api@1.9.0': {} + '@opentelemetry/auto-instrumentations-node@0.52.0(@opentelemetry/api@1.9.0)(encoding@0.1.13)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-lambda': 0.46.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-aws-sdk': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-bunyan': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cassandra-driver': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-cucumber': 0.10.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.13.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dns': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.16.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-grpc': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.4.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.44.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-memcached': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.48.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-net': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.47.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pino': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-restify': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-router': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-socket.io': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.15.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-winston': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-alibaba-cloud': 0.29.4(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-aws': 1.7.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-azure': 0.2.12(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-container': 0.5.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resource-detector-gcp': 0.29.13(@opentelemetry/api@1.9.0)(encoding@0.1.13) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-node': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - encoding + - supports-color + + '@opentelemetry/context-async-hooks@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/core@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/exporter-logs-otlp-grpc@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.10.10 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.54.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-http@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.54.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-logs-otlp-proto@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-grpc@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.10.10 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-http@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-metrics-otlp-proto@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-metrics-otlp-http': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-grpc@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.10.10 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-grpc-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-http@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-trace-otlp-proto@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/exporter-zipkin@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/instrumentation-amqplib@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-lambda@0.46.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-aws-xray': 1.26.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@types/aws-lambda': 8.10.143 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-aws-sdk@0.45.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagation-utils': 0.30.12(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-bunyan@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@types/bunyan': 1.8.9 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cassandra-driver@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@types/connect': 3.4.36 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-cucumber@0.10.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.13.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dns@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-express@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fastify@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.16.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-grpc@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + forwarded-parse: 2.1.2 + semver: 7.6.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-ioredis@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.4.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-knex@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-koa@0.44.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-lru-memoizer@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-memcached@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@types/memcached': 2.2.10 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongodb@0.48.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongoose@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql2@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@types/mysql': 2.15.26 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-nestjs-core@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-net@0.40.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-pg@0.47.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-pino@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-redis-4@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-redis@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-restify@0.42.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-router@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-socket.io@0.43.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-tedious@0.15.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-undici@0.7.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-winston@0.41.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.11.2 + require-in-the-middle: 7.4.0 + semver: 7.6.0 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/otlp-exporter-base@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-grpc-exporter-base@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@grpc/grpc-js': 1.10.10 + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-exporter-base': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/otlp-transformer': 0.54.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/otlp-transformer@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + protobufjs: 7.3.2 + + '@opentelemetry/propagation-utils@0.30.12(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/propagator-aws-xray@1.26.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.26.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-b3@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/propagator-jaeger@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/redis-common@0.36.2': {} + + '@opentelemetry/resource-detector-alibaba-cloud@0.29.4(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/resource-detector-aws@1.7.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/resource-detector-azure@0.2.12(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/resource-detector-container@0.5.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/resource-detector-gcp@0.29.13(@opentelemetry/api@1.9.0)(encoding@0.1.13)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + gcp-metadata: 6.1.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@opentelemetry/resources@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/sdk-logs@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-metrics@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + + '@opentelemetry/sdk-node@0.54.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.54.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-grpc': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-http': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-logs-otlp-proto': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-grpc': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-http': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-trace-otlp-proto': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/exporter-zipkin': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-logs': 0.54.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-node': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/sdk-trace-base@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.27.0 + + '@opentelemetry/sdk-trace-node@1.27.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-b3': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/propagator-jaeger': 1.27.0(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.27.0(@opentelemetry/api@1.9.0) + semver: 7.6.0 + + '@opentelemetry/semantic-conventions@1.27.0': {} + + '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.27.0(@opentelemetry/api@1.9.0) + '@petamoriken/float16@3.8.7': {} '@pinecone-database/pinecone@2.2.2': @@ -21855,6 +23083,8 @@ snapshots: '@types/aria-query@5.0.4': {} + '@types/aws-lambda@8.10.143': {} + '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.24.8 @@ -21885,6 +23115,10 @@ snapshots: dependencies: '@types/node': 20.12.12 + '@types/bunyan@1.8.9': + dependencies: + '@types/node': 20.12.12 + '@types/cacheable-request@6.0.3': dependencies: '@types/http-cache-semantics': 4.0.4 @@ -21903,6 +23137,10 @@ snapshots: '@types/express-serve-static-core': 4.17.43 '@types/node': 20.12.12 + '@types/connect@3.4.36': + dependencies: + '@types/node': 20.12.12 + '@types/connect@3.4.38': dependencies: '@types/node': 20.12.12 @@ -22166,6 +23404,10 @@ snapshots: dependencies: '@types/unist': 3.0.2 + '@types/memcached@2.2.10': + dependencies: + '@types/node': 20.12.12 + '@types/mime@1.3.5': {} '@types/mime@3.0.4': {} @@ -22178,6 +23420,10 @@ snapshots: dependencies: '@types/express': 4.17.21 + '@types/mysql@2.15.26': + dependencies: + '@types/node': 20.12.12 + '@types/node-fetch@2.6.11': dependencies: '@types/node': 20.12.12 @@ -22216,6 +23462,10 @@ snapshots: '@types/parse-json@4.0.2': {} + '@types/pg-pool@2.0.6': + dependencies: + '@types/pg': 8.11.6 + '@types/pg@8.11.2': dependencies: '@types/node': 20.11.26 @@ -22228,6 +23478,12 @@ snapshots: pg-protocol: 1.6.1 pg-types: 4.0.2 + '@types/pg@8.6.1': + dependencies: + '@types/node': 20.12.12 + pg-protocol: 1.6.1 + pg-types: 2.2.0 + '@types/phoenix@1.6.4': {} '@types/picomatch@2.3.3': {} @@ -22298,6 +23554,8 @@ snapshots: '@types/mime': 3.0.4 '@types/node': 20.12.12 + '@types/shimmer@1.2.0': {} + '@types/sinonjs__fake-timers@8.1.1': {} '@types/sizzle@2.3.8': {} @@ -22319,6 +23577,10 @@ snapshots: '@types/express': 4.17.21 '@types/serve-static': 1.15.5 + '@types/tedious@4.0.14': + dependencies: + '@types/node': 20.12.12 + '@types/testing-library__jest-dom@5.14.9': dependencies: '@types/jest': 29.5.12 @@ -22731,7 +23993,7 @@ snapshots: '@zilliz/milvus2-sdk-node@2.4.2': dependencies: - '@grpc/grpc-js': 1.10.8 + '@grpc/grpc-js': 1.10.10 '@grpc/proto-loader': 0.7.13 '@petamoriken/float16': 3.8.7 dayjs: 1.11.10 @@ -22767,6 +24029,10 @@ snapshots: dependencies: acorn: 8.11.3 + acorn-import-attributes@1.9.5(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + acorn-jsx@5.3.2(acorn@8.11.3): dependencies: acorn: 8.11.3 @@ -23604,6 +24870,8 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 + bintrees@1.0.2: {} + bl@4.1.0: dependencies: buffer: 5.7.1 @@ -24796,6 +26064,10 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.3.7: + dependencies: + ms: 2.1.3 + debuglog@1.0.1: {} decamelize@1.2.0: {} @@ -26316,6 +27588,8 @@ snapshots: tiny-warning: 1.0.3 tslib: 2.6.2 + forwarded-parse@2.1.2: {} + forwarded@0.2.0: {} fraction.js@4.3.7: {} @@ -27295,6 +28569,13 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 + import-in-the-middle@1.11.2: + dependencies: + acorn: 8.11.3 + acorn-import-attributes: 1.9.5(acorn@8.11.3) + cjs-module-lexer: 1.2.3 + module-details-from-path: 1.0.3 + import-local@3.1.0: dependencies: pkg-dir: 4.2.0 @@ -29775,6 +31056,8 @@ snapshots: dependencies: obliterator: 1.6.1 + module-details-from-path@1.0.3: {} + moment-timezone@0.5.45: dependencies: moment: 2.30.1 @@ -31447,6 +32730,11 @@ snapshots: progress@2.0.3: {} + prom-client@15.1.3: + dependencies: + '@opentelemetry/api': 1.9.0 + tdigest: 0.1.2 + promise-all-reject-late@1.0.1: {} promise-call-limit@1.0.2: {} @@ -32364,6 +33652,14 @@ snapshots: require-from-string@2.0.2: {} + require-in-the-middle@7.4.0: + dependencies: + debug: 4.3.7 + module-details-from-path: 1.0.3 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + require-main-filename@1.0.1: {} requires-port@1.0.0: {} @@ -32770,6 +34066,8 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 + shimmer@1.2.1: {} + shx@0.3.4: dependencies: minimist: 1.2.8 @@ -33566,6 +34864,10 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 + tdigest@0.1.2: + dependencies: + bintrees: 1.0.2 + teeny-request@9.0.0(encoding@0.1.13): dependencies: http-proxy-agent: 5.0.0