@marinoscar/platform-api 0.0.0-stage → 0.1.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/LICENSE +21 -0
- package/README.md +106 -2
- package/dist/core/crypto/encryption-key-startup-check.d.ts +29 -0
- package/dist/core/crypto/encryption-key-startup-check.d.ts.map +1 -0
- package/dist/core/crypto/encryption-key-startup-check.js +221 -0
- package/dist/core/crypto/encryption-key-startup-check.js.map +1 -0
- package/dist/core/crypto/secret-cipher.d.ts +151 -0
- package/dist/core/crypto/secret-cipher.d.ts.map +1 -0
- package/dist/core/crypto/secret-cipher.js +452 -0
- package/dist/core/crypto/secret-cipher.js.map +1 -0
- package/dist/core/data-access/index.d.ts +6 -0
- package/dist/core/data-access/index.d.ts.map +1 -0
- package/dist/core/data-access/index.js +19 -0
- package/dist/core/data-access/index.js.map +1 -0
- package/dist/core/data-access/scoped-access.error.d.ts +35 -0
- package/dist/core/data-access/scoped-access.error.d.ts.map +1 -0
- package/dist/core/data-access/scoped-access.error.js +43 -0
- package/dist/core/data-access/scoped-access.error.js.map +1 -0
- package/dist/core/data-access/scoped-client.d.ts +104 -0
- package/dist/core/data-access/scoped-client.d.ts.map +1 -0
- package/dist/core/data-access/scoped-client.js +270 -0
- package/dist/core/data-access/scoped-client.js.map +1 -0
- package/dist/core/data-access/types.d.ts +85 -0
- package/dist/core/data-access/types.d.ts.map +1 -0
- package/dist/core/data-access/types.js +12 -0
- package/dist/core/data-access/types.js.map +1 -0
- package/dist/core/data-access/user-owned-data.registry.d.ts +60 -0
- package/dist/core/data-access/user-owned-data.registry.d.ts.map +1 -0
- package/dist/core/data-access/user-owned-data.registry.js +140 -0
- package/dist/core/data-access/user-owned-data.registry.js.map +1 -0
- package/dist/core/errors/database-seed.exception.d.ts +23 -0
- package/dist/core/errors/database-seed.exception.d.ts.map +1 -0
- package/dist/core/errors/database-seed.exception.js +49 -0
- package/dist/core/errors/database-seed.exception.js.map +1 -0
- package/dist/core/errors/error.dto.d.ts +47 -0
- package/dist/core/errors/error.dto.d.ts.map +1 -0
- package/dist/core/errors/error.dto.js +121 -0
- package/dist/core/errors/error.dto.js.map +1 -0
- package/dist/core/errors/http-exception.filter.d.ts +63 -0
- package/dist/core/errors/http-exception.filter.d.ts.map +1 -0
- package/dist/core/errors/http-exception.filter.js +234 -0
- package/dist/core/errors/http-exception.filter.js.map +1 -0
- package/dist/core/errors/verbatim-error-body.exception.d.ts +46 -0
- package/dist/core/errors/verbatim-error-body.exception.d.ts.map +1 -0
- package/dist/core/errors/verbatim-error-body.exception.js +135 -0
- package/dist/core/errors/verbatim-error-body.exception.js.map +1 -0
- package/dist/core/host/index.d.ts +7 -0
- package/dist/core/host/index.d.ts.map +1 -0
- package/dist/core/host/index.js +14 -0
- package/dist/core/host/index.js.map +1 -0
- package/dist/core/host/platform-host.d.ts +58 -0
- package/dist/core/host/platform-host.d.ts.map +1 -0
- package/dist/core/host/platform-host.js +104 -0
- package/dist/core/host/platform-host.js.map +1 -0
- package/dist/core/host/platform-host.module.d.ts +53 -0
- package/dist/core/host/platform-host.module.d.ts.map +1 -0
- package/dist/core/host/platform-host.module.js +90 -0
- package/dist/core/host/platform-host.module.js.map +1 -0
- package/dist/core/host/ports.d.ts +132 -0
- package/dist/core/host/ports.d.ts.map +1 -0
- package/dist/core/host/ports.js +48 -0
- package/dist/core/host/ports.js.map +1 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +77 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/openapi/openapi-tag.registry.d.ts +80 -0
- package/dist/core/openapi/openapi-tag.registry.d.ts.map +1 -0
- package/dist/core/openapi/openapi-tag.registry.js +72 -0
- package/dist/core/openapi/openapi-tag.registry.js.map +1 -0
- package/dist/core/principal/index.d.ts +6 -0
- package/dist/core/principal/index.d.ts.map +1 -0
- package/dist/core/principal/index.js +3 -0
- package/dist/core/principal/index.js.map +1 -0
- package/dist/core/principal/principal.types.d.ts +222 -0
- package/dist/core/principal/principal.types.d.ts.map +1 -0
- package/dist/core/principal/principal.types.js +22 -0
- package/dist/core/principal/principal.types.js.map +1 -0
- package/dist/core/registry/index.d.ts +4 -0
- package/dist/core/registry/index.d.ts.map +1 -0
- package/dist/core/registry/index.js +19 -0
- package/dist/core/registry/index.js.map +1 -0
- package/dist/core/registry/registry-freeze.service.d.ts +14 -0
- package/dist/core/registry/registry-freeze.service.d.ts.map +1 -0
- package/dist/core/registry/registry-freeze.service.js +55 -0
- package/dist/core/registry/registry-freeze.service.js.map +1 -0
- package/dist/core/registry/registry.d.ts +268 -0
- package/dist/core/registry/registry.d.ts.map +1 -0
- package/dist/core/registry/registry.js +351 -0
- package/dist/core/registry/registry.js.map +1 -0
- package/dist/core/registry/testing.d.ts +29 -0
- package/dist/core/registry/testing.d.ts.map +1 -0
- package/dist/core/registry/testing.js +63 -0
- package/dist/core/registry/testing.js.map +1 -0
- package/dist/doctor/doctor-check.interface.d.ts +100 -0
- package/dist/doctor/doctor-check.interface.d.ts.map +1 -0
- package/dist/doctor/doctor-check.interface.js +95 -0
- package/dist/doctor/doctor-check.interface.js.map +1 -0
- package/dist/doctor/doctor-check.registry.d.ts +37 -0
- package/dist/doctor/doctor-check.registry.d.ts.map +1 -0
- package/dist/doctor/doctor-check.registry.js +96 -0
- package/dist/doctor/doctor-check.registry.js.map +1 -0
- package/dist/doctor/doctor.controller.factory.d.ts +29 -0
- package/dist/doctor/doctor.controller.factory.d.ts.map +1 -0
- package/dist/doctor/doctor.controller.factory.js +121 -0
- package/dist/doctor/doctor.controller.factory.js.map +1 -0
- package/dist/doctor/doctor.module.d.ts +78 -0
- package/dist/doctor/doctor.module.d.ts.map +1 -0
- package/dist/doctor/doctor.module.js +158 -0
- package/dist/doctor/doctor.module.js.map +1 -0
- package/dist/doctor/doctor.options.d.ts +39 -0
- package/dist/doctor/doctor.options.d.ts.map +1 -0
- package/dist/doctor/doctor.options.js +21 -0
- package/dist/doctor/doctor.options.js.map +1 -0
- package/dist/doctor/doctor.service.d.ts +80 -0
- package/dist/doctor/doctor.service.d.ts.map +1 -0
- package/dist/doctor/doctor.service.js +301 -0
- package/dist/doctor/doctor.service.js.map +1 -0
- package/dist/doctor/dto/doctor-query.dto.d.ts +15 -0
- package/dist/doctor/dto/doctor-query.dto.d.ts.map +1 -0
- package/dist/doctor/dto/doctor-query.dto.js +16 -0
- package/dist/doctor/dto/doctor-query.dto.js.map +1 -0
- package/dist/doctor/dto/doctor-report.dto.d.ts +27 -0
- package/dist/doctor/dto/doctor-report.dto.d.ts.map +1 -0
- package/dist/doctor/dto/doctor-report.dto.js +23 -0
- package/dist/doctor/dto/doctor-report.dto.js.map +1 -0
- package/dist/doctor/egress/classify-host.d.ts +73 -0
- package/dist/doctor/egress/classify-host.d.ts.map +1 -0
- package/dist/doctor/egress/classify-host.js +210 -0
- package/dist/doctor/egress/classify-host.js.map +1 -0
- package/dist/doctor/egress/egress.registry.d.ts +34 -0
- package/dist/doctor/egress/egress.registry.d.ts.map +1 -0
- package/dist/doctor/egress/egress.registry.js +70 -0
- package/dist/doctor/egress/egress.registry.js.map +1 -0
- package/dist/doctor/egress/egress.types.d.ts +135 -0
- package/dist/doctor/egress/egress.types.d.ts.map +1 -0
- package/dist/doctor/egress/egress.types.js +42 -0
- package/dist/doctor/egress/egress.types.js.map +1 -0
- package/dist/doctor/egress/index.d.ts +6 -0
- package/dist/doctor/egress/index.d.ts.map +1 -0
- package/dist/doctor/egress/index.js +23 -0
- package/dist/doctor/egress/index.js.map +1 -0
- package/dist/doctor/egress/network-egress.doctor-check.d.ts +78 -0
- package/dist/doctor/egress/network-egress.doctor-check.d.ts.map +1 -0
- package/dist/doctor/egress/network-egress.doctor-check.js +226 -0
- package/dist/doctor/egress/network-egress.doctor-check.js.map +1 -0
- package/dist/doctor/index.d.ts +19 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +66 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/doctor/support-bundle/index.d.ts +12 -0
- package/dist/doctor/support-bundle/index.d.ts.map +1 -0
- package/dist/doctor/support-bundle/index.js +32 -0
- package/dist/doctor/support-bundle/index.js.map +1 -0
- package/dist/doctor/support-bundle/redact.d.ts +76 -0
- package/dist/doctor/support-bundle/redact.d.ts.map +1 -0
- package/dist/doctor/support-bundle/redact.js +236 -0
- package/dist/doctor/support-bundle/redact.js.map +1 -0
- package/dist/doctor/support-bundle/sections/doctor.section.d.ts +81 -0
- package/dist/doctor/support-bundle/sections/doctor.section.d.ts.map +1 -0
- package/dist/doctor/support-bundle/sections/doctor.section.js +83 -0
- package/dist/doctor/support-bundle/sections/doctor.section.js.map +1 -0
- package/dist/doctor/support-bundle/sections/egress.section.d.ts +73 -0
- package/dist/doctor/support-bundle/sections/egress.section.d.ts.map +1 -0
- package/dist/doctor/support-bundle/sections/egress.section.js +97 -0
- package/dist/doctor/support-bundle/sections/egress.section.js.map +1 -0
- package/dist/doctor/support-bundle/sections/meta.section.d.ts +39 -0
- package/dist/doctor/support-bundle/sections/meta.section.d.ts.map +1 -0
- package/dist/doctor/support-bundle/sections/meta.section.js +89 -0
- package/dist/doctor/support-bundle/sections/meta.section.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.d.ts +100 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.js +59 -0
- package/dist/doctor/support-bundle/support-bundle-section.interface.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.controller.d.ts +57 -0
- package/dist/doctor/support-bundle/support-bundle.controller.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.controller.js +141 -0
- package/dist/doctor/support-bundle/support-bundle.controller.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.options.d.ts +92 -0
- package/dist/doctor/support-bundle/support-bundle.options.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.options.js +100 -0
- package/dist/doctor/support-bundle/support-bundle.options.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.registry.d.ts +38 -0
- package/dist/doctor/support-bundle/support-bundle.registry.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.registry.js +90 -0
- package/dist/doctor/support-bundle/support-bundle.registry.js.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.service.d.ts +63 -0
- package/dist/doctor/support-bundle/support-bundle.service.d.ts.map +1 -0
- package/dist/doctor/support-bundle/support-bundle.service.js +244 -0
- package/dist/doctor/support-bundle/support-bundle.service.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/otel-core/index.d.ts +9 -0
- package/dist/otel-core/index.d.ts.map +1 -0
- package/dist/otel-core/index.js +58 -0
- package/dist/otel-core/index.js.map +1 -0
- package/dist/otel-core/metrics/gauge-provider.d.ts +44 -0
- package/dist/otel-core/metrics/gauge-provider.d.ts.map +1 -0
- package/dist/otel-core/metrics/gauge-provider.js +37 -0
- package/dist/otel-core/metrics/gauge-provider.js.map +1 -0
- package/dist/otel-core/metrics/labels.d.ts +79 -0
- package/dist/otel-core/metrics/labels.d.ts.map +1 -0
- package/dist/otel-core/metrics/labels.js +135 -0
- package/dist/otel-core/metrics/labels.js.map +1 -0
- package/dist/otel-core/metrics/metric-name.registry.d.ts +130 -0
- package/dist/otel-core/metrics/metric-name.registry.d.ts.map +1 -0
- package/dist/otel-core/metrics/metric-name.registry.js +134 -0
- package/dist/otel-core/metrics/metric-name.registry.js.map +1 -0
- package/dist/otel-core/metrics/metrics-host.service.d.ts +163 -0
- package/dist/otel-core/metrics/metrics-host.service.d.ts.map +1 -0
- package/dist/otel-core/metrics/metrics-host.service.js +344 -0
- package/dist/otel-core/metrics/metrics-host.service.js.map +1 -0
- package/dist/otel-core/metrics/otel-metrics.module.d.ts +54 -0
- package/dist/otel-core/metrics/otel-metrics.module.d.ts.map +1 -0
- package/dist/otel-core/metrics/otel-metrics.module.js +83 -0
- package/dist/otel-core/metrics/otel-metrics.module.js.map +1 -0
- package/dist/otel-core/sdk/index.d.ts +5 -0
- package/dist/otel-core/sdk/index.d.ts.map +1 -0
- package/dist/otel-core/sdk/index.js +27 -0
- package/dist/otel-core/sdk/index.js.map +1 -0
- package/dist/otel-core/sdk/initialize-otel.d.ts +126 -0
- package/dist/otel-core/sdk/initialize-otel.d.ts.map +1 -0
- package/dist/otel-core/sdk/initialize-otel.js +204 -0
- package/dist/otel-core/sdk/initialize-otel.js.map +1 -0
- package/dist/otel-core/sdk/instance-id.d.ts +29 -0
- package/dist/otel-core/sdk/instance-id.d.ts.map +1 -0
- package/dist/otel-core/sdk/instance-id.js +65 -0
- package/dist/otel-core/sdk/instance-id.js.map +1 -0
- package/dist/otel-core/sdk/service-name.d.ts +28 -0
- package/dist/otel-core/sdk/service-name.d.ts.map +1 -0
- package/dist/otel-core/sdk/service-name.js +63 -0
- package/dist/otel-core/sdk/service-name.js.map +1 -0
- package/dist/otel-core/sdk/telemetry-gate.d.ts +116 -0
- package/dist/otel-core/sdk/telemetry-gate.d.ts.map +1 -0
- package/dist/otel-core/sdk/telemetry-gate.js +297 -0
- package/dist/otel-core/sdk/telemetry-gate.js.map +1 -0
- package/dist/otel-core/spans/request-span-attributes.d.ts +58 -0
- package/dist/otel-core/spans/request-span-attributes.d.ts.map +1 -0
- package/dist/otel-core/spans/request-span-attributes.js +155 -0
- package/dist/otel-core/spans/request-span-attributes.js.map +1 -0
- package/dist/otel-core/spans/trace.decorator.d.ts +36 -0
- package/dist/otel-core/spans/trace.decorator.d.ts.map +1 -0
- package/dist/otel-core/spans/trace.decorator.js +74 -0
- package/dist/otel-core/spans/trace.decorator.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.d.ts +15 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.js +50 -0
- package/dist/telemetry/assistant/telemetry-ai-enabled.guard.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.d.ts +14 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.js +178 -0
- package/dist/telemetry/assistant/telemetry-assistant.controller.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.d.ts +147 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.js +495 -0
- package/dist/telemetry/assistant/telemetry-assistant.metrics.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.d.ts +216 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.js +1256 -0
- package/dist/telemetry/assistant/telemetry-assistant.service.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.d.ts +69 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.js +471 -0
- package/dist/telemetry/assistant/telemetry-assistant.sql.js.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.d.ts +15 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.d.ts.map +1 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.js +68 -0
- package/dist/telemetry/assistant/telemetry-assistant.sse.js.map +1 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.d.ts +92 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.d.ts.map +1 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.js +41 -0
- package/dist/telemetry/connection/dto/telemetry-connection.dto.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.d.ts +45 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.js +303 -0
- package/dist/telemetry/connection/telemetry-connection-admin.service.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.d.ts +41 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.js +187 -0
- package/dist/telemetry/connection/telemetry-connection-test.service.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.controller.d.ts +14 -0
- package/dist/telemetry/connection/telemetry-connection.controller.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.controller.js +192 -0
- package/dist/telemetry/connection/telemetry-connection.controller.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.schema.d.ts +28 -0
- package/dist/telemetry/connection/telemetry-connection.schema.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.schema.js +106 -0
- package/dist/telemetry/connection/telemetry-connection.schema.js.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.service.d.ts +197 -0
- package/dist/telemetry/connection/telemetry-connection.service.d.ts.map +1 -0
- package/dist/telemetry/connection/telemetry-connection.service.js +461 -0
- package/dist/telemetry/connection/telemetry-connection.service.js.map +1 -0
- package/dist/telemetry/dashboard/sql-literals.d.ts +19 -0
- package/dist/telemetry/dashboard/sql-literals.d.ts.map +1 -0
- package/dist/telemetry/dashboard/sql-literals.js +75 -0
- package/dist/telemetry/dashboard/sql-literals.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.d.ts +14 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.js +277 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.controller.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts +112 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js +904 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.d.ts +212 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.js +486 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.sql.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts +235 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js +269 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js.map +1 -0
- package/dist/telemetry/dashboard/verdict-policy.d.ts +51 -0
- package/dist/telemetry/dashboard/verdict-policy.d.ts.map +1 -0
- package/dist/telemetry/dashboard/verdict-policy.js +77 -0
- package/dist/telemetry/dashboard/verdict-policy.js.map +1 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.d.ts +21 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.d.ts.map +1 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.js +59 -0
- package/dist/telemetry/doctor/egress/greptimedb.egress.contributor.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.d.ts +23 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.js +69 -0
- package/dist/telemetry/doctor/telemetry-connection.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.d.ts +33 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.js +105 -0
- package/dist/telemetry/doctor/telemetry-export.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.d.ts +38 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.js +104 -0
- package/dist/telemetry/doctor/telemetry-freshness.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.d.ts +23 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.js +65 -0
- package/dist/telemetry/doctor/telemetry-reachable.doctor-check.js.map +1 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.d.ts +23 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.d.ts.map +1 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.js +91 -0
- package/dist/telemetry/doctor/telemetry-tables.doctor-check.js.map +1 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.d.ts +14 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.js +29 -0
- package/dist/telemetry/dto/telemetry-assistant.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-config.dto.d.ts +59 -0
- package/dist/telemetry/dto/telemetry-config.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-config.dto.js +18 -0
- package/dist/telemetry/dto/telemetry-config.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts +397 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.js +118 -0
- package/dist/telemetry/dto/telemetry-dashboard.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-query.dto.d.ts +44 -0
- package/dist/telemetry/dto/telemetry-query.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-query.dto.js +42 -0
- package/dist/telemetry/dto/telemetry-query.dto.js.map +1 -0
- package/dist/telemetry/dto/telemetry-status.dto.d.ts +22 -0
- package/dist/telemetry/dto/telemetry-status.dto.d.ts.map +1 -0
- package/dist/telemetry/dto/telemetry-status.dto.js +12 -0
- package/dist/telemetry/dto/telemetry-status.dto.js.map +1 -0
- package/dist/telemetry/export/parquet-writer.loader.d.ts +13 -0
- package/dist/telemetry/export/parquet-writer.loader.d.ts.map +1 -0
- package/dist/telemetry/export/parquet-writer.loader.js +29 -0
- package/dist/telemetry/export/parquet-writer.loader.js.map +1 -0
- package/dist/telemetry/export/telemetry-export.service.d.ts +39 -0
- package/dist/telemetry/export/telemetry-export.service.d.ts.map +1 -0
- package/dist/telemetry/export/telemetry-export.service.js +185 -0
- package/dist/telemetry/export/telemetry-export.service.js.map +1 -0
- package/dist/telemetry/greptime/greptime-host.d.ts +44 -0
- package/dist/telemetry/greptime/greptime-host.d.ts.map +1 -0
- package/dist/telemetry/greptime/greptime-host.js +114 -0
- package/dist/telemetry/greptime/greptime-host.js.map +1 -0
- package/dist/telemetry/greptime/greptime.client.d.ts +171 -0
- package/dist/telemetry/greptime/greptime.client.d.ts.map +1 -0
- package/dist/telemetry/greptime/greptime.client.js +352 -0
- package/dist/telemetry/greptime/greptime.client.js.map +1 -0
- package/dist/telemetry/greptime/greptime.errors.d.ts +59 -0
- package/dist/telemetry/greptime/greptime.errors.d.ts.map +1 -0
- package/dist/telemetry/greptime/greptime.errors.js +100 -0
- package/dist/telemetry/greptime/greptime.errors.js.map +1 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.d.ts +27 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.d.ts.map +1 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.js +123 -0
- package/dist/telemetry/handlers/telemetry-retention.handler.js.map +1 -0
- package/dist/telemetry/index.d.ts +37 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +97 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/internal/blank-secret.d.ts +3 -0
- package/dist/telemetry/internal/blank-secret.d.ts.map +1 -0
- package/dist/telemetry/internal/blank-secret.js +14 -0
- package/dist/telemetry/internal/blank-secret.js.map +1 -0
- package/dist/telemetry/internal/csv.d.ts +9 -0
- package/dist/telemetry/internal/csv.d.ts.map +1 -0
- package/dist/telemetry/internal/csv.js +23 -0
- package/dist/telemetry/internal/csv.js.map +1 -0
- package/dist/telemetry/internal/sse.d.ts +23 -0
- package/dist/telemetry/internal/sse.d.ts.map +1 -0
- package/dist/telemetry/internal/sse.js +43 -0
- package/dist/telemetry/internal/sse.js.map +1 -0
- package/dist/telemetry/metrics/groups/database.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/database.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/database.metric-group.js +159 -0
- package/dist/telemetry/metrics/groups/database.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/host.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/host.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/host.metric-group.js +146 -0
- package/dist/telemetry/metrics/groups/host.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.js +159 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.js +144 -0
- package/dist/telemetry/metrics/groups/pipeline.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.js +163 -0
- package/dist/telemetry/metrics/groups/queue.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.d.ts +7 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.js +103 -0
- package/dist/telemetry/metrics/groups/uptime.metric-group.js.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.d.ts +324 -0
- package/dist/telemetry/metrics/metric-catalog.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.d.ts +30 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.js +37 -0
- package/dist/telemetry/metrics/metric-catalog.helpers.js.map +1 -0
- package/dist/telemetry/metrics/metric-catalog.js +180 -0
- package/dist/telemetry/metrics/metric-catalog.js.map +1 -0
- package/dist/telemetry/metrics/metric-group-registry.service.d.ts +59 -0
- package/dist/telemetry/metrics/metric-group-registry.service.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group-registry.service.js +99 -0
- package/dist/telemetry/metrics/metric-group-registry.service.js.map +1 -0
- package/dist/telemetry/metrics/metric-group.d.ts +113 -0
- package/dist/telemetry/metrics/metric-group.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group.js +647 -0
- package/dist/telemetry/metrics/metric-group.js.map +1 -0
- package/dist/telemetry/metrics/metric-group.manifest.d.ts +2 -0
- package/dist/telemetry/metrics/metric-group.manifest.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group.manifest.js +30 -0
- package/dist/telemetry/metrics/metric-group.manifest.js.map +1 -0
- package/dist/telemetry/metrics/metric-group.registry.d.ts +109 -0
- package/dist/telemetry/metrics/metric-group.registry.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-group.registry.js +181 -0
- package/dist/telemetry/metrics/metric-group.registry.js.map +1 -0
- package/dist/telemetry/metrics/metric-sql.d.ts +98 -0
- package/dist/telemetry/metrics/metric-sql.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-sql.js +259 -0
- package/dist/telemetry/metrics/metric-sql.js.map +1 -0
- package/dist/telemetry/metrics/metric-values.d.ts +19 -0
- package/dist/telemetry/metrics/metric-values.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-values.js +97 -0
- package/dist/telemetry/metrics/metric-values.js.map +1 -0
- package/dist/telemetry/metrics/metric-verdict.d.ts +20 -0
- package/dist/telemetry/metrics/metric-verdict.d.ts.map +1 -0
- package/dist/telemetry/metrics/metric-verdict.js +218 -0
- package/dist/telemetry/metrics/metric-verdict.js.map +1 -0
- package/dist/telemetry/ports.d.ts +575 -0
- package/dist/telemetry/ports.d.ts.map +1 -0
- package/dist/telemetry/ports.js +78 -0
- package/dist/telemetry/ports.js.map +1 -0
- package/dist/telemetry/query/sql-guard.d.ts +71 -0
- package/dist/telemetry/query/sql-guard.d.ts.map +1 -0
- package/dist/telemetry/query/sql-guard.js +258 -0
- package/dist/telemetry/query/sql-guard.js.map +1 -0
- package/dist/telemetry/query/telemetry-availability.d.ts +11 -0
- package/dist/telemetry/query/telemetry-availability.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-availability.js +55 -0
- package/dist/telemetry/query/telemetry-availability.js.map +1 -0
- package/dist/telemetry/query/telemetry-query.errors.d.ts +48 -0
- package/dist/telemetry/query/telemetry-query.errors.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-query.errors.js +100 -0
- package/dist/telemetry/query/telemetry-query.errors.js.map +1 -0
- package/dist/telemetry/query/telemetry-query.service.d.ts +57 -0
- package/dist/telemetry/query/telemetry-query.service.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-query.service.js +194 -0
- package/dist/telemetry/query/telemetry-query.service.js.map +1 -0
- package/dist/telemetry/query/telemetry-schema.service.d.ts +36 -0
- package/dist/telemetry/query/telemetry-schema.service.d.ts.map +1 -0
- package/dist/telemetry/query/telemetry-schema.service.js +154 -0
- package/dist/telemetry/query/telemetry-schema.service.js.map +1 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +29 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts.map +1 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.js +27 -0
- package/dist/telemetry/stack/dto/telemetry-stack.dto.js.map +1 -0
- package/dist/telemetry/stack/stack-agent.client.d.ts +76 -0
- package/dist/telemetry/stack/stack-agent.client.d.ts.map +1 -0
- package/dist/telemetry/stack/stack-agent.client.js +208 -0
- package/dist/telemetry/stack/stack-agent.client.js.map +1 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.d.ts +43 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.d.ts.map +1 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.js +159 -0
- package/dist/telemetry/stack/telemetry-stack-deploy.handler.js.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.controller.d.ts +14 -0
- package/dist/telemetry/stack/telemetry-stack.controller.d.ts.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.controller.js +107 -0
- package/dist/telemetry/stack/telemetry-stack.controller.js.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.service.d.ts +19 -0
- package/dist/telemetry/stack/telemetry-stack.service.d.ts.map +1 -0
- package/dist/telemetry/stack/telemetry-stack.service.js +122 -0
- package/dist/telemetry/stack/telemetry-stack.service.js.map +1 -0
- package/dist/telemetry/tasks/telemetry-retention.task.d.ts +8 -0
- package/dist/telemetry/tasks/telemetry-retention.task.d.ts.map +1 -0
- package/dist/telemetry/tasks/telemetry-retention.task.js +61 -0
- package/dist/telemetry/tasks/telemetry-retention.task.js.map +1 -0
- package/dist/telemetry/telemetry-admin.controller.d.ts +14 -0
- package/dist/telemetry/telemetry-admin.controller.d.ts.map +1 -0
- package/dist/telemetry/telemetry-admin.controller.js +148 -0
- package/dist/telemetry/telemetry-admin.controller.js.map +1 -0
- package/dist/telemetry/telemetry-config.controller.d.ts +14 -0
- package/dist/telemetry/telemetry-config.controller.d.ts.map +1 -0
- package/dist/telemetry/telemetry-config.controller.js +73 -0
- package/dist/telemetry/telemetry-config.controller.js.map +1 -0
- package/dist/telemetry/telemetry-explorer.controller.d.ts +14 -0
- package/dist/telemetry/telemetry-explorer.controller.d.ts.map +1 -0
- package/dist/telemetry/telemetry-explorer.controller.js +193 -0
- package/dist/telemetry/telemetry-explorer.controller.js.map +1 -0
- package/dist/telemetry/telemetry-settings.service.d.ts +85 -0
- package/dist/telemetry/telemetry-settings.service.d.ts.map +1 -0
- package/dist/telemetry/telemetry-settings.service.js +278 -0
- package/dist/telemetry/telemetry-settings.service.js.map +1 -0
- package/dist/telemetry/telemetry-status.service.d.ts +28 -0
- package/dist/telemetry/telemetry-status.service.d.ts.map +1 -0
- package/dist/telemetry/telemetry-status.service.js +185 -0
- package/dist/telemetry/telemetry-status.service.js.map +1 -0
- package/dist/telemetry/telemetry-support-bundle.section.d.ts +163 -0
- package/dist/telemetry/telemetry-support-bundle.section.d.ts.map +1 -0
- package/dist/telemetry/telemetry-support-bundle.section.js +187 -0
- package/dist/telemetry/telemetry-support-bundle.section.js.map +1 -0
- package/dist/telemetry/telemetry.module.d.ts +35 -0
- package/dist/telemetry/telemetry.module.d.ts.map +1 -0
- package/dist/telemetry/telemetry.module.js +210 -0
- package/dist/telemetry/telemetry.module.js.map +1 -0
- package/dist/telemetry/telemetry.options.d.ts +176 -0
- package/dist/telemetry/telemetry.options.d.ts.map +1 -0
- package/dist/telemetry/telemetry.options.js +246 -0
- package/dist/telemetry/telemetry.options.js.map +1 -0
- package/dist/telemetry/telemetry.permissions.d.ts +76 -0
- package/dist/telemetry/telemetry.permissions.d.ts.map +1 -0
- package/dist/telemetry/telemetry.permissions.js +85 -0
- package/dist/telemetry/telemetry.permissions.js.map +1 -0
- package/dist/telemetry/telemetry.settings.d.ts +79 -0
- package/dist/telemetry/telemetry.settings.d.ts.map +1 -0
- package/dist/telemetry/telemetry.settings.js +92 -0
- package/dist/telemetry/telemetry.settings.js.map +1 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.d.ts +17 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.d.ts.map +1 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.js +128 -0
- package/dist/telemetry/testing/coach-metric-group.fixture.js.map +1 -0
- package/dist/telemetry/testing/conformance.d.ts +257 -0
- package/dist/telemetry/testing/conformance.d.ts.map +1 -0
- package/dist/telemetry/testing/conformance.js +626 -0
- package/dist/telemetry/testing/conformance.js.map +1 -0
- package/dist/telemetry/testing/index.d.ts +10 -0
- package/dist/telemetry/testing/index.d.ts.map +1 -0
- package/dist/telemetry/testing/index.js +41 -0
- package/dist/telemetry/testing/index.js.map +1 -0
- package/dist/telemetry/testing/metric-schema.fixture.d.ts +73 -0
- package/dist/telemetry/testing/metric-schema.fixture.d.ts.map +1 -0
- package/dist/telemetry/testing/metric-schema.fixture.js +362 -0
- package/dist/telemetry/testing/metric-schema.fixture.js.map +1 -0
- package/dist/telemetry/testing/stub-ports.d.ts +46 -0
- package/dist/telemetry/testing/stub-ports.d.ts.map +1 -0
- package/dist/telemetry/testing/stub-ports.js +119 -0
- package/dist/telemetry/testing/stub-ports.js.map +1 -0
- package/dist/testing/conformance-suite.d.ts +106 -0
- package/dist/testing/conformance-suite.d.ts.map +1 -0
- package/dist/testing/conformance-suite.js +8 -0
- package/dist/testing/conformance-suite.js.map +1 -0
- package/dist/testing/conformance-suites.d.ts +14 -0
- package/dist/testing/conformance-suites.d.ts.map +1 -0
- package/dist/testing/conformance-suites.js +27 -0
- package/dist/testing/conformance-suites.js.map +1 -0
- package/dist/testing/host/in-memory-audit-sink.d.ts +23 -0
- package/dist/testing/host/in-memory-audit-sink.d.ts.map +1 -0
- package/dist/testing/host/in-memory-audit-sink.js +30 -0
- package/dist/testing/host/in-memory-audit-sink.js.map +1 -0
- package/dist/testing/host/in-memory-system-settings-store.d.ts +31 -0
- package/dist/testing/host/in-memory-system-settings-store.d.ts.map +1 -0
- package/dist/testing/host/in-memory-system-settings-store.js +54 -0
- package/dist/testing/host/in-memory-system-settings-store.js.map +1 -0
- package/dist/testing/host/index.d.ts +4 -0
- package/dist/testing/host/index.d.ts.map +1 -0
- package/dist/testing/host/index.js +13 -0
- package/dist/testing/host/index.js.map +1 -0
- package/dist/testing/host/test-platform-host.d.ts +35 -0
- package/dist/testing/host/test-platform-host.d.ts.map +1 -0
- package/dist/testing/host/test-platform-host.js +81 -0
- package/dist/testing/host/test-platform-host.js.map +1 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +32 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/prisma-schema.d.ts +99 -0
- package/dist/testing/prisma-schema.d.ts.map +1 -0
- package/dist/testing/prisma-schema.js +175 -0
- package/dist/testing/prisma-schema.js.map +1 -0
- package/dist/testing/run-platform-conformance.d.ts +70 -0
- package/dist/testing/run-platform-conformance.d.ts.map +1 -0
- package/dist/testing/run-platform-conformance.js +77 -0
- package/dist/testing/run-platform-conformance.js.map +1 -0
- package/dist/testing/suites/cron-enqueue-only.d.ts +46 -0
- package/dist/testing/suites/cron-enqueue-only.d.ts.map +1 -0
- package/dist/testing/suites/cron-enqueue-only.js +177 -0
- package/dist/testing/suites/cron-enqueue-only.js.map +1 -0
- package/dist/testing/suites/user-owned-data.d.ts +86 -0
- package/dist/testing/suites/user-owned-data.d.ts.map +1 -0
- package/dist/testing/suites/user-owned-data.js +329 -0
- package/dist/testing/suites/user-owned-data.js.map +1 -0
- package/package.json +129 -4
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { type ExportResult } from '@opentelemetry/core';
|
|
2
|
+
import { type Resource } from '@opentelemetry/resources';
|
|
3
|
+
import type { LogRecordExporter, ReadableLogRecord } from '@opentelemetry/sdk-logs';
|
|
4
|
+
import { AggregationTemporality, InstrumentType, type AggregationOption, type PushMetricExporter, type ResourceMetrics } from '@opentelemetry/sdk-metrics';
|
|
5
|
+
import type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
|
|
6
|
+
/**
|
|
7
|
+
* The shape of {@link telemetryGate}.
|
|
8
|
+
*
|
|
9
|
+
* @stability stable
|
|
10
|
+
*/
|
|
11
|
+
export interface TelemetryGate {
|
|
12
|
+
/** Whether exporting is allowed right now. Read at export time, per batch. */
|
|
13
|
+
isEnabled(): boolean;
|
|
14
|
+
/** Opens (`true`) or closes (`false`) the gate; applies to the next batch exported. */
|
|
15
|
+
setEnabled(next: boolean): void;
|
|
16
|
+
/** The instance identifier stamped on everything the gate lets through. */
|
|
17
|
+
instanceId(): string;
|
|
18
|
+
/** Replaces the instance identifier. Callers pass an already-resolved value (`resolveTelemetryInstanceId`). */
|
|
19
|
+
setInstanceId(next: string): void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Process-wide runtime export switch (starts closed, `false`) and the instance
|
|
23
|
+
* identifier stamped on everything it lets through (starts at
|
|
24
|
+
* `DEFAULT_INSTANCE_ID` until `initializeOtel({ instanceId })` or the app's
|
|
25
|
+
* settings set it).
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* telemetryGate.setInstanceId(resolveTelemetryInstanceId(settings.instanceId, APP_SLUG));
|
|
30
|
+
* telemetryGate.setEnabled(settings.enabled);
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @extensionPoint hook
|
|
34
|
+
* @stability stable
|
|
35
|
+
*/
|
|
36
|
+
export declare const telemetryGate: TelemetryGate;
|
|
37
|
+
/**
|
|
38
|
+
* `resource` with `app.instance.id` set to the current instance id: the SAME
|
|
39
|
+
* object for every call with the same source and id (see the file header: the
|
|
40
|
+
* OTLP transformer groups by resource identity).
|
|
41
|
+
*
|
|
42
|
+
* @param resource - The SDK resource a span, log record or metric batch carries.
|
|
43
|
+
* @returns The merged resource, cached per (source, id).
|
|
44
|
+
*
|
|
45
|
+
* @stability experimental
|
|
46
|
+
*/
|
|
47
|
+
export declare function stampResource(resource: Resource): Resource;
|
|
48
|
+
/**
|
|
49
|
+
* Forwards spans to `inner`, stamped with the instance id, only while the
|
|
50
|
+
* telemetry gate is open. A closed gate acknowledges each batch as SUCCESS.
|
|
51
|
+
*
|
|
52
|
+
* @stability stable
|
|
53
|
+
*/
|
|
54
|
+
export declare class GatedSpanExporter implements SpanExporter {
|
|
55
|
+
private readonly inner;
|
|
56
|
+
constructor(inner: SpanExporter);
|
|
57
|
+
/** Drops the batch (SUCCESS) while the gate is closed; otherwise stamps and delegates. */
|
|
58
|
+
export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
|
|
59
|
+
/** Always delegates, whatever the gate says: a shutdown must flush even when export is off. */
|
|
60
|
+
shutdown(): Promise<void>;
|
|
61
|
+
/** Always delegates, whatever the gate says. */
|
|
62
|
+
forceFlush(): Promise<void>;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Forwards log records to `inner`, stamped with the instance id, only while
|
|
66
|
+
* the telemetry gate is open. A closed gate acknowledges each batch as SUCCESS.
|
|
67
|
+
*
|
|
68
|
+
* @stability stable
|
|
69
|
+
*/
|
|
70
|
+
export declare class GatedLogRecordExporter implements LogRecordExporter {
|
|
71
|
+
private readonly inner;
|
|
72
|
+
constructor(inner: LogRecordExporter);
|
|
73
|
+
/** Drops the batch (SUCCESS) while the gate is closed; otherwise stamps and delegates. */
|
|
74
|
+
export(logs: ReadableLogRecord[], resultCallback: (result: ExportResult) => void): void;
|
|
75
|
+
/** Always delegates, whatever the gate says: a shutdown must flush even when export is off. */
|
|
76
|
+
shutdown(): Promise<void>;
|
|
77
|
+
/** Always delegates, whatever the gate says. */
|
|
78
|
+
forceFlush(): Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Forwards metrics to `inner`, stamped with the instance id, only while the
|
|
82
|
+
* telemetry gate is open.
|
|
83
|
+
*
|
|
84
|
+
* The optional aggregation selector is delegated so the reader keeps the inner
|
|
85
|
+
* exporter's aggregation preferences, and so is its temporality (OTLP defaults
|
|
86
|
+
* to cumulative) for every instrument EXCEPT gauges: wrapping must not change
|
|
87
|
+
* what is measured, only whether it is sent.
|
|
88
|
+
*
|
|
89
|
+
* ⚠ GAUGES ARE SELECTED DELTA, AND THIS IS NOT A CHANGE TO THE DATA. An OTLP
|
|
90
|
+
* gauge carries no temporality on the wire; the choice only decides what the
|
|
91
|
+
* SDK keeps between collections. Under cumulative, `@opentelemetry/sdk-metrics`
|
|
92
|
+
* (2.x, verified) re-exports EVERY attribute set a gauge callback ever
|
|
93
|
+
* observed, at its last value, on every later collection — so a worker node
|
|
94
|
+
* that went offline, or a job type whose backlog drained, would keep reporting
|
|
95
|
+
* its final reading with a fresh timestamp for the life of the process. Under
|
|
96
|
+
* delta, a collection exports exactly what the callback observed this time.
|
|
97
|
+
* The `app.nodes.*` per-node gauges (#606) depend on it: a node dropping out of
|
|
98
|
+
* the exported set must disappear from the store, not freeze.
|
|
99
|
+
*
|
|
100
|
+
* @stability stable
|
|
101
|
+
*/
|
|
102
|
+
export declare class GatedPushMetricExporter implements PushMetricExporter {
|
|
103
|
+
private readonly inner;
|
|
104
|
+
/** Delta for gauges, the inner exporter's choice (default cumulative) for everything else. */
|
|
105
|
+
readonly selectAggregationTemporality: (instrumentType: InstrumentType) => AggregationTemporality;
|
|
106
|
+
/** The inner exporter's aggregation selector, when it has one. */
|
|
107
|
+
readonly selectAggregation?: (instrumentType: InstrumentType) => AggregationOption;
|
|
108
|
+
constructor(inner: PushMetricExporter);
|
|
109
|
+
/** Drops the batch (SUCCESS) while the gate is closed; otherwise stamps and delegates. */
|
|
110
|
+
export(metrics: ResourceMetrics, resultCallback: (result: ExportResult) => void): void;
|
|
111
|
+
/** Always delegates, whatever the gate says: a shutdown must flush even when export is off. */
|
|
112
|
+
shutdown(): Promise<void>;
|
|
113
|
+
/** Always delegates, whatever the gate says. */
|
|
114
|
+
forceFlush(): Promise<void>;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=telemetry-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-gate.d.ts","sourceRoot":"","sources":["../../../src/otel-core/sdk/telemetry-gate.ts"],"names":[],"mappings":"AA+GA,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EACL,sBAAsB,EACtB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACrB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAOhF;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,SAAS,IAAI,OAAO,CAAC;IACrB,uFAAuF;IACvF,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,2EAA2E;IAC3E,UAAU,IAAI,MAAM,CAAC;IACrB,+GAA+G;IAC/G,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,EAAE,aAa3B,CAAC;AAKF;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAY1D;AAeD;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,YAAY;IAEhD,0FAA0F;IAC1F,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAQnF,+FAA+F;IAC/F,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,gDAAgD;IAChD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAED;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,iBAAiB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,iBAAiB;IAErD,0FAA0F;IAC1F,MAAM,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAQvF,+FAA+F;IAC/F,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,gDAAgD;IAChD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,uBAAwB,YAAW,kBAAkB;IAMpD,OAAO,CAAC,QAAQ,CAAC,KAAK;IALlC,8FAA8F;IAC9F,QAAQ,CAAC,4BAA4B,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,sBAAsB,CAAC;IAClG,kEAAkE;IAClE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,KAAK,iBAAiB,CAAC;gBAEtD,KAAK,EAAE,kBAAkB;IAWtD,0FAA0F;IAC1F,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAQtF,+FAA+F;IAC/F,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,gDAAgD;IAChD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// The runtime telemetry gate (issue #532, epic #528; packaged by issue #700)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// TWO SWITCHES, AND THEY ARE NOT THE SAME SWITCH
|
|
7
|
+
// -----------------------------------------------------------------------------
|
|
8
|
+
//
|
|
9
|
+
// 1. `OTEL_ENABLED` (environment, infra). Decides whether the OpenTelemetry
|
|
10
|
+
// SDK is installed in this process AT ALL — read once by
|
|
11
|
+
// `initializeOtel()` (`initialize-otel.ts`, called from the app's
|
|
12
|
+
// `instrumentation.ts`) before Nest exists. It is `true` when the
|
|
13
|
+
// deployment ships the telemetry overlay (collector + storage backend),
|
|
14
|
+
// and it cannot change without a restart, because auto-instrumentation
|
|
15
|
+
// can only patch modules required AFTER `sdk.start()`.
|
|
16
|
+
//
|
|
17
|
+
// 2. `telemetry.enabled` (system setting, admin UI). Decides whether what
|
|
18
|
+
// the installed SDK produces is actually EXPORTED. An administrator
|
|
19
|
+
// flips it at runtime with no restart; the app's telemetry module calls
|
|
20
|
+
// `telemetryGate.setEnabled()` on boot (once settings have loaded) and on
|
|
21
|
+
// every settings refresh.
|
|
22
|
+
//
|
|
23
|
+
// The SDK keeps running either way — spans are still created, log records
|
|
24
|
+
// still correlated, metrics still aggregated — and the gated exporters below
|
|
25
|
+
// simply drop each batch while the gate is closed. Dropping is the intended
|
|
26
|
+
// behaviour, not a failure: a batch is acknowledged as SUCCESS so the
|
|
27
|
+
// processors neither retry it nor log an export error for it.
|
|
28
|
+
//
|
|
29
|
+
// The gate is read at EXPORT time, not when a span or record is created: a
|
|
30
|
+
// batch that was queued while closed and is flushed after the gate opens is
|
|
31
|
+
// sent. At worst that is one batch interval (the batch processors' scheduled
|
|
32
|
+
// delay, or the metric reader's 60s) on either side of a toggle.
|
|
33
|
+
//
|
|
34
|
+
// THE GATE STARTS CLOSED. Nothing leaves the process until settings have been
|
|
35
|
+
// read and an administrator's choice is known; a deployment that has switched
|
|
36
|
+
// telemetry off must not leak the first minute of every boot.
|
|
37
|
+
//
|
|
38
|
+
// THE INSTANCE IDENTIFIER IS STAMPED HERE TOO (issue #565)
|
|
39
|
+
// -----------------------------------------------------------------------------
|
|
40
|
+
//
|
|
41
|
+
// Every exported span, log record and metric batch carries the resource
|
|
42
|
+
// attribute `app.instance.id` (`instance-id.ts`), which an administrator
|
|
43
|
+
// changes at runtime (`telemetry.instanceId`). The SDK resource cannot carry
|
|
44
|
+
// it: `initializeOtel()` hands the resource to `NodeSDK` once, before
|
|
45
|
+
// `sdk.start()`, and it is immutable from then on — every span and record
|
|
46
|
+
// holds a reference to that one object. A runtime-changeable identity must
|
|
47
|
+
// therefore be applied at EXPORT time, and the gate is already the one place
|
|
48
|
+
// every batch passes through on its way out. The telemetry module pushes the
|
|
49
|
+
// resolved value with `telemetryGate.setInstanceId()` at the same moments it
|
|
50
|
+
// pushes `setEnabled()`: on boot, every refresh interval, and after a save.
|
|
51
|
+
//
|
|
52
|
+
// The value is read per batch, like the gate itself, so a change applies to
|
|
53
|
+
// the next batch exported. It starts at the app's default rather than empty
|
|
54
|
+
// (`initializeOtel({ instanceId })` seeds it with the app's slug before
|
|
55
|
+
// `sdk.start()`; the package's own placeholder is `DEFAULT_INSTANCE_ID`), so
|
|
56
|
+
// the first batch after the gate opens is never unlabelled even if it races
|
|
57
|
+
// the first settings read.
|
|
58
|
+
//
|
|
59
|
+
// HOW A RECORD IS RE-LABELLED WITHOUT TOUCHING IT
|
|
60
|
+
// -----------------------------------------------------------------------------
|
|
61
|
+
//
|
|
62
|
+
// - Metrics: `ResourceMetrics` is a plain object built per collection, so
|
|
63
|
+
// the batch is shallow-copied with a replaced `resource`.
|
|
64
|
+
//
|
|
65
|
+
// - Spans and log records are SDK class instances (`SpanImpl`,
|
|
66
|
+
// `LogRecordImpl`), shared with every other processor, and much of what
|
|
67
|
+
// the OTLP transformer reads is a prototype GETTER over an underscored
|
|
68
|
+
// field (`droppedAttributesCount`, `hrTime`, `severityText`, `body`,
|
|
69
|
+
// `spanContext`…). A spread would lose every getter; mutating the
|
|
70
|
+
// original would leak the label into other processors. So each record is
|
|
71
|
+
// presented as `Object.create(record)` with ONE own property, `resource`:
|
|
72
|
+
// every getter and method still resolves through the prototype chain with
|
|
73
|
+
// `this` bound to the wrapper, which falls through to the original's
|
|
74
|
+
// fields. (Neither class uses `#private` fields, which a wrapper could not
|
|
75
|
+
// reach — checked against sdk-trace / sdk-logs 0.221.)
|
|
76
|
+
//
|
|
77
|
+
// - The OTLP transformer (`@opentelemetry/otlp-transformer`, `trace/
|
|
78
|
+
// internal.js` and `logs/internal.js`) groups records into
|
|
79
|
+
// `ResourceSpans` / `ResourceLogs` with a `Map` KEYED BY THE RESOURCE
|
|
80
|
+
// OBJECT'S IDENTITY. A fresh merged resource per record would emit one
|
|
81
|
+
// `ResourceSpans` per span. The merged resource is therefore cached per
|
|
82
|
+
// (original resource, instance id) pair in a `WeakMap`, so every record in
|
|
83
|
+
// a batch that shared a resource still shares one — and a change of id
|
|
84
|
+
// simply replaces the entry.
|
|
85
|
+
//
|
|
86
|
+
// - `resource.merge(other)` gives `other`'s attributes precedence
|
|
87
|
+
// (`ResourceImpl.merge` lists the incoming attributes first and
|
|
88
|
+
// `attributes` keeps the first of each key), so the stamped id wins over
|
|
89
|
+
// anything a detector or `OTEL_RESOURCE_ATTRIBUTES` put there, and every
|
|
90
|
+
// other attribute (`service.name`, …) is preserved.
|
|
91
|
+
//
|
|
92
|
+
// - The batch processors settle a resource's async (detector) attributes
|
|
93
|
+
// BEFORE calling `export`, so the merged copy is built from settled
|
|
94
|
+
// values. A cache entry built while its source was still pending is
|
|
95
|
+
// rebuilt once the source has settled.
|
|
96
|
+
//
|
|
97
|
+
// SAFE TO IMPORT BEFORE THE SDK STARTS
|
|
98
|
+
// -----------------------------------------------------------------------------
|
|
99
|
+
//
|
|
100
|
+
// Like `service-name.ts`, this module is part of the `sdk` subpath, loaded
|
|
101
|
+
// ahead of `sdk.start()`. It is kept trivial and side-effect-free on purpose:
|
|
102
|
+
// module-level state, three thin wrapper classes, and imports only from the
|
|
103
|
+
// OpenTelemetry SDK packages themselves and `instance-id.ts` (never `http`,
|
|
104
|
+
// `pg`, `pino` or any other module the auto-instrumentation needs to patch).
|
|
105
|
+
// There is no Nest DI here because Nest does not exist yet when this runs.
|
|
106
|
+
//
|
|
107
|
+
// ONE COPY PER PROCESS. The gate is module-level state: two copies of
|
|
108
|
+
// `@marinoscar/platform-api` in one process would be two gates, and the app
|
|
109
|
+
// would open one while the SDK exports through the other. The platform
|
|
110
|
+
// single-instance check (issue #695) guards the package name.
|
|
111
|
+
// =============================================================================
|
|
112
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
113
|
+
exports.GatedPushMetricExporter = exports.GatedLogRecordExporter = exports.GatedSpanExporter = exports.telemetryGate = void 0;
|
|
114
|
+
exports.stampResource = stampResource;
|
|
115
|
+
const core_1 = require("@opentelemetry/core");
|
|
116
|
+
const resources_1 = require("@opentelemetry/resources");
|
|
117
|
+
const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
|
|
118
|
+
const instance_id_1 = require("./instance-id");
|
|
119
|
+
let enabled = false;
|
|
120
|
+
let instanceId = instance_id_1.DEFAULT_INSTANCE_ID;
|
|
121
|
+
/**
|
|
122
|
+
* Process-wide runtime export switch (starts closed, `false`) and the instance
|
|
123
|
+
* identifier stamped on everything it lets through (starts at
|
|
124
|
+
* `DEFAULT_INSTANCE_ID` until `initializeOtel({ instanceId })` or the app's
|
|
125
|
+
* settings set it).
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```ts
|
|
129
|
+
* telemetryGate.setInstanceId(resolveTelemetryInstanceId(settings.instanceId, APP_SLUG));
|
|
130
|
+
* telemetryGate.setEnabled(settings.enabled);
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* @extensionPoint hook
|
|
134
|
+
* @stability stable
|
|
135
|
+
*/
|
|
136
|
+
exports.telemetryGate = {
|
|
137
|
+
isEnabled() {
|
|
138
|
+
return enabled;
|
|
139
|
+
},
|
|
140
|
+
setEnabled(next) {
|
|
141
|
+
enabled = next;
|
|
142
|
+
},
|
|
143
|
+
instanceId() {
|
|
144
|
+
return instanceId;
|
|
145
|
+
},
|
|
146
|
+
setInstanceId(next) {
|
|
147
|
+
instanceId = next;
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
/** Per source resource: the merged copy last built, and for which id. */
|
|
151
|
+
const stamped = new WeakMap();
|
|
152
|
+
/**
|
|
153
|
+
* `resource` with `app.instance.id` set to the current instance id: the SAME
|
|
154
|
+
* object for every call with the same source and id (see the file header: the
|
|
155
|
+
* OTLP transformer groups by resource identity).
|
|
156
|
+
*
|
|
157
|
+
* @param resource - The SDK resource a span, log record or metric batch carries.
|
|
158
|
+
* @returns The merged resource, cached per (source, id).
|
|
159
|
+
*
|
|
160
|
+
* @stability experimental
|
|
161
|
+
*/
|
|
162
|
+
function stampResource(resource) {
|
|
163
|
+
const id = instanceId;
|
|
164
|
+
const hit = stamped.get(resource);
|
|
165
|
+
if (hit && hit.id === id && !(hit.merged.asyncAttributesPending && !resource.asyncAttributesPending)) {
|
|
166
|
+
return hit.merged;
|
|
167
|
+
}
|
|
168
|
+
const merged = resource.merge((0, resources_1.resourceFromAttributes)({ [instance_id_1.ATTR_APP_INSTANCE_ID]: id }));
|
|
169
|
+
stamped.set(resource, { id, merged });
|
|
170
|
+
return merged;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* `record` presented with a stamped `resource`, without copying or mutating
|
|
174
|
+
* it: an object whose prototype IS the record, so getters and methods still
|
|
175
|
+
* work (see the header).
|
|
176
|
+
*/
|
|
177
|
+
function withStampedResource(record) {
|
|
178
|
+
return Object.create(record, {
|
|
179
|
+
resource: { value: stampResource(record.resource), enumerable: true },
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
const DROPPED = { code: core_1.ExportResultCode.SUCCESS };
|
|
183
|
+
/**
|
|
184
|
+
* Forwards spans to `inner`, stamped with the instance id, only while the
|
|
185
|
+
* telemetry gate is open. A closed gate acknowledges each batch as SUCCESS.
|
|
186
|
+
*
|
|
187
|
+
* @stability stable
|
|
188
|
+
*/
|
|
189
|
+
class GatedSpanExporter {
|
|
190
|
+
inner;
|
|
191
|
+
constructor(inner) {
|
|
192
|
+
this.inner = inner;
|
|
193
|
+
}
|
|
194
|
+
/** Drops the batch (SUCCESS) while the gate is closed; otherwise stamps and delegates. */
|
|
195
|
+
export(spans, resultCallback) {
|
|
196
|
+
if (!exports.telemetryGate.isEnabled()) {
|
|
197
|
+
resultCallback(DROPPED);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this.inner.export(spans.map(withStampedResource), resultCallback);
|
|
201
|
+
}
|
|
202
|
+
/** Always delegates, whatever the gate says: a shutdown must flush even when export is off. */
|
|
203
|
+
shutdown() {
|
|
204
|
+
return this.inner.shutdown();
|
|
205
|
+
}
|
|
206
|
+
/** Always delegates, whatever the gate says. */
|
|
207
|
+
forceFlush() {
|
|
208
|
+
return this.inner.forceFlush ? this.inner.forceFlush() : Promise.resolve();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
exports.GatedSpanExporter = GatedSpanExporter;
|
|
212
|
+
/**
|
|
213
|
+
* Forwards log records to `inner`, stamped with the instance id, only while
|
|
214
|
+
* the telemetry gate is open. A closed gate acknowledges each batch as SUCCESS.
|
|
215
|
+
*
|
|
216
|
+
* @stability stable
|
|
217
|
+
*/
|
|
218
|
+
class GatedLogRecordExporter {
|
|
219
|
+
inner;
|
|
220
|
+
constructor(inner) {
|
|
221
|
+
this.inner = inner;
|
|
222
|
+
}
|
|
223
|
+
/** Drops the batch (SUCCESS) while the gate is closed; otherwise stamps and delegates. */
|
|
224
|
+
export(logs, resultCallback) {
|
|
225
|
+
if (!exports.telemetryGate.isEnabled()) {
|
|
226
|
+
resultCallback(DROPPED);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
this.inner.export(logs.map(withStampedResource), resultCallback);
|
|
230
|
+
}
|
|
231
|
+
/** Always delegates, whatever the gate says: a shutdown must flush even when export is off. */
|
|
232
|
+
shutdown() {
|
|
233
|
+
return this.inner.shutdown();
|
|
234
|
+
}
|
|
235
|
+
/** Always delegates, whatever the gate says. */
|
|
236
|
+
forceFlush() {
|
|
237
|
+
return this.inner.forceFlush();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.GatedLogRecordExporter = GatedLogRecordExporter;
|
|
241
|
+
/**
|
|
242
|
+
* Forwards metrics to `inner`, stamped with the instance id, only while the
|
|
243
|
+
* telemetry gate is open.
|
|
244
|
+
*
|
|
245
|
+
* The optional aggregation selector is delegated so the reader keeps the inner
|
|
246
|
+
* exporter's aggregation preferences, and so is its temporality (OTLP defaults
|
|
247
|
+
* to cumulative) for every instrument EXCEPT gauges: wrapping must not change
|
|
248
|
+
* what is measured, only whether it is sent.
|
|
249
|
+
*
|
|
250
|
+
* ⚠ GAUGES ARE SELECTED DELTA, AND THIS IS NOT A CHANGE TO THE DATA. An OTLP
|
|
251
|
+
* gauge carries no temporality on the wire; the choice only decides what the
|
|
252
|
+
* SDK keeps between collections. Under cumulative, `@opentelemetry/sdk-metrics`
|
|
253
|
+
* (2.x, verified) re-exports EVERY attribute set a gauge callback ever
|
|
254
|
+
* observed, at its last value, on every later collection — so a worker node
|
|
255
|
+
* that went offline, or a job type whose backlog drained, would keep reporting
|
|
256
|
+
* its final reading with a fresh timestamp for the life of the process. Under
|
|
257
|
+
* delta, a collection exports exactly what the callback observed this time.
|
|
258
|
+
* The `app.nodes.*` per-node gauges (#606) depend on it: a node dropping out of
|
|
259
|
+
* the exported set must disappear from the store, not freeze.
|
|
260
|
+
*
|
|
261
|
+
* @stability stable
|
|
262
|
+
*/
|
|
263
|
+
class GatedPushMetricExporter {
|
|
264
|
+
inner;
|
|
265
|
+
/** Delta for gauges, the inner exporter's choice (default cumulative) for everything else. */
|
|
266
|
+
selectAggregationTemporality;
|
|
267
|
+
/** The inner exporter's aggregation selector, when it has one. */
|
|
268
|
+
selectAggregation;
|
|
269
|
+
constructor(inner) {
|
|
270
|
+
this.inner = inner;
|
|
271
|
+
const innerTemporality = inner.selectAggregationTemporality?.bind(inner);
|
|
272
|
+
this.selectAggregationTemporality = (instrumentType) => instrumentType === sdk_metrics_1.InstrumentType.OBSERVABLE_GAUGE || instrumentType === sdk_metrics_1.InstrumentType.GAUGE
|
|
273
|
+
? sdk_metrics_1.AggregationTemporality.DELTA
|
|
274
|
+
: (innerTemporality?.(instrumentType) ?? sdk_metrics_1.AggregationTemporality.CUMULATIVE);
|
|
275
|
+
if (inner.selectAggregation) {
|
|
276
|
+
this.selectAggregation = inner.selectAggregation.bind(inner);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/** Drops the batch (SUCCESS) while the gate is closed; otherwise stamps and delegates. */
|
|
280
|
+
export(metrics, resultCallback) {
|
|
281
|
+
if (!exports.telemetryGate.isEnabled()) {
|
|
282
|
+
resultCallback(DROPPED);
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
this.inner.export({ ...metrics, resource: stampResource(metrics.resource) }, resultCallback);
|
|
286
|
+
}
|
|
287
|
+
/** Always delegates, whatever the gate says: a shutdown must flush even when export is off. */
|
|
288
|
+
shutdown() {
|
|
289
|
+
return this.inner.shutdown();
|
|
290
|
+
}
|
|
291
|
+
/** Always delegates, whatever the gate says. */
|
|
292
|
+
forceFlush() {
|
|
293
|
+
return this.inner.forceFlush();
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
exports.GatedPushMetricExporter = GatedPushMetricExporter;
|
|
297
|
+
//# sourceMappingURL=telemetry-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-gate.js","sourceRoot":"","sources":["../../../src/otel-core/sdk/telemetry-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { FastifyInstance, FastifyReply, FastifyRequest, HookHandlerDoneFunction } from 'fastify';
|
|
2
|
+
/**
|
|
3
|
+
* Semantic-convention route attribute (stable HTTP semconv).
|
|
4
|
+
*
|
|
5
|
+
* @stability stable
|
|
6
|
+
*/
|
|
7
|
+
export declare const ATTR_HTTP_ROUTE = "http.route";
|
|
8
|
+
/**
|
|
9
|
+
* `false` when no route matched (Fastify's not-found handler answered). Absent otherwise.
|
|
10
|
+
*
|
|
11
|
+
* @stability stable
|
|
12
|
+
*/
|
|
13
|
+
export declare const ATTR_APP_ROUTE_MATCHED = "app.route.matched";
|
|
14
|
+
/**
|
|
15
|
+
* Whether an `Authorization: Bearer` header was present. Never the token.
|
|
16
|
+
*
|
|
17
|
+
* @stability stable
|
|
18
|
+
*/
|
|
19
|
+
export declare const ATTR_APP_REQUEST_BEARER = "app.request.bearer";
|
|
20
|
+
/**
|
|
21
|
+
* Whether the request carries an `Authorization: Bearer …` header. Reads only the scheme.
|
|
22
|
+
*
|
|
23
|
+
* @param authorization - The raw header value(s).
|
|
24
|
+
* @returns `true` when the first value starts with `bearer ` (any case) and has a token after it.
|
|
25
|
+
*
|
|
26
|
+
* @stability stable
|
|
27
|
+
*/
|
|
28
|
+
export declare function hasBearer(authorization: string | string[] | undefined): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* The `onRequest` hook itself; exported for the spec. Writes `http.route`,
|
|
31
|
+
* `app.route.matched` and `app.request.bearer` on the active span.
|
|
32
|
+
*
|
|
33
|
+
* @param request - The Fastify request.
|
|
34
|
+
* @param _reply - Unused.
|
|
35
|
+
* @param done - Fastify's continuation.
|
|
36
|
+
*
|
|
37
|
+
* @stability experimental
|
|
38
|
+
*/
|
|
39
|
+
export declare function requestSpanAttributesHook(request: FastifyRequest, _reply: FastifyReply, done: HookHandlerDoneFunction): void;
|
|
40
|
+
/**
|
|
41
|
+
* Registers the hook on the ROOT Fastify instance. Call it before any plugin
|
|
42
|
+
* or route is registered (right after `NestFactory.create`), so it runs first
|
|
43
|
+
* — before a CORS preflight or any other `onRequest` hook can reply.
|
|
44
|
+
*
|
|
45
|
+
* @param fastify - The root Fastify instance (`app.getHttpAdapter().getInstance()`).
|
|
46
|
+
* @param otelEnabled - Whether the SDK is installed; `false` registers nothing.
|
|
47
|
+
* @returns Whether the hook was registered.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* registerRequestSpanAttributes(app.getHttpAdapter().getInstance(), process.env.OTEL_ENABLED === 'true');
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* @extensionPoint hook
|
|
55
|
+
* @stability stable
|
|
56
|
+
*/
|
|
57
|
+
export declare function registerRequestSpanAttributes(fastify: Pick<FastifyInstance, 'addHook'>, otelEnabled: boolean): boolean;
|
|
58
|
+
//# sourceMappingURL=request-span-attributes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-span-attributes.d.ts","sourceRoot":"","sources":["../../../src/otel-core/spans/request-span-attributes.ts"],"names":[],"mappings":"AAuEA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAEtG;;;;GAIG;AACH,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAC1D;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAE5D;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GAAG,OAAO,CAG/E;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,uBAAuB,GAC5B,IAAI,CAYN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACzC,WAAW,EAAE,OAAO,GACnB,OAAO,CAIT"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// Route and caller attributes on the HTTP server span (issue #650; packaged by
|
|
4
|
+
// issue #700)
|
|
5
|
+
// =============================================================================
|
|
6
|
+
//
|
|
7
|
+
// WHY THIS EXISTS
|
|
8
|
+
// -----------------------------------------------------------------------------
|
|
9
|
+
// A web build newer than the API build called routes the API did not have
|
|
10
|
+
// (`GET /api/coach/messages`, …). Nest answered its default 404 ("Cannot GET
|
|
11
|
+
// …") in about a millisecond, and the telemetry dashboard stayed green: it
|
|
12
|
+
// only counted 5xx, OpenTelemetry leaves a 4xx server span STATUS_CODE_UNSET,
|
|
13
|
+
// and nothing logged. Worse, a 404 from an unknown route looked exactly like a
|
|
14
|
+
// legitimate 404 from a matched route (`GET /api/gyms/:id` for a deleted gym),
|
|
15
|
+
// because the server span carried no route at all: the http instrumentation
|
|
16
|
+
// cannot know Fastify's route table, and there is no Fastify instrumentation
|
|
17
|
+
// in the auto-instrumentation bundle this API uses.
|
|
18
|
+
//
|
|
19
|
+
// So one `onRequest` hook, registered on the root Fastify instance before any
|
|
20
|
+
// route or plugin, writes what only Fastify knows onto the ACTIVE span:
|
|
21
|
+
//
|
|
22
|
+
// http.route the matched route pattern (`/api/gyms/:id`) — the OTel
|
|
23
|
+
// semantic-convention attribute. Matched requests only.
|
|
24
|
+
// As a side effect the http instrumentation renames the
|
|
25
|
+
// server span to `GET /api/gyms/:id` when it ends (it
|
|
26
|
+
// reads `http.route` back), so `span_name` becomes
|
|
27
|
+
// useful too.
|
|
28
|
+
// app.route.matched `false` when Fastify fell through to the not-found
|
|
29
|
+
// handler (no route for this method + path). Absent on a
|
|
30
|
+
// matched request: the dashboard asks only "= false", and
|
|
31
|
+
// writing `true` on every span would only cost storage.
|
|
32
|
+
// app.request.bearer whether an `Authorization: Bearer …` header is PRESENT.
|
|
33
|
+
// true/false on every request. NEVER the token or any
|
|
34
|
+
// part of it — only `startsWith('bearer ')` is read. The
|
|
35
|
+
// web app always sends a bearer, so this separates "our
|
|
36
|
+
// own client is calling a route that does not exist"
|
|
37
|
+
// (a deploy skew, a real defect) from anonymous internet
|
|
38
|
+
// scanners probing `/api/wp-login.php`.
|
|
39
|
+
//
|
|
40
|
+
// VERIFIED (Fastify 5.11, @opentelemetry/instrumentation-http 0.221, issue #650):
|
|
41
|
+
// - Fastify resolves the route BEFORE `onRequest`, so `routeOptions.url` is
|
|
42
|
+
// the pattern for a matched request and `undefined` for the not-found
|
|
43
|
+
// handler (also for a known path with an unregistered method). `is404` is
|
|
44
|
+
// the same fact as a boolean, and is what the hook branches on.
|
|
45
|
+
// - During `onRequest`, `trace.getActiveSpan()` IS the http SERVER span
|
|
46
|
+
// (kind SERVER): the http instrumentation runs the server's `request`
|
|
47
|
+
// emit inside `context.with(serverSpan)`, and nothing between that emit
|
|
48
|
+
// and the hook opens another span (no Fastify instrumentation; the
|
|
49
|
+
// nestjs-core instrumentation only wraps the handler). The spec proves the
|
|
50
|
+
// hook writes to whatever span is active; the SERVER-kind fact was
|
|
51
|
+
// checked with a real `NodeSDK` + http instrumentation over a socket
|
|
52
|
+
// (Jest's module registry defeats require-in-the-middle, so it cannot be
|
|
53
|
+
// a Jest test).
|
|
54
|
+
//
|
|
55
|
+
// NO-OP WITHOUT OTEL. The app registers the hook only when the SDK is
|
|
56
|
+
// installed (`OTEL_ENABLED=true`; the reference app's `main.ts`). Even if registered without it, the no-op
|
|
57
|
+
// API's `getActiveSpan()` is undefined and the hook does nothing. It does not
|
|
58
|
+
// consult the runtime export gate (`sdk/telemetry-gate.ts`): the SDK keeps
|
|
59
|
+
// creating spans while the gate is closed, and an attribute set is cheaper
|
|
60
|
+
// than the branch would be worth.
|
|
61
|
+
//
|
|
62
|
+
// COST: one header read, one `getActiveSpan()`, two attribute sets. No
|
|
63
|
+
// allocation beyond what `setAttribute` itself does.
|
|
64
|
+
//
|
|
65
|
+
// The collector's `attributes/redact` processor only deletes credential
|
|
66
|
+
// attributes (authorization/cookie headers, url.query), so these three pass
|
|
67
|
+
// through; GreptimeDB's `greptime_trace_v1` pipeline flattens them into the
|
|
68
|
+
// columns `span_attributes.http.route`, `span_attributes.app.route.matched`
|
|
69
|
+
// and `span_attributes.app.request.bearer`, created on first write.
|
|
70
|
+
// =============================================================================
|
|
71
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
|
+
exports.ATTR_APP_REQUEST_BEARER = exports.ATTR_APP_ROUTE_MATCHED = exports.ATTR_HTTP_ROUTE = void 0;
|
|
73
|
+
exports.hasBearer = hasBearer;
|
|
74
|
+
exports.requestSpanAttributesHook = requestSpanAttributesHook;
|
|
75
|
+
exports.registerRequestSpanAttributes = registerRequestSpanAttributes;
|
|
76
|
+
const api_1 = require("@opentelemetry/api");
|
|
77
|
+
/**
|
|
78
|
+
* Semantic-convention route attribute (stable HTTP semconv).
|
|
79
|
+
*
|
|
80
|
+
* @stability stable
|
|
81
|
+
*/
|
|
82
|
+
exports.ATTR_HTTP_ROUTE = 'http.route';
|
|
83
|
+
/**
|
|
84
|
+
* `false` when no route matched (Fastify's not-found handler answered). Absent otherwise.
|
|
85
|
+
*
|
|
86
|
+
* @stability stable
|
|
87
|
+
*/
|
|
88
|
+
exports.ATTR_APP_ROUTE_MATCHED = 'app.route.matched';
|
|
89
|
+
/**
|
|
90
|
+
* Whether an `Authorization: Bearer` header was present. Never the token.
|
|
91
|
+
*
|
|
92
|
+
* @stability stable
|
|
93
|
+
*/
|
|
94
|
+
exports.ATTR_APP_REQUEST_BEARER = 'app.request.bearer';
|
|
95
|
+
/**
|
|
96
|
+
* Whether the request carries an `Authorization: Bearer …` header. Reads only the scheme.
|
|
97
|
+
*
|
|
98
|
+
* @param authorization - The raw header value(s).
|
|
99
|
+
* @returns `true` when the first value starts with `bearer ` (any case) and has a token after it.
|
|
100
|
+
*
|
|
101
|
+
* @stability stable
|
|
102
|
+
*/
|
|
103
|
+
function hasBearer(authorization) {
|
|
104
|
+
const value = Array.isArray(authorization) ? authorization[0] : authorization;
|
|
105
|
+
return typeof value === 'string' && value.length > 7 && value.slice(0, 7).toLowerCase() === 'bearer ';
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The `onRequest` hook itself; exported for the spec. Writes `http.route`,
|
|
109
|
+
* `app.route.matched` and `app.request.bearer` on the active span.
|
|
110
|
+
*
|
|
111
|
+
* @param request - The Fastify request.
|
|
112
|
+
* @param _reply - Unused.
|
|
113
|
+
* @param done - Fastify's continuation.
|
|
114
|
+
*
|
|
115
|
+
* @stability experimental
|
|
116
|
+
*/
|
|
117
|
+
function requestSpanAttributesHook(request, _reply, done) {
|
|
118
|
+
const span = api_1.trace.getActiveSpan();
|
|
119
|
+
if (span) {
|
|
120
|
+
if (request.is404) {
|
|
121
|
+
span.setAttribute(exports.ATTR_APP_ROUTE_MATCHED, false);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
const route = request.routeOptions.url;
|
|
125
|
+
if (route)
|
|
126
|
+
span.setAttribute(exports.ATTR_HTTP_ROUTE, route);
|
|
127
|
+
}
|
|
128
|
+
span.setAttribute(exports.ATTR_APP_REQUEST_BEARER, hasBearer(request.headers.authorization));
|
|
129
|
+
}
|
|
130
|
+
done();
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Registers the hook on the ROOT Fastify instance. Call it before any plugin
|
|
134
|
+
* or route is registered (right after `NestFactory.create`), so it runs first
|
|
135
|
+
* — before a CORS preflight or any other `onRequest` hook can reply.
|
|
136
|
+
*
|
|
137
|
+
* @param fastify - The root Fastify instance (`app.getHttpAdapter().getInstance()`).
|
|
138
|
+
* @param otelEnabled - Whether the SDK is installed; `false` registers nothing.
|
|
139
|
+
* @returns Whether the hook was registered.
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* registerRequestSpanAttributes(app.getHttpAdapter().getInstance(), process.env.OTEL_ENABLED === 'true');
|
|
144
|
+
* ```
|
|
145
|
+
*
|
|
146
|
+
* @extensionPoint hook
|
|
147
|
+
* @stability stable
|
|
148
|
+
*/
|
|
149
|
+
function registerRequestSpanAttributes(fastify, otelEnabled) {
|
|
150
|
+
if (!otelEnabled)
|
|
151
|
+
return false;
|
|
152
|
+
fastify.addHook('onRequest', requestSpanAttributesHook);
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=request-span-attributes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-span-attributes.js","sourceRoot":"","sources":["../../../src/otel-core/spans/request-span-attributes.ts"],"names":[],"mappings":"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"}
|