@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,486 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// SQL the telemetry dashboard runs (issue #577, epic #576)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// PURE TEMPLATE FUNCTIONS. Every statement the dashboard sends is authored
|
|
7
|
+
// here, by the server, from:
|
|
8
|
+
//
|
|
9
|
+
// - fixed identifiers (the constants below), quoted with doubled `"`;
|
|
10
|
+
// - `Date` objects the request validation produced, rendered as ISO
|
|
11
|
+
// literals (`'2026-09-27T22:00:00.000Z'`);
|
|
12
|
+
// - `service` / `instance` values the SERVICE has already matched against
|
|
13
|
+
// the distinct values seen in the range (cached list), then single-quoted
|
|
14
|
+
// with doubled `'`;
|
|
15
|
+
// - the event search text `q`, reduced by `likeContainsPattern` (control
|
|
16
|
+
// characters stripped, capped at 200, `\` `%` `_` escaped, `'` doubled)
|
|
17
|
+
// and used ONLY as `body ILIKE '%…%' ESCAPE '\'`;
|
|
18
|
+
// - a pagination cursor whose timestamp and span id matched strict patterns.
|
|
19
|
+
//
|
|
20
|
+
// NO BIND PARAMETERS: GreptimeDB's Postgres wire refuses `$1` (spike #529).
|
|
21
|
+
// Every statement carries a literal top-level LIMIT (never a subquery wrapper
|
|
22
|
+
// for a row cap: GreptimeDB drops an inner ORDER BY through one, #554).
|
|
23
|
+
//
|
|
24
|
+
// -----------------------------------------------------------------------------
|
|
25
|
+
// STEP 0 FINDINGS (verified live on GreptimeDB v1.2.1, 2026-09-27)
|
|
26
|
+
// -----------------------------------------------------------------------------
|
|
27
|
+
// These override the issue text where they differ.
|
|
28
|
+
//
|
|
29
|
+
// Traces (`opentelemetry_traces`)
|
|
30
|
+
// - Server spans: `span_kind = 'SPAN_KIND_SERVER'` (span_name is only the
|
|
31
|
+
// method, e.g. `GET`).
|
|
32
|
+
// - Status: `"span_attributes.http.response.status_code"` (bigint, no cast).
|
|
33
|
+
// `"span_attributes.http.status_code"` does NOT exist. span_status_code is
|
|
34
|
+
// STATUS_CODE_UNSET for 4xx, so classes come from the numeric column.
|
|
35
|
+
// - Method: `"span_attributes.http.request.method"`.
|
|
36
|
+
// - ROUTE: `"span_attributes.http.route"` is EMPTY on server spans (the
|
|
37
|
+
// Fastify http instrumentation does not set it; only NestJS INTERNAL
|
|
38
|
+
// spans carry it, and those are missing for requests rejected before the
|
|
39
|
+
// handler). => routes are grouped by a NORMALIZED `"span_attributes.url.path"`
|
|
40
|
+
// of the server span (always present; the collector already redacts the
|
|
41
|
+
// query string): numeric, UUID and 24+ hex segments become `:id`
|
|
42
|
+
// (`ROUTE_NORMALIZE_PATTERN`). The API field stays `route`, documented as
|
|
43
|
+
// the normalized path.
|
|
44
|
+
// Since #650 the API's own `onRequest` hook (`common/otel/request-span-
|
|
45
|
+
// attributes.ts`) writes `http.route` on matched requests going forward,
|
|
46
|
+
// but the dashboard keeps grouping by the normalized path: old spans have
|
|
47
|
+
// no route, and an UNKNOWN route has none by definition.
|
|
48
|
+
// - Unknown routes (#650): the same hook writes `app.route.matched = false`
|
|
49
|
+
// when Fastify's not-found handler answered, and `app.request.bearer`
|
|
50
|
+
// (an `Authorization: Bearer` header was present — never the token) on
|
|
51
|
+
// every request. Flattened to `"span_attributes.app.route.matched"` and
|
|
52
|
+
// `"span_attributes.app.request.bearer"` (booleans), like every span
|
|
53
|
+
// attribute. Both columns exist only once written, so every statement that
|
|
54
|
+
// reads them is built only when `catalogOf` saw them; without the matched
|
|
55
|
+
// column there is NO unknown-route figure at all (a 404 alone cannot tell
|
|
56
|
+
// an unknown route from a missing row, so the dashboard does not guess).
|
|
57
|
+
// - Service: `service_name`; instance: `"resource_attributes.app.instance.id"`.
|
|
58
|
+
// - duration_nano: bigint unsigned (ns).
|
|
59
|
+
//
|
|
60
|
+
// Logs (`opentelemetry_logs`)
|
|
61
|
+
// - Severity by `severity_number` (OTel standard / pino mapping), not by
|
|
62
|
+
// `severity_text` (lower-case pino labels): error >= 17 (error 17,
|
|
63
|
+
// fatal 21), warn 13..16, info 9..12, other < 9 (or NULL).
|
|
64
|
+
// - Service and instance are NOT flattened columns: keys of the JSON column
|
|
65
|
+
// `resource_attributes`, read with
|
|
66
|
+
// `json_get_string(resource_attributes, '["service.name"]')` /
|
|
67
|
+
// `'["app.instance.id"]'` (a bare 'service.name' path is NULL: `.` is a
|
|
68
|
+
// path separator).
|
|
69
|
+
// - Search: `body ILIKE '%<q>%' ESCAPE '\'` (predictable substring
|
|
70
|
+
// semantics; `matches()` has query-language semantics — OR, quotes, `-`).
|
|
71
|
+
// GreptimeDB string literals are standard SQL: `\` is not an escape
|
|
72
|
+
// character in a literal, only `''` is.
|
|
73
|
+
// - trace_id / span_id may be '' for a log outside a request.
|
|
74
|
+
// - Timestamps arrive over the wire with microsecond text; the events query
|
|
75
|
+
// selects `CAST("timestamp" AS STRING)` so a cursor keeps full precision.
|
|
76
|
+
//
|
|
77
|
+
// Runtime metrics (Prometheus-style tables, present when the runtime-node
|
|
78
|
+
// instrumentation is on)
|
|
79
|
+
// - Columns: `greptime_timestamp` (time index), `greptime_value`,
|
|
80
|
+
// `service_name`, … — NO instance column, so the instance filter does not
|
|
81
|
+
// apply to runtime tiles.
|
|
82
|
+
// - Heap used: `v8js_memory_heap_used_bytes` has one row per heap space per
|
|
83
|
+
// export => SUM per `greptime_timestamp` first, then average per bucket.
|
|
84
|
+
// - Event-loop delay: `nodejs_eventloop_delay_p99_seconds` (seconds; max per
|
|
85
|
+
// bucket, converted to ms).
|
|
86
|
+
// - Exported every 60 s, so runtime sparklines have 1-minute resolution.
|
|
87
|
+
//
|
|
88
|
+
// SQL verified on v1.2.1: `date_bin(INTERVAL 'n seconds', ts)`,
|
|
89
|
+
// `approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY duration_nano)` (ns),
|
|
90
|
+
// ISO timestamp literals, `regexp_replace(…, 'g')`, `ILIKE … ESCAPE '\'`,
|
|
91
|
+
// `UNION` + top-level `ORDER BY … LIMIT`, scalar subqueries, GROUP BY alias.
|
|
92
|
+
// =============================================================================
|
|
93
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
94
|
+
exports.EVENT_CURSOR_SPAN_PATTERN = exports.EVENT_CURSOR_TS_PATTERN = exports.CLIENT_ERROR_PREDICATE = exports.UNKNOWN_ROUTE_PREDICATE = exports.LATENCY_P95_NS = exports.STREAM_SPAN_PREDICATE = exports.STREAM_PATH_SUFFIX = exports.ERROR_MESSAGE_CHARS = exports.SEARCH_MAX_LENGTH = exports.DISTINCT_VALUES_MAX = exports.EVENTS_PAGE_SIZE = exports.TOP_N = exports.EVENT_SEVERITIES = exports.SEVERITY_BANDS = exports.ROUTE_NORMALIZE_REPLACEMENT = exports.ROUTE_NORMALIZE_PATTERN = exports.SERVER_SPAN_KIND = exports.REQUIRED_LOG_COLUMNS = exports.REQUIRED_TRACE_COLUMNS = exports.TRACE_COLUMNS = exports.EVENT_LOOP_P99_TABLE = exports.HEAP_USED_TABLE = exports.LOGS_TABLE = exports.TRACES_TABLE = exports.timestampLiteral = exports.literal = exports.ident = exports.bucketSecondsFor = exports.bucketRowLimit = exports.bucketInterval = exports.BUCKET_SIZES_SECONDS = void 0;
|
|
95
|
+
exports.likeContainsPattern = likeContainsPattern;
|
|
96
|
+
exports.isStreamingRoute = isStreamingRoute;
|
|
97
|
+
exports.apiTimeseriesSql = apiTimeseriesSql;
|
|
98
|
+
exports.apiTotalsSql = apiTotalsSql;
|
|
99
|
+
exports.topRoutesSql = topRoutesSql;
|
|
100
|
+
exports.unknownRoutesTotalsSql = unknownRoutesTotalsSql;
|
|
101
|
+
exports.topUnknownRoutesSql = topUnknownRoutesSql;
|
|
102
|
+
exports.logsTimeseriesSql = logsTimeseriesSql;
|
|
103
|
+
exports.logsTotalsSql = logsTotalsSql;
|
|
104
|
+
exports.topErrorsSql = topErrorsSql;
|
|
105
|
+
exports.eventsSql = eventsSql;
|
|
106
|
+
exports.lastDataSql = lastDataSql;
|
|
107
|
+
exports.distinctServicesSql = distinctServicesSql;
|
|
108
|
+
exports.distinctInstancesSql = distinctInstancesSql;
|
|
109
|
+
exports.heapUsedSql = heapUsedSql;
|
|
110
|
+
exports.eventLoopDelayP99Sql = eventLoopDelayP99Sql;
|
|
111
|
+
const telemetry_1 = require("@marinoscar/platform-contract/telemetry");
|
|
112
|
+
const sql_literals_1 = require("./sql-literals");
|
|
113
|
+
var sql_literals_2 = require("./sql-literals");
|
|
114
|
+
Object.defineProperty(exports, "BUCKET_SIZES_SECONDS", { enumerable: true, get: function () { return sql_literals_2.BUCKET_SIZES_SECONDS; } });
|
|
115
|
+
Object.defineProperty(exports, "bucketInterval", { enumerable: true, get: function () { return sql_literals_2.bucketInterval; } });
|
|
116
|
+
Object.defineProperty(exports, "bucketRowLimit", { enumerable: true, get: function () { return sql_literals_2.bucketRowLimit; } });
|
|
117
|
+
Object.defineProperty(exports, "bucketSecondsFor", { enumerable: true, get: function () { return sql_literals_2.bucketSecondsFor; } });
|
|
118
|
+
Object.defineProperty(exports, "ident", { enumerable: true, get: function () { return sql_literals_2.ident; } });
|
|
119
|
+
Object.defineProperty(exports, "literal", { enumerable: true, get: function () { return sql_literals_2.literal; } });
|
|
120
|
+
Object.defineProperty(exports, "timestampLiteral", { enumerable: true, get: function () { return sql_literals_2.timestampLiteral; } });
|
|
121
|
+
/**
|
|
122
|
+
* The store's span table.
|
|
123
|
+
*
|
|
124
|
+
* @stability stable
|
|
125
|
+
*/
|
|
126
|
+
exports.TRACES_TABLE = 'opentelemetry_traces';
|
|
127
|
+
/**
|
|
128
|
+
* The store's log table.
|
|
129
|
+
*
|
|
130
|
+
* @stability stable
|
|
131
|
+
*/
|
|
132
|
+
exports.LOGS_TABLE = 'opentelemetry_logs';
|
|
133
|
+
exports.HEAP_USED_TABLE = 'v8js_memory_heap_used_bytes';
|
|
134
|
+
exports.EVENT_LOOP_P99_TABLE = 'nodejs_eventloop_delay_p99_seconds';
|
|
135
|
+
/** Trace columns the dashboard reads. Attribute columns exist only once an attribute was written. */
|
|
136
|
+
exports.TRACE_COLUMNS = {
|
|
137
|
+
timestamp: 'timestamp',
|
|
138
|
+
kind: 'span_kind',
|
|
139
|
+
service: 'service_name',
|
|
140
|
+
instance: 'resource_attributes.app.instance.id',
|
|
141
|
+
status: 'span_attributes.http.response.status_code',
|
|
142
|
+
method: 'span_attributes.http.request.method',
|
|
143
|
+
path: 'span_attributes.url.path',
|
|
144
|
+
duration: 'duration_nano',
|
|
145
|
+
/** `false` when no route matched (#650). Absent on old data and on stores that never saw an unknown route. */
|
|
146
|
+
routeMatched: 'span_attributes.app.route.matched',
|
|
147
|
+
/** Whether an `Authorization: Bearer` header was present (#650). Never the token. */
|
|
148
|
+
bearer: 'span_attributes.app.request.bearer',
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* The trace columns without which no API panel can be computed.
|
|
152
|
+
*
|
|
153
|
+
* @stability stable
|
|
154
|
+
*/
|
|
155
|
+
exports.REQUIRED_TRACE_COLUMNS = [
|
|
156
|
+
exports.TRACE_COLUMNS.timestamp,
|
|
157
|
+
exports.TRACE_COLUMNS.kind,
|
|
158
|
+
exports.TRACE_COLUMNS.service,
|
|
159
|
+
exports.TRACE_COLUMNS.status,
|
|
160
|
+
exports.TRACE_COLUMNS.method,
|
|
161
|
+
exports.TRACE_COLUMNS.path,
|
|
162
|
+
exports.TRACE_COLUMNS.duration,
|
|
163
|
+
];
|
|
164
|
+
/**
|
|
165
|
+
* The log columns without which no log panel can be computed.
|
|
166
|
+
*
|
|
167
|
+
* @stability stable
|
|
168
|
+
*/
|
|
169
|
+
exports.REQUIRED_LOG_COLUMNS = [
|
|
170
|
+
'timestamp',
|
|
171
|
+
'severity_number',
|
|
172
|
+
'body',
|
|
173
|
+
'resource_attributes',
|
|
174
|
+
'trace_id',
|
|
175
|
+
'span_id',
|
|
176
|
+
];
|
|
177
|
+
exports.SERVER_SPAN_KIND = 'SPAN_KIND_SERVER';
|
|
178
|
+
/** Numeric, UUID and long-hex path segments → `:id`. Applied with the `g` flag. */
|
|
179
|
+
exports.ROUTE_NORMALIZE_PATTERN = '/([0-9]+|[0-9a-fA-F]{8}-[0-9a-fA-F-]{27,}|[0-9a-fA-F]{24,})(/|$)';
|
|
180
|
+
exports.ROUTE_NORMALIZE_REPLACEMENT = '/:id$2';
|
|
181
|
+
/** Severity bands by `severity_number`. */
|
|
182
|
+
exports.SEVERITY_BANDS = {
|
|
183
|
+
error: 'severity_number >= 17',
|
|
184
|
+
warn: '(severity_number >= 13 AND severity_number < 17)',
|
|
185
|
+
info: '(severity_number >= 9 AND severity_number < 13)',
|
|
186
|
+
other: '(severity_number IS NULL OR severity_number < 9)',
|
|
187
|
+
};
|
|
188
|
+
/** The severities `events` filters on (`DASHBOARD_EVENT_SEVERITIES` in the contract, #702). */
|
|
189
|
+
exports.EVENT_SEVERITIES = telemetry_1.DASHBOARD_EVENT_SEVERITIES;
|
|
190
|
+
/** Top-N lists. */
|
|
191
|
+
exports.TOP_N = 10;
|
|
192
|
+
/** Events page size. */
|
|
193
|
+
exports.EVENTS_PAGE_SIZE = 50;
|
|
194
|
+
/** Distinct services / instances returned by `/filters`. */
|
|
195
|
+
exports.DISTINCT_VALUES_MAX = 200;
|
|
196
|
+
/** Longest search text, after control characters are stripped (`DASHBOARD_SEARCH_MAX_LENGTH` in the contract, #702). */
|
|
197
|
+
exports.SEARCH_MAX_LENGTH = telemetry_1.DASHBOARD_SEARCH_MAX_LENGTH;
|
|
198
|
+
/** Characters of a log body a grouped error message keeps. */
|
|
199
|
+
exports.ERROR_MESSAGE_CHARS = 200;
|
|
200
|
+
// ---- literals ----------------------------------------------------------------
|
|
201
|
+
//
|
|
202
|
+
// Shared with the metric catalog builders (`../metrics/metric-sql.ts`, #601);
|
|
203
|
+
// re-exported so existing imports keep working.
|
|
204
|
+
/**
|
|
205
|
+
* The search text as the inside of an `ILIKE '%…%' ESCAPE '\'` literal:
|
|
206
|
+
* control characters stripped, capped at `SEARCH_MAX_LENGTH`, LIKE
|
|
207
|
+
* metacharacters (`\`, `%`, `_`) escaped with `\`, then `'` doubled.
|
|
208
|
+
* Returns '' when nothing searchable remains.
|
|
209
|
+
*/
|
|
210
|
+
function likeContainsPattern(q) {
|
|
211
|
+
const cleaned = q.replace(/[\u0000-\u001f\u007f-\u009f\u2028\u2029]/g, '').slice(0, exports.SEARCH_MAX_LENGTH);
|
|
212
|
+
return cleaned.replace(/[\\%_]/g, (c) => `\\${c}`).replace(/'/g, "''");
|
|
213
|
+
}
|
|
214
|
+
function traceFilters(filters) {
|
|
215
|
+
const parts = [];
|
|
216
|
+
if (filters.service)
|
|
217
|
+
parts.push(`${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.service)} = ${(0, sql_literals_1.literal)(filters.service)}`);
|
|
218
|
+
if (filters.instance) {
|
|
219
|
+
parts.push(filters.tracesHaveInstance === false
|
|
220
|
+
? '1 = 0'
|
|
221
|
+
: `${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.instance)} = ${(0, sql_literals_1.literal)(filters.instance)}`);
|
|
222
|
+
}
|
|
223
|
+
return parts.map((p) => ` AND ${p}`).join('');
|
|
224
|
+
}
|
|
225
|
+
const LOG_SERVICE = `json_get_string(resource_attributes, '["service.name"]')`;
|
|
226
|
+
const LOG_INSTANCE = `json_get_string(resource_attributes, '["app.instance.id"]')`;
|
|
227
|
+
function logFilters(filters) {
|
|
228
|
+
const parts = [];
|
|
229
|
+
if (filters.service)
|
|
230
|
+
parts.push(`${LOG_SERVICE} = ${(0, sql_literals_1.literal)(filters.service)}`);
|
|
231
|
+
if (filters.instance)
|
|
232
|
+
parts.push(`${LOG_INSTANCE} = ${(0, sql_literals_1.literal)(filters.instance)}`);
|
|
233
|
+
return parts.map((p) => ` AND ${p}`).join('');
|
|
234
|
+
}
|
|
235
|
+
function serverSpans(from, to, filters) {
|
|
236
|
+
return (`FROM ${(0, sql_literals_1.ident)(exports.TRACES_TABLE)} WHERE ${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.kind)} = ${(0, sql_literals_1.literal)(exports.SERVER_SPAN_KIND)} ` +
|
|
237
|
+
`AND ${(0, sql_literals_1.between)(exports.TRACE_COLUMNS.timestamp, from, to)}${traceFilters(filters)}`);
|
|
238
|
+
}
|
|
239
|
+
const STATUS = (0, sql_literals_1.ident)(exports.TRACE_COLUMNS.status);
|
|
240
|
+
// ---- streaming (SSE) exclusion for latency -------------------------------------
|
|
241
|
+
//
|
|
242
|
+
// A Server-Sent Events route holds its request open for the life of the
|
|
243
|
+
// subscription, so its server span lasts seconds to hours (live: GET
|
|
244
|
+
// /api/notifications/stream at p95 5.38 s). Mixed into an overall p95 it
|
|
245
|
+
// measures connection lifetime, not responsiveness: with enough subscribers
|
|
246
|
+
// it pushes the window p95 over the verdict threshold (false Degraded /
|
|
247
|
+
// Critical) and gets named the "slowest route". Every SSE route of this API
|
|
248
|
+
// ends in `/stream` (GET /api/notifications/stream, POST /api/ai/responses/stream,
|
|
249
|
+
// POST /api/admin/telemetry/assistant/stream), so a path suffix identifies them.
|
|
250
|
+
//
|
|
251
|
+
// The exclusion applies ONLY to latency: the p95 tile (current and previous
|
|
252
|
+
// window, and its sparkline), the API time-series p95 line and the verdict's
|
|
253
|
+
// "slowest route" offender. Streams still count in requests, status classes,
|
|
254
|
+
// error rates and the top-routes table (whose per-route p95 is honest: it is
|
|
255
|
+
// the stream's own row).
|
|
256
|
+
//
|
|
257
|
+
// Implemented as a CASE inside the percentile's ORDER BY, in the same
|
|
258
|
+
// statement: the aggregate ignores NULLs (verified on GreptimeDB v1.2.1: the
|
|
259
|
+
// result equals a WHERE-filtered p95, and a stream-only group yields NULL).
|
|
260
|
+
// Written as `LIKE … THEN NULL ELSE duration` so a span without a path is kept.
|
|
261
|
+
/** Path suffix shared by every SSE route of the API. */
|
|
262
|
+
exports.STREAM_PATH_SUFFIX = '/stream';
|
|
263
|
+
/** SQL predicate: the server span is a streaming (SSE) request. */
|
|
264
|
+
exports.STREAM_SPAN_PREDICATE = `${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.path)} LIKE ${(0, sql_literals_1.literal)(`%${exports.STREAM_PATH_SUFFIX}`)}`;
|
|
265
|
+
/** Whether a (normalized) route is a streaming (SSE) route; the TS twin of `STREAM_SPAN_PREDICATE`. */
|
|
266
|
+
function isStreamingRoute(route) {
|
|
267
|
+
return typeof route === 'string' && route.endsWith(exports.STREAM_PATH_SUFFIX);
|
|
268
|
+
}
|
|
269
|
+
/** p95 (ns) of every server span in the group, streams included (per-route table). */
|
|
270
|
+
const P95_NS = `approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY ${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.duration)})`;
|
|
271
|
+
/** p95 (ns) of the group with streaming (SSE) spans left out; NULL when only streams. */
|
|
272
|
+
exports.LATENCY_P95_NS = `approx_percentile_cont(0.95) WITHIN GROUP (ORDER BY CASE WHEN ${exports.STREAM_SPAN_PREDICATE} ` +
|
|
273
|
+
`THEN NULL ELSE ${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.duration)} END)`;
|
|
274
|
+
function statusClass(low) {
|
|
275
|
+
return `sum(CASE WHEN ${STATUS} >= ${low} AND ${STATUS} < ${low + 100} THEN 1 ELSE 0 END)`;
|
|
276
|
+
}
|
|
277
|
+
// ---- API panel ---------------------------------------------------------------
|
|
278
|
+
/**
|
|
279
|
+
* Server spans per bucket: status classes and p95 (ns, streams excluded).
|
|
280
|
+
* Columns: t, total, s2xx, s3xx, s4xx, s5xx, p95_ns.
|
|
281
|
+
*/
|
|
282
|
+
function apiTimeseriesSql(window, filters = {}) {
|
|
283
|
+
return (`SELECT date_bin(${(0, sql_literals_1.bucketInterval)(window.bucketSeconds)}, ${(0, sql_literals_1.ident)('timestamp')}) AS t, count(*) AS total, ` +
|
|
284
|
+
`${statusClass(200)} AS s2xx, ${statusClass(300)} AS s3xx, ${statusClass(400)} AS s4xx, ` +
|
|
285
|
+
`sum(CASE WHEN ${STATUS} >= 500 THEN 1 ELSE 0 END) AS s5xx, ${exports.LATENCY_P95_NS} AS p95_ns ` +
|
|
286
|
+
`${serverSpans(window.from, window.to, filters)} ` +
|
|
287
|
+
`GROUP BY t ORDER BY t LIMIT ${(0, sql_literals_1.bucketRowLimit)(window.from, window.to, window.bucketSeconds)}`);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Totals of the current window `[from, to)` and the previous one
|
|
291
|
+
* `[previousFrom, from)` in one statement. Columns: period
|
|
292
|
+
* ('current'|'previous'), requests, errors (5xx), p95_ns (streams excluded).
|
|
293
|
+
*/
|
|
294
|
+
function apiTotalsSql(previousFrom, window, filters = {}) {
|
|
295
|
+
return (`SELECT CASE WHEN ${(0, sql_literals_1.ident)('timestamp')} >= ${(0, sql_literals_1.timestampLiteral)(window.from)} THEN 'current' ELSE 'previous' END AS period, ` +
|
|
296
|
+
`count(*) AS requests, sum(CASE WHEN ${STATUS} >= 500 THEN 1 ELSE 0 END) AS errors, ${exports.LATENCY_P95_NS} AS p95_ns ` +
|
|
297
|
+
`${serverSpans(previousFrom, window.to, filters)} ` +
|
|
298
|
+
'GROUP BY period ORDER BY period LIMIT 2');
|
|
299
|
+
}
|
|
300
|
+
/** The server span's path with numeric/UUID/hex segments as `:id`. */
|
|
301
|
+
const NORMALIZED_ROUTE = `regexp_replace(${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.path)}, ${(0, sql_literals_1.literal)(exports.ROUTE_NORMALIZE_PATTERN)}, ${(0, sql_literals_1.literal)(exports.ROUTE_NORMALIZE_REPLACEMENT)}, 'g')`;
|
|
302
|
+
/**
|
|
303
|
+
* Top routes (normalized path) by 5xx count, then client errors (4xx except
|
|
304
|
+
* 401), then p95. Columns: method, route, requests, errors (5xx),
|
|
305
|
+
* client_errors, unknown_requests (requests to an unknown route — a literal 0 when the
|
|
306
|
+
* traces table has no matched column, #650), p95_ns. `limit` is TOP_N + 1 so
|
|
307
|
+
* truncation shows. Streams stay in, with their own p95: the table is per
|
|
308
|
+
* route, so it is honest.
|
|
309
|
+
*/
|
|
310
|
+
function topRoutesSql(window, filters = {}, limit = exports.TOP_N + 1) {
|
|
311
|
+
const unknown = filters.tracesHaveRouteMatched
|
|
312
|
+
? `sum(CASE WHEN ${exports.UNKNOWN_ROUTE_PREDICATE} THEN 1 ELSE 0 END)`
|
|
313
|
+
: '0';
|
|
314
|
+
return (`SELECT ${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.method)} AS method, ${NORMALIZED_ROUTE} AS route, ` +
|
|
315
|
+
`count(*) AS requests, sum(CASE WHEN ${STATUS} >= 500 THEN 1 ELSE 0 END) AS errors, ` +
|
|
316
|
+
`sum(CASE WHEN ${exports.CLIENT_ERROR_PREDICATE} THEN 1 ELSE 0 END) AS client_errors, ${unknown} AS unknown_requests, ${P95_NS} AS p95_ns ` +
|
|
317
|
+
`${serverSpans(window.from, window.to, filters)} ` +
|
|
318
|
+
`GROUP BY method, route ORDER BY errors DESC, client_errors DESC, p95_ns DESC LIMIT ${(0, sql_literals_1.positive)(limit)}`);
|
|
319
|
+
}
|
|
320
|
+
// ---- unknown routes and client errors (#650) ---------------------------------
|
|
321
|
+
//
|
|
322
|
+
// An UNKNOWN ROUTE is a server span answered 404 by Fastify's not-found
|
|
323
|
+
// handler: `status = 404 AND "span_attributes.app.route.matched" = false`. A
|
|
324
|
+
// 404 from a matched route (`GET /api/gyms/:id` for a deleted gym) is a client
|
|
325
|
+
// error, not an unknown route. Requests with a bearer are the application's
|
|
326
|
+
// own clients (the web app, the CLI, worker nodes) calling a route this build
|
|
327
|
+
// does not have — a deploy skew or a real defect; anonymous ones are mostly
|
|
328
|
+
// internet scanners, counted but never alarming.
|
|
329
|
+
/** SQL predicate: the server span is a request to an unknown route. Only valid when the column exists. */
|
|
330
|
+
exports.UNKNOWN_ROUTE_PREDICATE = `${STATUS} = 404 AND ${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.routeMatched)} = false`;
|
|
331
|
+
/** Client errors the problem-routes table counts: 4xx except 401 (an expired access token is routine). */
|
|
332
|
+
exports.CLIENT_ERROR_PREDICATE = `${STATUS} >= 400 AND ${STATUS} < 500 AND ${STATUS} <> 401`;
|
|
333
|
+
function bearerCount(filters) {
|
|
334
|
+
return filters.tracesHaveBearer
|
|
335
|
+
? `sum(CASE WHEN ${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.bearer)} = true THEN 1 ELSE 0 END)`
|
|
336
|
+
: '0';
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Unknown-route requests of the current window `[from, to)` and the previous
|
|
340
|
+
* one `[previousFrom, from)`. Columns: period ('current'|'previous'),
|
|
341
|
+
* requests, bearer. Null when the traces table has no matched column (#650).
|
|
342
|
+
*/
|
|
343
|
+
function unknownRoutesTotalsSql(previousFrom, window, filters = {}) {
|
|
344
|
+
if (!filters.tracesHaveRouteMatched)
|
|
345
|
+
return null;
|
|
346
|
+
return (`SELECT CASE WHEN ${(0, sql_literals_1.ident)('timestamp')} >= ${(0, sql_literals_1.timestampLiteral)(window.from)} THEN 'current' ELSE 'previous' END AS period, ` +
|
|
347
|
+
`count(*) AS requests, ${bearerCount(filters)} AS bearer ` +
|
|
348
|
+
`${serverSpans(previousFrom, window.to, filters)} AND ${exports.UNKNOWN_ROUTE_PREDICATE} ` +
|
|
349
|
+
'GROUP BY period ORDER BY period LIMIT 2');
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Unknown routes of the window by (method, normalized path), bearer requests
|
|
353
|
+
* first. Columns: method, route, requests, bearer. `limit` is TOP_N + 1 so
|
|
354
|
+
* truncation shows. Null when the traces table has no matched column (#650).
|
|
355
|
+
*/
|
|
356
|
+
function topUnknownRoutesSql(window, filters = {}, limit = exports.TOP_N + 1) {
|
|
357
|
+
if (!filters.tracesHaveRouteMatched)
|
|
358
|
+
return null;
|
|
359
|
+
return (`SELECT ${(0, sql_literals_1.ident)(exports.TRACE_COLUMNS.method)} AS method, ${NORMALIZED_ROUTE} AS route, ` +
|
|
360
|
+
`count(*) AS requests, ${bearerCount(filters)} AS bearer ` +
|
|
361
|
+
`${serverSpans(window.from, window.to, filters)} AND ${exports.UNKNOWN_ROUTE_PREDICATE} ` +
|
|
362
|
+
`GROUP BY method, route ORDER BY bearer DESC, requests DESC, method, route LIMIT ${(0, sql_literals_1.positive)(limit)}`);
|
|
363
|
+
}
|
|
364
|
+
// ---- logs panel --------------------------------------------------------------
|
|
365
|
+
function logsIn(from, to, filters) {
|
|
366
|
+
return `FROM ${(0, sql_literals_1.ident)(exports.LOGS_TABLE)} WHERE ${(0, sql_literals_1.between)('timestamp', from, to)}${logFilters(filters)}`;
|
|
367
|
+
}
|
|
368
|
+
function band(name) {
|
|
369
|
+
return `sum(CASE WHEN ${exports.SEVERITY_BANDS[name]} THEN 1 ELSE 0 END)`;
|
|
370
|
+
}
|
|
371
|
+
/** Logs per bucket by severity band. Columns: t, error, warn, info, other. */
|
|
372
|
+
function logsTimeseriesSql(window, filters = {}) {
|
|
373
|
+
return (`SELECT date_bin(${(0, sql_literals_1.bucketInterval)(window.bucketSeconds)}, ${(0, sql_literals_1.ident)('timestamp')}) AS t, ` +
|
|
374
|
+
`${band('error')} AS error, ${band('warn')} AS warn, ${band('info')} AS info, ${band('other')} AS other ` +
|
|
375
|
+
`${logsIn(window.from, window.to, filters)} ` +
|
|
376
|
+
`GROUP BY t ORDER BY t LIMIT ${(0, sql_literals_1.bucketRowLimit)(window.from, window.to, window.bucketSeconds)}`);
|
|
377
|
+
}
|
|
378
|
+
/** Error and warn counts of the current and previous windows. Columns: period, error, warn. */
|
|
379
|
+
function logsTotalsSql(previousFrom, window, filters = {}) {
|
|
380
|
+
return (`SELECT CASE WHEN ${(0, sql_literals_1.ident)('timestamp')} >= ${(0, sql_literals_1.timestampLiteral)(window.from)} THEN 'current' ELSE 'previous' END AS period, ` +
|
|
381
|
+
`${band('error')} AS error, ${band('warn')} AS warn ` +
|
|
382
|
+
`${logsIn(previousFrom, window.to, filters)} ` +
|
|
383
|
+
'GROUP BY period ORDER BY period LIMIT 2');
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Most frequent error messages (first `ERROR_MESSAGE_CHARS` characters).
|
|
387
|
+
* Columns: message, occurrences, first_seen, last_seen, sample_trace_id, service.
|
|
388
|
+
*/
|
|
389
|
+
function topErrorsSql(window, filters = {}, limit = exports.TOP_N + 1) {
|
|
390
|
+
return (`SELECT substr(body, 1, ${exports.ERROR_MESSAGE_CHARS}) AS message, count(*) AS occurrences, ` +
|
|
391
|
+
`min(${(0, sql_literals_1.ident)('timestamp')}) AS first_seen, max(${(0, sql_literals_1.ident)('timestamp')}) AS last_seen, ` +
|
|
392
|
+
`max(trace_id) AS sample_trace_id, max(${LOG_SERVICE}) AS service ` +
|
|
393
|
+
`${logsIn(window.from, window.to, filters)} AND ${exports.SEVERITY_BANDS.error} ` +
|
|
394
|
+
`GROUP BY message ORDER BY occurrences DESC, last_seen DESC LIMIT ${(0, sql_literals_1.positive)(limit)}`);
|
|
395
|
+
}
|
|
396
|
+
exports.EVENT_CURSOR_TS_PATTERN = /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(\.\d{1,9})?Z?$/;
|
|
397
|
+
exports.EVENT_CURSOR_SPAN_PATTERN = /^[0-9a-fA-F]{0,32}$/;
|
|
398
|
+
/**
|
|
399
|
+
* Log events, newest first, keyset-paginated on (timestamp, span_id).
|
|
400
|
+
* Columns: ts (full-precision text), severity_number, severity_text,
|
|
401
|
+
* service, body, trace_id, span_id.
|
|
402
|
+
*/
|
|
403
|
+
function eventsSql(window, filters, opts) {
|
|
404
|
+
const severities = exports.EVENT_SEVERITIES.filter((s) => opts.severities.includes(s));
|
|
405
|
+
if (severities.length === 0)
|
|
406
|
+
throw new RangeError('eventsSql needs at least one severity');
|
|
407
|
+
const where = [`(${severities.map((s) => exports.SEVERITY_BANDS[s]).join(' OR ')})`];
|
|
408
|
+
const pattern = opts.q ? likeContainsPattern(opts.q) : '';
|
|
409
|
+
if (pattern)
|
|
410
|
+
where.push(`body ILIKE '%${pattern}%' ESCAPE '\\'`);
|
|
411
|
+
if (opts.cursor) {
|
|
412
|
+
const { ts, spanId } = opts.cursor;
|
|
413
|
+
if (!exports.EVENT_CURSOR_TS_PATTERN.test(ts) || !exports.EVENT_CURSOR_SPAN_PATTERN.test(spanId)) {
|
|
414
|
+
throw new RangeError('eventsSql got an unvalidated cursor');
|
|
415
|
+
}
|
|
416
|
+
const at = (0, sql_literals_1.literal)(ts.endsWith('Z') ? ts : `${ts.replace(' ', 'T')}Z`);
|
|
417
|
+
where.push(`(${(0, sql_literals_1.ident)('timestamp')} < ${at} OR (${(0, sql_literals_1.ident)('timestamp')} = ${at} AND span_id < ${(0, sql_literals_1.literal)(spanId)}))`);
|
|
418
|
+
}
|
|
419
|
+
return (`SELECT CAST(${(0, sql_literals_1.ident)('timestamp')} AS STRING) AS ts, severity_number, severity_text, ${LOG_SERVICE} AS service, ` +
|
|
420
|
+
'body, trace_id, span_id ' +
|
|
421
|
+
`${logsIn(window.from, window.to, filters)} AND ${where.join(' AND ')} ` +
|
|
422
|
+
`ORDER BY ${(0, sql_literals_1.ident)('timestamp')} DESC, span_id DESC LIMIT ${(0, sql_literals_1.positive)(opts.limit ?? exports.EVENTS_PAGE_SIZE + 1)}`);
|
|
423
|
+
}
|
|
424
|
+
// ---- freshness ---------------------------------------------------------------
|
|
425
|
+
/**
|
|
426
|
+
* Latest trace and log timestamps since `since` (filters applied). Columns:
|
|
427
|
+
* traces_last, logs_last — a table that does not exist is left out
|
|
428
|
+
* (`NULL AS …`).
|
|
429
|
+
*/
|
|
430
|
+
function lastDataSql(since, until, filters, tables) {
|
|
431
|
+
const traces = tables.traces
|
|
432
|
+
? `(SELECT max(${(0, sql_literals_1.ident)('timestamp')}) FROM ${(0, sql_literals_1.ident)(exports.TRACES_TABLE)} WHERE ${(0, sql_literals_1.between)('timestamp', since, until)}${traceFilters(filters)})`
|
|
433
|
+
: 'NULL';
|
|
434
|
+
const logs = tables.logs ? `(SELECT max(${(0, sql_literals_1.ident)('timestamp')}) ${logsIn(since, until, filters)})` : 'NULL';
|
|
435
|
+
return `SELECT ${traces} AS traces_last, ${logs} AS logs_last LIMIT 1`;
|
|
436
|
+
}
|
|
437
|
+
// ---- filter values -----------------------------------------------------------
|
|
438
|
+
function distinctUnion(parts, limit) {
|
|
439
|
+
return `${parts.join(' UNION ')} ORDER BY v LIMIT ${(0, sql_literals_1.positive)(limit)}`;
|
|
440
|
+
}
|
|
441
|
+
/** Distinct service names in `[from, to)` across traces and logs. Column: v. */
|
|
442
|
+
function distinctServicesSql(from, to, tables, limit = exports.DISTINCT_VALUES_MAX + 1) {
|
|
443
|
+
const parts = [];
|
|
444
|
+
if (tables.traces) {
|
|
445
|
+
const col = (0, sql_literals_1.ident)(exports.TRACE_COLUMNS.service);
|
|
446
|
+
parts.push(`SELECT ${col} AS v FROM ${(0, sql_literals_1.ident)(exports.TRACES_TABLE)} WHERE ${(0, sql_literals_1.between)('timestamp', from, to)} AND ${col} IS NOT NULL AND ${col} <> ''`);
|
|
447
|
+
}
|
|
448
|
+
if (tables.logs) {
|
|
449
|
+
parts.push(`SELECT ${LOG_SERVICE} AS v ${logsIn(from, to, {})} AND ${LOG_SERVICE} IS NOT NULL AND ${LOG_SERVICE} <> ''`);
|
|
450
|
+
}
|
|
451
|
+
return parts.length ? distinctUnion(parts, limit) : null;
|
|
452
|
+
}
|
|
453
|
+
/** Distinct instance ids in `[from, to)` across traces (when the column exists) and logs. Column: v. */
|
|
454
|
+
function distinctInstancesSql(from, to, tables, limit = exports.DISTINCT_VALUES_MAX + 1) {
|
|
455
|
+
const parts = [];
|
|
456
|
+
if (tables.traces) {
|
|
457
|
+
const col = (0, sql_literals_1.ident)(exports.TRACE_COLUMNS.instance);
|
|
458
|
+
parts.push(`SELECT ${col} AS v FROM ${(0, sql_literals_1.ident)(exports.TRACES_TABLE)} WHERE ${(0, sql_literals_1.between)('timestamp', from, to)} AND ${col} IS NOT NULL AND ${col} <> ''`);
|
|
459
|
+
}
|
|
460
|
+
if (tables.logs) {
|
|
461
|
+
parts.push(`SELECT ${LOG_INSTANCE} AS v ${logsIn(from, to, {})} AND ${LOG_INSTANCE} IS NOT NULL AND ${LOG_INSTANCE} <> ''`);
|
|
462
|
+
}
|
|
463
|
+
return parts.length ? distinctUnion(parts, limit) : null;
|
|
464
|
+
}
|
|
465
|
+
// ---- runtime -----------------------------------------------------------------
|
|
466
|
+
function metricWhere(from, to, service) {
|
|
467
|
+
return `${(0, sql_literals_1.between)('greptime_timestamp', from, to)}${service ? ` AND service_name = ${(0, sql_literals_1.literal)(service)}` : ''}`;
|
|
468
|
+
}
|
|
469
|
+
/**
|
|
470
|
+
* Heap used (bytes) per bucket over `[from, to)`: summed over heap spaces per
|
|
471
|
+
* export, then averaged per bucket. Columns: t, v. The instance filter does
|
|
472
|
+
* not apply (the metric tables have no instance column).
|
|
473
|
+
*/
|
|
474
|
+
function heapUsedSql(from, to, bucketSeconds, service) {
|
|
475
|
+
return (`SELECT date_bin(${(0, sql_literals_1.bucketInterval)(bucketSeconds)}, ts) AS t, avg(total) AS v FROM (` +
|
|
476
|
+
`SELECT greptime_timestamp AS ts, sum(greptime_value) AS total FROM ${(0, sql_literals_1.ident)(exports.HEAP_USED_TABLE)} ` +
|
|
477
|
+
`WHERE ${metricWhere(from, to, service)} GROUP BY greptime_timestamp` +
|
|
478
|
+
`) GROUP BY t ORDER BY t LIMIT ${(0, sql_literals_1.bucketRowLimit)(from, to, bucketSeconds)}`);
|
|
479
|
+
}
|
|
480
|
+
/** Event-loop delay p99 (ms), max per bucket over `[from, to)`. Columns: t, v. */
|
|
481
|
+
function eventLoopDelayP99Sql(from, to, bucketSeconds, service) {
|
|
482
|
+
return (`SELECT date_bin(${(0, sql_literals_1.bucketInterval)(bucketSeconds)}, greptime_timestamp) AS t, max(greptime_value) * 1000 AS v ` +
|
|
483
|
+
`FROM ${(0, sql_literals_1.ident)(exports.EVENT_LOOP_P99_TABLE)} WHERE ${metricWhere(from, to, service)} ` +
|
|
484
|
+
`GROUP BY t ORDER BY t LIMIT ${(0, sql_literals_1.bucketRowLimit)(from, to, bucketSeconds)}`);
|
|
485
|
+
}
|
|
486
|
+
//# sourceMappingURL=telemetry-dashboard.sql.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-dashboard.sql.js","sourceRoot":"","sources":["../../../src/telemetry/dashboard/telemetry-dashboard.sql.ts"],"names":[],"mappings":"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"}
|