@marinoscar/platform-api 0.1.0-next.19 → 0.1.0-next.20
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 +16 -0
- package/README.md +1 -0
- package/dist/alerts/alerts-admin.controller.d.ts +40 -0
- package/dist/alerts/alerts-admin.controller.d.ts.map +1 -0
- package/dist/alerts/alerts-admin.controller.js +297 -0
- package/dist/alerts/alerts-admin.controller.js.map +1 -0
- package/dist/alerts/alerts-context.service.d.ts +64 -0
- package/dist/alerts/alerts-context.service.d.ts.map +1 -0
- package/dist/alerts/alerts-context.service.js +190 -0
- package/dist/alerts/alerts-context.service.js.map +1 -0
- package/dist/alerts/alerts-dispatch.service.d.ts +53 -0
- package/dist/alerts/alerts-dispatch.service.d.ts.map +1 -0
- package/dist/alerts/alerts-dispatch.service.js +135 -0
- package/dist/alerts/alerts-dispatch.service.js.map +1 -0
- package/dist/alerts/alerts-evaluation.service.d.ts +88 -0
- package/dist/alerts/alerts-evaluation.service.d.ts.map +1 -0
- package/dist/alerts/alerts-evaluation.service.js +296 -0
- package/dist/alerts/alerts-evaluation.service.js.map +1 -0
- package/dist/alerts/alerts-event.listener.d.ts +22 -0
- package/dist/alerts/alerts-event.listener.d.ts.map +1 -0
- package/dist/alerts/alerts-event.listener.js +72 -0
- package/dist/alerts/alerts-event.listener.js.map +1 -0
- package/dist/alerts/alerts-incidents.service.d.ts +86 -0
- package/dist/alerts/alerts-incidents.service.d.ts.map +1 -0
- package/dist/alerts/alerts-incidents.service.js +144 -0
- package/dist/alerts/alerts-incidents.service.js.map +1 -0
- package/dist/alerts/alerts-rules.service.d.ts +73 -0
- package/dist/alerts/alerts-rules.service.d.ts.map +1 -0
- package/dist/alerts/alerts-rules.service.js +205 -0
- package/dist/alerts/alerts-rules.service.js.map +1 -0
- package/dist/alerts/alerts-seed.service.d.ts +25 -0
- package/dist/alerts/alerts-seed.service.d.ts.map +1 -0
- package/dist/alerts/alerts-seed.service.js +82 -0
- package/dist/alerts/alerts-seed.service.js.map +1 -0
- package/dist/alerts/alerts.constants.d.ts +53 -0
- package/dist/alerts/alerts.constants.d.ts.map +1 -0
- package/dist/alerts/alerts.constants.js +57 -0
- package/dist/alerts/alerts.constants.js.map +1 -0
- package/dist/alerts/alerts.errors.d.ts +44 -0
- package/dist/alerts/alerts.errors.d.ts.map +1 -0
- package/dist/alerts/alerts.errors.js +47 -0
- package/dist/alerts/alerts.errors.js.map +1 -0
- package/dist/alerts/alerts.metrics.d.ts +60 -0
- package/dist/alerts/alerts.metrics.d.ts.map +1 -0
- package/dist/alerts/alerts.metrics.js +135 -0
- package/dist/alerts/alerts.metrics.js.map +1 -0
- package/dist/alerts/alerts.module.d.ts +35 -0
- package/dist/alerts/alerts.module.d.ts.map +1 -0
- package/dist/alerts/alerts.module.js +96 -0
- package/dist/alerts/alerts.module.js.map +1 -0
- package/dist/alerts/alerts.options.d.ts +64 -0
- package/dist/alerts/alerts.options.d.ts.map +1 -0
- package/dist/alerts/alerts.options.js +34 -0
- package/dist/alerts/alerts.options.js.map +1 -0
- package/dist/alerts/alerts.permissions.d.ts +27 -0
- package/dist/alerts/alerts.permissions.d.ts.map +1 -0
- package/dist/alerts/alerts.permissions.js +29 -0
- package/dist/alerts/alerts.permissions.js.map +1 -0
- package/dist/alerts/alerts.types.d.ts +182 -0
- package/dist/alerts/alerts.types.d.ts.map +1 -0
- package/dist/alerts/alerts.types.js +3 -0
- package/dist/alerts/alerts.types.js.map +1 -0
- package/dist/alerts/data/alerts-db.d.ts +169 -0
- package/dist/alerts/data/alerts-db.d.ts.map +1 -0
- package/dist/alerts/data/alerts-db.js +18 -0
- package/dist/alerts/data/alerts-db.js.map +1 -0
- package/dist/alerts/dto/alerts.dto.d.ts +132 -0
- package/dist/alerts/dto/alerts.dto.d.ts.map +1 -0
- package/dist/alerts/dto/alerts.dto.js +42 -0
- package/dist/alerts/dto/alerts.dto.js.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts +23 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.js +71 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.js.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.d.ts +25 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.d.ts.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.js +54 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.js.map +1 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts +29 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts.map +1 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.js +76 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.js.map +1 -0
- package/dist/alerts/index.d.ts +45 -0
- package/dist/alerts/index.d.ts.map +1 -0
- package/dist/alerts/index.js +108 -0
- package/dist/alerts/index.js.map +1 -0
- package/dist/alerts/kinds/alert-kind.registry.d.ts +33 -0
- package/dist/alerts/kinds/alert-kind.registry.d.ts.map +1 -0
- package/dist/alerts/kinds/alert-kind.registry.js +63 -0
- package/dist/alerts/kinds/alert-kind.registry.js.map +1 -0
- package/dist/alerts/kinds/builtin-kinds.d.ts +18 -0
- package/dist/alerts/kinds/builtin-kinds.d.ts.map +1 -0
- package/dist/alerts/kinds/builtin-kinds.js +33 -0
- package/dist/alerts/kinds/builtin-kinds.js.map +1 -0
- package/dist/alerts/kinds/metric-threshold.kind.d.ts +11 -0
- package/dist/alerts/kinds/metric-threshold.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/metric-threshold.kind.js +63 -0
- package/dist/alerts/kinds/metric-threshold.kind.js.map +1 -0
- package/dist/alerts/kinds/metric-threshold.sql.d.ts +41 -0
- package/dist/alerts/kinds/metric-threshold.sql.d.ts.map +1 -0
- package/dist/alerts/kinds/metric-threshold.sql.js +124 -0
- package/dist/alerts/kinds/metric-threshold.sql.js.map +1 -0
- package/dist/alerts/kinds/node-event.kind.d.ts +44 -0
- package/dist/alerts/kinds/node-event.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/node-event.kind.js +113 -0
- package/dist/alerts/kinds/node-event.kind.js.map +1 -0
- package/dist/alerts/kinds/node-offline.kind.d.ts +11 -0
- package/dist/alerts/kinds/node-offline.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/node-offline.kind.js +41 -0
- package/dist/alerts/kinds/node-offline.kind.js.map +1 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts +11 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.js +40 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.js.map +1 -0
- package/dist/alerts/kinds/verdict.kind.d.ts +13 -0
- package/dist/alerts/kinds/verdict.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/verdict.kind.js +34 -0
- package/dist/alerts/kinds/verdict.kind.js.map +1 -0
- package/dist/alerts/notifications/alerts.notifications.d.ts +77 -0
- package/dist/alerts/notifications/alerts.notifications.d.ts.map +1 -0
- package/dist/alerts/notifications/alerts.notifications.js +145 -0
- package/dist/alerts/notifications/alerts.notifications.js.map +1 -0
- package/dist/alerts/starter-rules.d.ts +21 -0
- package/dist/alerts/starter-rules.d.ts.map +1 -0
- package/dist/alerts/starter-rules.js +141 -0
- package/dist/alerts/starter-rules.js.map +1 -0
- package/dist/alerts/state/alert-state-machine.d.ts +92 -0
- package/dist/alerts/state/alert-state-machine.d.ts.map +1 -0
- package/dist/alerts/state/alert-state-machine.js +96 -0
- package/dist/alerts/state/alert-state-machine.js.map +1 -0
- package/dist/alerts/tasks/alerts-evaluate.task.d.ts +18 -0
- package/dist/alerts/tasks/alerts-evaluate.task.d.ts.map +1 -0
- package/dist/alerts/tasks/alerts-evaluate.task.js +61 -0
- package/dist/alerts/tasks/alerts-evaluate.task.js.map +1 -0
- package/dist/alerts/tasks/alerts-purge.task.d.ts +15 -0
- package/dist/alerts/tasks/alerts-purge.task.d.ts.map +1 -0
- package/dist/alerts/tasks/alerts-purge.task.js +58 -0
- package/dist/alerts/tasks/alerts-purge.task.js.map +1 -0
- package/dist/alerts/testing/conformance.d.ts +58 -0
- package/dist/alerts/testing/conformance.d.ts.map +1 -0
- package/dist/alerts/testing/conformance.js +198 -0
- package/dist/alerts/testing/conformance.js.map +1 -0
- package/dist/alerts/testing/fakes.d.ts +80 -0
- package/dist/alerts/testing/fakes.d.ts.map +1 -0
- package/dist/alerts/testing/fakes.js +230 -0
- package/dist/alerts/testing/fakes.js.map +1 -0
- package/dist/alerts/testing/index.d.ts +5 -0
- package/dist/alerts/testing/index.d.ts.map +1 -0
- package/dist/alerts/testing/index.js +15 -0
- package/dist/alerts/testing/index.js.map +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +8 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/net/ip-classify.d.ts +39 -0
- package/dist/core/net/ip-classify.d.ts.map +1 -0
- package/dist/core/net/ip-classify.js +196 -0
- package/dist/core/net/ip-classify.js.map +1 -0
- package/dist/credentials/testing/conformance.d.ts.map +1 -1
- package/dist/credentials/testing/conformance.js +1 -0
- package/dist/credentials/testing/conformance.js.map +1 -1
- package/dist/jobs/data/jobs-db.d.ts +26 -0
- package/dist/jobs/data/jobs-db.d.ts.map +1 -1
- package/dist/jobs/index.d.ts +1 -1
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/manifest/platform-model-ownership.d.ts +1 -1
- package/dist/manifest/platform-model-ownership.d.ts.map +1 -1
- package/dist/manifest/platform-model-ownership.js +30 -1
- package/dist/manifest/platform-model-ownership.js.map +1 -1
- package/dist/manifest/platform-permissions.d.ts +6 -2
- package/dist/manifest/platform-permissions.d.ts.map +1 -1
- package/dist/manifest/platform-permissions.js +56 -44
- package/dist/manifest/platform-permissions.js.map +1 -1
- package/dist/manifest/platform-user-owned-models.d.ts.map +1 -1
- package/dist/manifest/platform-user-owned-models.js +16 -0
- package/dist/manifest/platform-user-owned-models.js.map +1 -1
- package/dist/nodes/dto/node-admin.dto.d.ts +5 -0
- package/dist/nodes/dto/node-admin.dto.d.ts.map +1 -1
- package/dist/nodes/dto/node-admin.dto.js +19 -0
- package/dist/nodes/dto/node-admin.dto.js.map +1 -1
- package/dist/nodes/dto/node-control-plane.dto.d.ts +26 -0
- package/dist/nodes/dto/node-control-plane.dto.d.ts.map +1 -1
- package/dist/nodes/dto/node-event.dto.d.ts +100 -0
- package/dist/nodes/dto/node-event.dto.d.ts.map +1 -0
- package/dist/nodes/dto/node-event.dto.js +239 -0
- package/dist/nodes/dto/node-event.dto.js.map +1 -0
- package/dist/nodes/dto/node-response.dto.d.ts +21 -0
- package/dist/nodes/dto/node-response.dto.d.ts.map +1 -1
- package/dist/nodes/dto/node-response.dto.js +42 -1
- package/dist/nodes/dto/node-response.dto.js.map +1 -1
- package/dist/nodes/events/node-event.event.d.ts +41 -0
- package/dist/nodes/events/node-event.event.d.ts.map +1 -0
- package/dist/nodes/events/node-event.event.js +69 -0
- package/dist/nodes/events/node-event.event.js.map +1 -0
- package/dist/nodes/handlers/node-events-purge.handler.d.ts +31 -0
- package/dist/nodes/handlers/node-events-purge.handler.d.ts.map +1 -0
- package/dist/nodes/handlers/node-events-purge.handler.js +91 -0
- package/dist/nodes/handlers/node-events-purge.handler.js.map +1 -0
- package/dist/nodes/index.d.ts +11 -4
- package/dist/nodes/index.d.ts.map +1 -1
- package/dist/nodes/index.js +20 -1
- package/dist/nodes/index.js.map +1 -1
- package/dist/nodes/node-events.service.d.ts +87 -0
- package/dist/nodes/node-events.service.d.ts.map +1 -0
- package/dist/nodes/node-events.service.js +271 -0
- package/dist/nodes/node-events.service.js.map +1 -0
- package/dist/nodes/node-fleet-metrics.service.d.ts +10 -1
- package/dist/nodes/node-fleet-metrics.service.d.ts.map +1 -1
- package/dist/nodes/node-fleet-metrics.service.js +31 -0
- package/dist/nodes/node-fleet-metrics.service.js.map +1 -1
- package/dist/nodes/node-lifecycle.service.d.ts +16 -1
- package/dist/nodes/node-lifecycle.service.d.ts.map +1 -1
- package/dist/nodes/node-lifecycle.service.js +7 -0
- package/dist/nodes/node-lifecycle.service.js.map +1 -1
- package/dist/nodes/nodes-admin.controller.d.ts +5 -1
- package/dist/nodes/nodes-admin.controller.d.ts.map +1 -1
- package/dist/nodes/nodes-admin.controller.js +32 -2
- package/dist/nodes/nodes-admin.controller.js.map +1 -1
- package/dist/nodes/nodes.controller.d.ts +7 -3
- package/dist/nodes/nodes.controller.d.ts.map +1 -1
- package/dist/nodes/nodes.controller.js +46 -6
- package/dist/nodes/nodes.controller.js.map +1 -1
- package/dist/nodes/nodes.metrics.d.ts +23 -1
- package/dist/nodes/nodes.metrics.d.ts.map +1 -1
- package/dist/nodes/nodes.metrics.js +80 -1
- package/dist/nodes/nodes.metrics.js.map +1 -1
- package/dist/nodes/nodes.module.d.ts.map +1 -1
- package/dist/nodes/nodes.module.js +6 -0
- package/dist/nodes/nodes.module.js.map +1 -1
- package/dist/nodes/nodes.options.d.ts +17 -0
- package/dist/nodes/nodes.options.d.ts.map +1 -1
- package/dist/nodes/nodes.options.js +13 -2
- package/dist/nodes/nodes.options.js.map +1 -1
- package/dist/nodes/nodes.service.d.ts +3 -1
- package/dist/nodes/nodes.service.d.ts.map +1 -1
- package/dist/nodes/nodes.service.js +14 -3
- package/dist/nodes/nodes.service.js.map +1 -1
- package/dist/nodes/tasks/node-events-purge.task.d.ts +13 -0
- package/dist/nodes/tasks/node-events-purge.task.d.ts.map +1 -0
- package/dist/nodes/tasks/node-events-purge.task.js +73 -0
- package/dist/nodes/tasks/node-events-purge.task.js.map +1 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts +30 -8
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts.map +1 -1
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js +12 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js.map +1 -1
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts +15 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts.map +1 -1
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js +17 -2
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js.map +1 -1
- package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts +3 -3
- package/dist/telemetry/index.d.ts +4 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +4 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts.map +1 -1
- package/dist/telemetry/metrics/groups/nodes.metric-group.js +77 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.js.map +1 -1
- package/dist/telemetry/metrics/metric-verdict.d.ts +1 -1
- package/dist/telemetry/metrics/metric-verdict.d.ts.map +1 -1
- package/dist/telemetry/metrics/metric-verdict.js +15 -1
- package/dist/telemetry/metrics/metric-verdict.js.map +1 -1
- package/dist/telemetry/query/telemetry-query-facade.d.ts +1 -1
- package/dist/telemetry/query/telemetry-query-facade.d.ts.map +1 -1
- package/dist/telemetry/query/telemetry-query-facade.js.map +1 -1
- package/dist/telemetry/query/telemetry-query.service.d.ts +2 -2
- package/dist/telemetry/query/telemetry-query.service.d.ts.map +1 -1
- package/dist/telemetry/query/telemetry-query.service.js +4 -0
- package/dist/telemetry/query/telemetry-query.service.js.map +1 -1
- package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +1 -1
- package/dist/telemetry/telemetry-support-bundle.section.d.ts +4 -4
- package/dist/telemetry/telemetry.module.d.ts.map +1 -1
- package/dist/telemetry/telemetry.module.js +1 -0
- package/dist/telemetry/telemetry.module.js.map +1 -1
- package/dist/telemetry/testing/metric-schema.fixture.d.ts.map +1 -1
- package/dist/telemetry/testing/metric-schema.fixture.js +56 -0
- package/dist/telemetry/testing/metric-schema.fixture.js.map +1 -1
- package/dist/user-data/platform-user-data.d.ts.map +1 -1
- package/dist/user-data/platform-user-data.js +2 -0
- package/dist/user-data/platform-user-data.js.map +1 -1
- package/dist/webhooks/data/webhooks-db.d.ts +176 -0
- package/dist/webhooks/data/webhooks-db.d.ts.map +1 -0
- package/dist/webhooks/data/webhooks-db.js +14 -0
- package/dist/webhooks/data/webhooks-db.js.map +1 -0
- package/dist/webhooks/egress/egress-guard.d.ts +99 -0
- package/dist/webhooks/egress/egress-guard.d.ts.map +1 -0
- package/dist/webhooks/egress/egress-guard.js +172 -0
- package/dist/webhooks/egress/egress-guard.js.map +1 -0
- package/dist/webhooks/egress/transport.d.ts +58 -0
- package/dist/webhooks/egress/transport.d.ts.map +1 -0
- package/dist/webhooks/egress/transport.js +115 -0
- package/dist/webhooks/egress/transport.js.map +1 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.d.ts +76 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.d.ts.map +1 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.js +332 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.js.map +1 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.d.ts +28 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.d.ts.map +1 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.js +73 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.js.map +1 -0
- package/dist/webhooks/handlers/webhook-purge.handler.d.ts +33 -0
- package/dist/webhooks/handlers/webhook-purge.handler.d.ts.map +1 -0
- package/dist/webhooks/handlers/webhook-purge.handler.js +77 -0
- package/dist/webhooks/handlers/webhook-purge.handler.js.map +1 -0
- package/dist/webhooks/http/admin-webhooks.controller.d.ts +36 -0
- package/dist/webhooks/http/admin-webhooks.controller.d.ts.map +1 -0
- package/dist/webhooks/http/admin-webhooks.controller.js +250 -0
- package/dist/webhooks/http/admin-webhooks.controller.js.map +1 -0
- package/dist/webhooks/http/org-webhooks.controller.d.ts +36 -0
- package/dist/webhooks/http/org-webhooks.controller.d.ts.map +1 -0
- package/dist/webhooks/http/org-webhooks.controller.js +249 -0
- package/dist/webhooks/http/org-webhooks.controller.js.map +1 -0
- package/dist/webhooks/http/scope-context.d.ts +17 -0
- package/dist/webhooks/http/scope-context.d.ts.map +1 -0
- package/dist/webhooks/http/scope-context.js +28 -0
- package/dist/webhooks/http/scope-context.js.map +1 -0
- package/dist/webhooks/http/webhook.dto.d.ts +174 -0
- package/dist/webhooks/http/webhook.dto.d.ts.map +1 -0
- package/dist/webhooks/http/webhook.dto.js +58 -0
- package/dist/webhooks/http/webhook.dto.js.map +1 -0
- package/dist/webhooks/http/webhooks.controller.d.ts +36 -0
- package/dist/webhooks/http/webhooks.controller.d.ts.map +1 -0
- package/dist/webhooks/http/webhooks.controller.js +243 -0
- package/dist/webhooks/http/webhooks.controller.js.map +1 -0
- package/dist/webhooks/index.d.ts +43 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +147 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/listeners/webhook-event.listeners.d.ts +23 -0
- package/dist/webhooks/listeners/webhook-event.listeners.d.ts.map +1 -0
- package/dist/webhooks/listeners/webhook-event.listeners.js +120 -0
- package/dist/webhooks/listeners/webhook-event.listeners.js.map +1 -0
- package/dist/webhooks/notifications/webhook-notification.channel.d.ts +31 -0
- package/dist/webhooks/notifications/webhook-notification.channel.d.ts.map +1 -0
- package/dist/webhooks/notifications/webhook-notification.channel.js +127 -0
- package/dist/webhooks/notifications/webhook-notification.channel.js.map +1 -0
- package/dist/webhooks/notifications/webhook-notifications.d.ts +98 -0
- package/dist/webhooks/notifications/webhook-notifications.d.ts.map +1 -0
- package/dist/webhooks/notifications/webhook-notifications.js +150 -0
- package/dist/webhooks/notifications/webhook-notifications.js.map +1 -0
- package/dist/webhooks/ports.d.ts +29 -0
- package/dist/webhooks/ports.d.ts.map +1 -0
- package/dist/webhooks/ports.js +23 -0
- package/dist/webhooks/ports.js.map +1 -0
- package/dist/webhooks/registry/builtin-events.d.ts +57 -0
- package/dist/webhooks/registry/builtin-events.d.ts.map +1 -0
- package/dist/webhooks/registry/builtin-events.js +113 -0
- package/dist/webhooks/registry/builtin-events.js.map +1 -0
- package/dist/webhooks/registry/webhook-catalog.d.ts +63 -0
- package/dist/webhooks/registry/webhook-catalog.d.ts.map +1 -0
- package/dist/webhooks/registry/webhook-catalog.js +123 -0
- package/dist/webhooks/registry/webhook-catalog.js.map +1 -0
- package/dist/webhooks/registry/webhook-event.registry.d.ts +116 -0
- package/dist/webhooks/registry/webhook-event.registry.d.ts.map +1 -0
- package/dist/webhooks/registry/webhook-event.registry.js +152 -0
- package/dist/webhooks/registry/webhook-event.registry.js.map +1 -0
- package/dist/webhooks/signing.d.ts +31 -0
- package/dist/webhooks/signing.d.ts.map +1 -0
- package/dist/webhooks/signing.js +48 -0
- package/dist/webhooks/signing.js.map +1 -0
- package/dist/webhooks/tasks/webhook-purge.task.d.ts +17 -0
- package/dist/webhooks/tasks/webhook-purge.task.d.ts.map +1 -0
- package/dist/webhooks/tasks/webhook-purge.task.js +68 -0
- package/dist/webhooks/tasks/webhook-purge.task.js.map +1 -0
- package/dist/webhooks/testing/conformance.d.ts +61 -0
- package/dist/webhooks/testing/conformance.d.ts.map +1 -0
- package/dist/webhooks/testing/conformance.js +316 -0
- package/dist/webhooks/testing/conformance.js.map +1 -0
- package/dist/webhooks/testing/in-memory.d.ts +156 -0
- package/dist/webhooks/testing/in-memory.d.ts.map +1 -0
- package/dist/webhooks/testing/in-memory.js +323 -0
- package/dist/webhooks/testing/in-memory.js.map +1 -0
- package/dist/webhooks/testing/index.d.ts +7 -0
- package/dist/webhooks/testing/index.d.ts.map +1 -0
- package/dist/webhooks/testing/index.js +25 -0
- package/dist/webhooks/testing/index.js.map +1 -0
- package/dist/webhooks/testing/kit.d.ts +86 -0
- package/dist/webhooks/testing/kit.d.ts.map +1 -0
- package/dist/webhooks/testing/kit.js +113 -0
- package/dist/webhooks/testing/kit.js.map +1 -0
- package/dist/webhooks/webhook-endpoints.service.d.ts +142 -0
- package/dist/webhooks/webhook-endpoints.service.d.ts.map +1 -0
- package/dist/webhooks/webhook-endpoints.service.js +366 -0
- package/dist/webhooks/webhook-endpoints.service.js.map +1 -0
- package/dist/webhooks/webhook-envelope.d.ts +36 -0
- package/dist/webhooks/webhook-envelope.d.ts.map +1 -0
- package/dist/webhooks/webhook-envelope.js +46 -0
- package/dist/webhooks/webhook-envelope.js.map +1 -0
- package/dist/webhooks/webhook-secrets.service.d.ts +49 -0
- package/dist/webhooks/webhook-secrets.service.d.ts.map +1 -0
- package/dist/webhooks/webhook-secrets.service.js +118 -0
- package/dist/webhooks/webhook-secrets.service.js.map +1 -0
- package/dist/webhooks/webhook-views.d.ts +34 -0
- package/dist/webhooks/webhook-views.d.ts.map +1 -0
- package/dist/webhooks/webhook-views.js +83 -0
- package/dist/webhooks/webhook-views.js.map +1 -0
- package/dist/webhooks/webhooks.access.d.ts +28 -0
- package/dist/webhooks/webhooks.access.d.ts.map +1 -0
- package/dist/webhooks/webhooks.access.js +55 -0
- package/dist/webhooks/webhooks.access.js.map +1 -0
- package/dist/webhooks/webhooks.constants.d.ts +73 -0
- package/dist/webhooks/webhooks.constants.d.ts.map +1 -0
- package/dist/webhooks/webhooks.constants.js +100 -0
- package/dist/webhooks/webhooks.constants.js.map +1 -0
- package/dist/webhooks/webhooks.credentials.d.ts +28 -0
- package/dist/webhooks/webhooks.credentials.d.ts.map +1 -0
- package/dist/webhooks/webhooks.credentials.js +51 -0
- package/dist/webhooks/webhooks.credentials.js.map +1 -0
- package/dist/webhooks/webhooks.errors.d.ts +25 -0
- package/dist/webhooks/webhooks.errors.d.ts.map +1 -0
- package/dist/webhooks/webhooks.errors.js +65 -0
- package/dist/webhooks/webhooks.errors.js.map +1 -0
- package/dist/webhooks/webhooks.metrics.d.ts +24 -0
- package/dist/webhooks/webhooks.metrics.d.ts.map +1 -0
- package/dist/webhooks/webhooks.metrics.js +70 -0
- package/dist/webhooks/webhooks.metrics.js.map +1 -0
- package/dist/webhooks/webhooks.module.d.ts +29 -0
- package/dist/webhooks/webhooks.module.d.ts.map +1 -0
- package/dist/webhooks/webhooks.module.js +108 -0
- package/dist/webhooks/webhooks.module.js.map +1 -0
- package/dist/webhooks/webhooks.options.d.ts +119 -0
- package/dist/webhooks/webhooks.options.d.ts.map +1 -0
- package/dist/webhooks/webhooks.options.js +80 -0
- package/dist/webhooks/webhooks.options.js.map +1 -0
- package/dist/webhooks/webhooks.permissions.d.ts +47 -0
- package/dist/webhooks/webhooks.permissions.d.ts.map +1 -0
- package/dist/webhooks/webhooks.permissions.js +83 -0
- package/dist/webhooks/webhooks.permissions.js.map +1 -0
- package/dist/webhooks/webhooks.repository.d.ts +162 -0
- package/dist/webhooks/webhooks.repository.d.ts.map +1 -0
- package/dist/webhooks/webhooks.repository.js +246 -0
- package/dist/webhooks/webhooks.repository.js.map +1 -0
- package/dist/webhooks/webhooks.service.d.ts +91 -0
- package/dist/webhooks/webhooks.service.d.ts.map +1 -0
- package/dist/webhooks/webhooks.service.js +216 -0
- package/dist/webhooks/webhooks.service.js.map +1 -0
- package/package.json +19 -3
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emptyAlertConfigSchema = exports.verdictKind = void 0;
|
|
4
|
+
const alerts_1 = require("@marinoscar/platform-contract/alerts");
|
|
5
|
+
Object.defineProperty(exports, "emptyAlertConfigSchema", { enumerable: true, get: function () { return alerts_1.emptyAlertConfigSchema; } });
|
|
6
|
+
const RANK = { degraded: 1, critical: 2 };
|
|
7
|
+
/**
|
|
8
|
+
* `verdict`: the telemetry dashboard verdict is at or past a level. Computed
|
|
9
|
+
* in-process by the dashboard's own service, so it can never disagree with the
|
|
10
|
+
* banner an administrator sees. `no_data` and `healthy` never breach.
|
|
11
|
+
*
|
|
12
|
+
* @stability experimental
|
|
13
|
+
*/
|
|
14
|
+
exports.verdictKind = {
|
|
15
|
+
id: alerts_1.ALERT_KIND_IDS.VERDICT,
|
|
16
|
+
label: 'Dashboard verdict',
|
|
17
|
+
description: 'The telemetry dashboard verdict is degraded or critical.',
|
|
18
|
+
configSchema: alerts_1.verdictConfigSchema,
|
|
19
|
+
async evaluate(ctx, rule) {
|
|
20
|
+
const verdict = await ctx.verdict();
|
|
21
|
+
const breached = (RANK[verdict.level] ?? 0) >= RANK[rule.config.minLevel];
|
|
22
|
+
const reasons = verdict.reasons.length > 0 ? `: ${verdict.reasons.join('; ')}` : '';
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
labels: {},
|
|
26
|
+
value: RANK[verdict.level] ?? 0,
|
|
27
|
+
breached,
|
|
28
|
+
summary: `${rule.name}: the telemetry verdict is ${verdict.level}${reasons}`.slice(0, 500),
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
},
|
|
32
|
+
describe: (rule) => `The telemetry dashboard verdict is ${rule.config.minLevel} or worse`,
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=verdict.kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verdict.kind.js","sourceRoot":"","sources":["../../../src/alerts/kinds/verdict.kind.ts"],"names":[],"mappings":";;;AAAA,iEAM8C;AAmCrC,uGAvCP,+BAAsB,OAuCO;AA/B/B,MAAM,IAAI,GAA2B,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAElE;;;;;;GAMG;AACU,QAAA,WAAW,GAAiC;IACvD,EAAE,EAAE,uBAAc,CAAC,OAAO;IAC1B,KAAK,EAAE,mBAAmB;IAC1B,WAAW,EAAE,0DAA0D;IACvE,YAAY,EAAE,4BAAmB;IACjC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI;QACtB,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,OAAO;YACL;gBACE,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC/B,QAAQ;gBACR,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,8BAA8B,OAAO,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;aAC3F;SACF,CAAC;IACJ,CAAC;IACD,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sCAAsC,IAAI,CAAC,MAAM,CAAC,QAAQ,WAAW;CAC1F,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { EmailRenderContext, RenderedEmail } from '../../email/index';
|
|
2
|
+
import type { BrowserNotificationTemplate, NotificationRegistration } from '../../notifications/index';
|
|
3
|
+
/**
|
|
4
|
+
* Everything the alert emails and browser notifications render.
|
|
5
|
+
*
|
|
6
|
+
* @stability experimental
|
|
7
|
+
*/
|
|
8
|
+
export interface AlertNotificationData {
|
|
9
|
+
/** The incident id. */
|
|
10
|
+
incidentId: string;
|
|
11
|
+
/** The rule id. */
|
|
12
|
+
ruleId: string;
|
|
13
|
+
/** The rule's display name. Escaped on the way into the html. */
|
|
14
|
+
ruleName: string;
|
|
15
|
+
/** `info`, `warning` or `critical`. */
|
|
16
|
+
severity: string;
|
|
17
|
+
/** `fired` or `resolved`. */
|
|
18
|
+
state: 'fired' | 'resolved';
|
|
19
|
+
/** One sentence on what is wrong. */
|
|
20
|
+
summary: string;
|
|
21
|
+
/** The label set (`node.name`, ...). */
|
|
22
|
+
labels: Record<string, string>;
|
|
23
|
+
/** The last observed value, or `null`. */
|
|
24
|
+
value: number | null;
|
|
25
|
+
/** When it fired. */
|
|
26
|
+
firedAt: Date | null;
|
|
27
|
+
/** When it resolved. */
|
|
28
|
+
resolvedAt: Date | null;
|
|
29
|
+
/** Absolute URL of the application root, for the CTA. Optional. */
|
|
30
|
+
appUrl?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Renders the alert email, fired or resolved (`data.state`).
|
|
34
|
+
*
|
|
35
|
+
* @param data - the alert.
|
|
36
|
+
* @param ctx - the render context.
|
|
37
|
+
* @returns the rendered message.
|
|
38
|
+
*
|
|
39
|
+
* @stability experimental
|
|
40
|
+
*/
|
|
41
|
+
export declare function alertEmail(data: AlertNotificationData, ctx?: EmailRenderContext): RenderedEmail;
|
|
42
|
+
/**
|
|
43
|
+
* The bell, toast and push rendering of both alert events.
|
|
44
|
+
*
|
|
45
|
+
* @stability experimental
|
|
46
|
+
*/
|
|
47
|
+
export declare const alertBrowserTemplate: BrowserNotificationTemplate;
|
|
48
|
+
/**
|
|
49
|
+
* The email template names the alert events bind. PERMANENT once deliveries name them.
|
|
50
|
+
*
|
|
51
|
+
* @stability experimental
|
|
52
|
+
*/
|
|
53
|
+
export declare const ALERT_EMAIL_TEMPLATES: {
|
|
54
|
+
/** The template of `alerts.alert_fired`. */
|
|
55
|
+
readonly FIRED: "alert-fired";
|
|
56
|
+
/** The template of `alerts.alert_resolved`. */
|
|
57
|
+
readonly RESOLVED: "alert-resolved";
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* The two alert notification events. Register with
|
|
61
|
+
* `registerNotifications(ALERTS_NOTIFICATIONS)` after
|
|
62
|
+
* {@link registerAlertsEmailTemplates}.
|
|
63
|
+
*
|
|
64
|
+
* @extensionPoint registry
|
|
65
|
+
* @stability experimental
|
|
66
|
+
*/
|
|
67
|
+
export declare const ALERTS_NOTIFICATIONS: readonly NotificationRegistration[];
|
|
68
|
+
/**
|
|
69
|
+
* Registers the two alert email templates. IDEMPOTENT: a name already
|
|
70
|
+
* registered with this renderer is skipped.
|
|
71
|
+
*
|
|
72
|
+
* @throws RegistryError `DUPLICATE_ID` when an app registered the name with another renderer; `FROZEN` after bootstrap.
|
|
73
|
+
*
|
|
74
|
+
* @stability experimental
|
|
75
|
+
*/
|
|
76
|
+
export declare function registerAlertsEmailTemplates(): void;
|
|
77
|
+
//# sourceMappingURL=alerts.notifications.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.notifications.d.ts","sourceRoot":"","sources":["../../../src/alerts/notifications/alerts.notifications.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAsB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE/F,OAAO,KAAK,EAA8B,2BAA2B,EAAwB,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAMzJ;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,6BAA6B;IAC7B,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC;IAC5B,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,qBAAqB;IACrB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IACrB,wBAAwB;IACxB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,mEAAmE;IACnE,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,CAAC,EAAE,kBAAkB,GAAG,aAAa,CAmD/F;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,2BAOlC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB;IAChC,4CAA4C;;IAE5C,+CAA+C;;CAEvC,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,wBAAwB,EAuBnE,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,4BAA4B,IAAI,IAAI,CAKnD"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ALERTS_NOTIFICATIONS = exports.ALERT_EMAIL_TEMPLATES = exports.alertBrowserTemplate = void 0;
|
|
4
|
+
exports.alertEmail = alertEmail;
|
|
5
|
+
exports.registerAlertsEmailTemplates = registerAlertsEmailTemplates;
|
|
6
|
+
const index_1 = require("../../email/index");
|
|
7
|
+
const index_2 = require("../../email/index");
|
|
8
|
+
const alerts_constants_1 = require("../alerts.constants");
|
|
9
|
+
/** Where the CTA points, appended to the application root. Matches the admin card. */
|
|
10
|
+
const ALERTS_ADMIN_PATH = '/admin/settings/alerts';
|
|
11
|
+
function detailRow(label, value) {
|
|
12
|
+
return (0, index_1.html) `<tr>
|
|
13
|
+
<td style="padding:6px 16px 6px 0;font-size:14px;line-height:20px;color:#4b5563;white-space:nowrap;vertical-align:top;">${label}</td>
|
|
14
|
+
<td style="padding:6px 0;font-size:14px;line-height:20px;color:#1f2937;vertical-align:top;"><strong>${value}</strong></td>
|
|
15
|
+
</tr>`;
|
|
16
|
+
}
|
|
17
|
+
function headline(data) {
|
|
18
|
+
return data.state === 'fired'
|
|
19
|
+
? `Alert (${data.severity}): ${data.ruleName}`
|
|
20
|
+
: `Resolved: ${data.ruleName}`;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Renders the alert email, fired or resolved (`data.state`).
|
|
24
|
+
*
|
|
25
|
+
* @param data - the alert.
|
|
26
|
+
* @param ctx - the render context.
|
|
27
|
+
* @returns the rendered message.
|
|
28
|
+
*
|
|
29
|
+
* @stability experimental
|
|
30
|
+
*/
|
|
31
|
+
function alertEmail(data, ctx) {
|
|
32
|
+
const context = (0, index_1.resolveEmailRenderContext)(ctx);
|
|
33
|
+
const appName = context.appName;
|
|
34
|
+
const title = headline(data);
|
|
35
|
+
const labels = Object.entries(data.labels);
|
|
36
|
+
const ctaUrl = data.appUrl ? `${data.appUrl}${ALERTS_ADMIN_PATH}` : undefined;
|
|
37
|
+
const when = data.state === 'fired' ? data.firedAt : data.resolvedAt;
|
|
38
|
+
const whenText = when ? (0, index_1.formatEmailDateTime)(when, context) : 'Unknown time';
|
|
39
|
+
const rows = [
|
|
40
|
+
detailRow('Rule', data.ruleName),
|
|
41
|
+
detailRow('Severity', data.severity),
|
|
42
|
+
detailRow(data.state === 'fired' ? 'Fired at' : 'Resolved at', whenText),
|
|
43
|
+
...labels.map(([k, v]) => detailRow(k, v)),
|
|
44
|
+
];
|
|
45
|
+
const bodyHtml = (0, index_1.html) `
|
|
46
|
+
<p style="margin:0 0 16px 0;">${data.summary}</p>
|
|
47
|
+
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 20px 0;">${rows}</table>
|
|
48
|
+
<p style="margin:0;font-size:13px;line-height:20px;color:#4b5563;">You are receiving this because you can view alerts in ${appName}.</p>
|
|
49
|
+
`;
|
|
50
|
+
const htmlDocument = (0, index_1.renderLayout)({ title, previewText: data.summary, bodyHtml, ctaLabel: ctaUrl ? 'Open alerts' : undefined, ctaUrl }, context);
|
|
51
|
+
const text = (0, index_1.plainText)({
|
|
52
|
+
title,
|
|
53
|
+
lines: [
|
|
54
|
+
data.summary,
|
|
55
|
+
'',
|
|
56
|
+
` Rule: ${data.ruleName}`,
|
|
57
|
+
` Severity: ${data.severity}`,
|
|
58
|
+
` ${data.state === 'fired' ? 'Fired at:' : 'Resolved at:'} ${whenText}`,
|
|
59
|
+
...labels.map(([k, v]) => ` ${k}: ${v}`),
|
|
60
|
+
'',
|
|
61
|
+
`You are receiving this because you can view alerts in ${appName}.`,
|
|
62
|
+
],
|
|
63
|
+
ctaLabel: ctaUrl ? 'Open alerts' : undefined,
|
|
64
|
+
ctaUrl,
|
|
65
|
+
}, context);
|
|
66
|
+
return {
|
|
67
|
+
subject: `${appName}: ${title}`,
|
|
68
|
+
html: htmlDocument,
|
|
69
|
+
text,
|
|
70
|
+
headers: { ...index_1.TRANSACTIONAL_EMAIL_HEADERS },
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* The bell, toast and push rendering of both alert events.
|
|
75
|
+
*
|
|
76
|
+
* @stability experimental
|
|
77
|
+
*/
|
|
78
|
+
const alertBrowserTemplate = (data, _ctx) => {
|
|
79
|
+
const alert = data;
|
|
80
|
+
return {
|
|
81
|
+
title: headline(alert),
|
|
82
|
+
body: alert.summary,
|
|
83
|
+
link: ALERTS_ADMIN_PATH,
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
exports.alertBrowserTemplate = alertBrowserTemplate;
|
|
87
|
+
/**
|
|
88
|
+
* The email template names the alert events bind. PERMANENT once deliveries name them.
|
|
89
|
+
*
|
|
90
|
+
* @stability experimental
|
|
91
|
+
*/
|
|
92
|
+
exports.ALERT_EMAIL_TEMPLATES = {
|
|
93
|
+
/** The template of `alerts.alert_fired`. */
|
|
94
|
+
FIRED: 'alert-fired',
|
|
95
|
+
/** The template of `alerts.alert_resolved`. */
|
|
96
|
+
RESOLVED: 'alert-resolved',
|
|
97
|
+
};
|
|
98
|
+
/**
|
|
99
|
+
* The two alert notification events. Register with
|
|
100
|
+
* `registerNotifications(ALERTS_NOTIFICATIONS)` after
|
|
101
|
+
* {@link registerAlertsEmailTemplates}.
|
|
102
|
+
*
|
|
103
|
+
* @extensionPoint registry
|
|
104
|
+
* @stability experimental
|
|
105
|
+
*/
|
|
106
|
+
exports.ALERTS_NOTIFICATIONS = [
|
|
107
|
+
{
|
|
108
|
+
event: {
|
|
109
|
+
key: alerts_constants_1.ALERT_FIRED_NOTIFICATION,
|
|
110
|
+
label: 'Alert fired',
|
|
111
|
+
description: 'Sent to administrators who can view alerts when an alert rule starts firing.',
|
|
112
|
+
channels: ['email', 'browser', 'push'],
|
|
113
|
+
defaultEnabled: true,
|
|
114
|
+
},
|
|
115
|
+
emailTemplate: exports.ALERT_EMAIL_TEMPLATES.FIRED,
|
|
116
|
+
browserTemplate: exports.alertBrowserTemplate,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
event: {
|
|
120
|
+
key: alerts_constants_1.ALERT_RESOLVED_NOTIFICATION,
|
|
121
|
+
label: 'Alert resolved',
|
|
122
|
+
description: 'Sent to administrators who can view alerts when a firing alert clears.',
|
|
123
|
+
channels: ['email', 'browser'],
|
|
124
|
+
defaultEnabled: true,
|
|
125
|
+
},
|
|
126
|
+
emailTemplate: exports.ALERT_EMAIL_TEMPLATES.RESOLVED,
|
|
127
|
+
browserTemplate: exports.alertBrowserTemplate,
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
/**
|
|
131
|
+
* Registers the two alert email templates. IDEMPOTENT: a name already
|
|
132
|
+
* registered with this renderer is skipped.
|
|
133
|
+
*
|
|
134
|
+
* @throws RegistryError `DUPLICATE_ID` when an app registered the name with another renderer; `FROZEN` after bootstrap.
|
|
135
|
+
*
|
|
136
|
+
* @stability experimental
|
|
137
|
+
*/
|
|
138
|
+
function registerAlertsEmailTemplates() {
|
|
139
|
+
const entries = [exports.ALERT_EMAIL_TEMPLATES.FIRED, exports.ALERT_EMAIL_TEMPLATES.RESOLVED]
|
|
140
|
+
.filter((name) => index_2.emailTemplateRegistry.get(name)?.render !== alertEmail)
|
|
141
|
+
.map((name) => ({ name, render: alertEmail, registrant: 'alerts' }));
|
|
142
|
+
if (entries.length > 0)
|
|
143
|
+
index_2.emailTemplateRegistry.registerAll(entries);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=alerts.notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alerts.notifications.js","sourceRoot":"","sources":["../../../src/alerts/notifications/alerts.notifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type CreateAlertRule } from '@marinoscar/platform-contract/alerts';
|
|
2
|
+
/**
|
|
3
|
+
* One starter rule: a stable key and the rule it seeds.
|
|
4
|
+
*
|
|
5
|
+
* @stability experimental
|
|
6
|
+
*/
|
|
7
|
+
export interface StarterAlertRule {
|
|
8
|
+
/** The stable key (`alert_rules.key`). PERMANENT. */
|
|
9
|
+
readonly key: string;
|
|
10
|
+
/** The rule's definition. Always seeded disabled. */
|
|
11
|
+
readonly rule: Omit<CreateAlertRule, 'enabled'>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The starter rules, seeded disabled and never overwritten: an administrator's
|
|
15
|
+
* edit to one survives every restart.
|
|
16
|
+
* Starter rules cannot be deleted, only edited and disabled.
|
|
17
|
+
*
|
|
18
|
+
* @stability experimental
|
|
19
|
+
*/
|
|
20
|
+
export declare const STARTER_ALERT_RULES: readonly StarterAlertRule[];
|
|
21
|
+
//# sourceMappingURL=starter-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter-rules.d.ts","sourceRoot":"","sources":["../../src/alerts/starter-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2C,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAErH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;CACjD;AAID;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EA+H1D,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STARTER_ALERT_RULES = void 0;
|
|
4
|
+
const alerts_1 = require("@marinoscar/platform-contract/alerts");
|
|
5
|
+
const base = { notifyChannels: [], webhook: true, cooldownSeconds: 900 };
|
|
6
|
+
/**
|
|
7
|
+
* The starter rules, seeded disabled and never overwritten: an administrator's
|
|
8
|
+
* edit to one survives every restart.
|
|
9
|
+
* Starter rules cannot be deleted, only edited and disabled.
|
|
10
|
+
*
|
|
11
|
+
* @stability experimental
|
|
12
|
+
*/
|
|
13
|
+
exports.STARTER_ALERT_RULES = [
|
|
14
|
+
{
|
|
15
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_ON_BATTERY,
|
|
16
|
+
rule: {
|
|
17
|
+
...base,
|
|
18
|
+
name: 'Worker node on battery',
|
|
19
|
+
description: 'A worker node switched from AC power to battery. Clears when AC returns.',
|
|
20
|
+
kind: alerts_1.ALERT_KIND_IDS.NODE_EVENT,
|
|
21
|
+
severity: 'warning',
|
|
22
|
+
forSeconds: 0,
|
|
23
|
+
config: {
|
|
24
|
+
eventTypes: ['power.source_changed'],
|
|
25
|
+
attrs: { to: 'battery' },
|
|
26
|
+
recovery: { eventTypes: ['power.source_changed'], attrs: { to: 'ac' } },
|
|
27
|
+
resolveAfterSeconds: 86_400,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_BATTERY_LOW,
|
|
33
|
+
rule: {
|
|
34
|
+
...base,
|
|
35
|
+
name: 'Worker node battery low',
|
|
36
|
+
description: 'A worker node reported a low or critical battery. Clears when the battery recovers.',
|
|
37
|
+
kind: alerts_1.ALERT_KIND_IDS.NODE_EVENT,
|
|
38
|
+
severity: 'warning',
|
|
39
|
+
forSeconds: 0,
|
|
40
|
+
config: {
|
|
41
|
+
eventTypes: ['power.battery_low', 'power.battery_critical'],
|
|
42
|
+
recovery: { eventTypes: ['power.battery_recovered'] },
|
|
43
|
+
resolveAfterSeconds: 21_600,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_HOST_CPU_HIGH,
|
|
49
|
+
rule: {
|
|
50
|
+
...base,
|
|
51
|
+
name: 'Worker host CPU high',
|
|
52
|
+
description: 'A worker host averaged more than 90% CPU over five minutes.',
|
|
53
|
+
kind: alerts_1.ALERT_KIND_IDS.METRIC_THRESHOLD,
|
|
54
|
+
severity: 'warning',
|
|
55
|
+
forSeconds: 300,
|
|
56
|
+
config: {
|
|
57
|
+
metric: 'app.nodes.host.cpu.utilization',
|
|
58
|
+
aggregation: 'avg',
|
|
59
|
+
windowSeconds: 300,
|
|
60
|
+
comparator: 'gt',
|
|
61
|
+
threshold: 90,
|
|
62
|
+
groupBy: ['node_id'],
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_HOST_MEMORY_LOW,
|
|
68
|
+
rule: {
|
|
69
|
+
...base,
|
|
70
|
+
name: 'Worker host memory low',
|
|
71
|
+
description: 'A worker host has less than 512 MiB of memory available.',
|
|
72
|
+
kind: alerts_1.ALERT_KIND_IDS.METRIC_THRESHOLD,
|
|
73
|
+
severity: 'warning',
|
|
74
|
+
forSeconds: 300,
|
|
75
|
+
config: {
|
|
76
|
+
metric: 'app.nodes.host.memory.available',
|
|
77
|
+
aggregation: 'last',
|
|
78
|
+
windowSeconds: 300,
|
|
79
|
+
comparator: 'lt',
|
|
80
|
+
threshold: 536_870_912,
|
|
81
|
+
groupBy: ['node_id'],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.NODES_OFFLINE,
|
|
87
|
+
rule: {
|
|
88
|
+
...base,
|
|
89
|
+
name: 'Worker node offline',
|
|
90
|
+
description: 'A worker node stopped heartbeating or was marked offline.',
|
|
91
|
+
kind: alerts_1.ALERT_KIND_IDS.NODE_OFFLINE,
|
|
92
|
+
severity: 'critical',
|
|
93
|
+
forSeconds: 60,
|
|
94
|
+
config: {},
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.JOBS_FAILURE_SPIKE,
|
|
99
|
+
rule: {
|
|
100
|
+
...base,
|
|
101
|
+
name: 'Job failure spike',
|
|
102
|
+
description: 'More than one job per minute failed, on average, over five minutes.',
|
|
103
|
+
kind: alerts_1.ALERT_KIND_IDS.METRIC_THRESHOLD,
|
|
104
|
+
severity: 'warning',
|
|
105
|
+
forSeconds: 0,
|
|
106
|
+
config: {
|
|
107
|
+
metric: 'app.jobs.settled',
|
|
108
|
+
aggregation: 'rate',
|
|
109
|
+
windowSeconds: 300,
|
|
110
|
+
comparator: 'gt',
|
|
111
|
+
threshold: 1,
|
|
112
|
+
filters: [{ attr: 'outcome', op: 'eq', value: 'failed' }],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.TELEMETRY_VERDICT_CRITICAL,
|
|
118
|
+
rule: {
|
|
119
|
+
...base,
|
|
120
|
+
name: 'Telemetry verdict critical',
|
|
121
|
+
description: 'The telemetry dashboard verdict is critical.',
|
|
122
|
+
kind: alerts_1.ALERT_KIND_IDS.VERDICT,
|
|
123
|
+
severity: 'critical',
|
|
124
|
+
forSeconds: 120,
|
|
125
|
+
config: { minLevel: 'critical' },
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
key: alerts_1.ALERT_STARTER_RULE_KEYS.TELEMETRY_UNAVAILABLE,
|
|
130
|
+
rule: {
|
|
131
|
+
...base,
|
|
132
|
+
name: 'Telemetry store unavailable',
|
|
133
|
+
description: 'The telemetry store could not be queried for three minutes. Metric rules cannot be evaluated meanwhile.',
|
|
134
|
+
kind: alerts_1.ALERT_KIND_IDS.TELEMETRY_UNAVAILABLE,
|
|
135
|
+
severity: 'warning',
|
|
136
|
+
forSeconds: 180,
|
|
137
|
+
config: {},
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
];
|
|
141
|
+
//# sourceMappingURL=starter-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter-rules.js","sourceRoot":"","sources":["../../src/alerts/starter-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** Longest `labelsKey` the column holds. */
|
|
2
|
+
export declare const LABELS_KEY_MAX = 512;
|
|
3
|
+
/**
|
|
4
|
+
* The open incident of one rule and label set, as the machine needs it.
|
|
5
|
+
*
|
|
6
|
+
* @stability experimental
|
|
7
|
+
*/
|
|
8
|
+
export interface OpenIncidentState {
|
|
9
|
+
/** The incident id. */
|
|
10
|
+
readonly id: string;
|
|
11
|
+
/** `pending` or `firing`. */
|
|
12
|
+
readonly state: 'pending' | 'firing';
|
|
13
|
+
/** When the condition first held. */
|
|
14
|
+
readonly pendingSince: Date | null;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* What the evaluator observed for a label set.
|
|
18
|
+
*
|
|
19
|
+
* @stability experimental
|
|
20
|
+
*/
|
|
21
|
+
export interface TransitionObservation {
|
|
22
|
+
/** Whether the rule's condition holds for the label set. */
|
|
23
|
+
readonly breached: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The inputs of one transition.
|
|
27
|
+
*
|
|
28
|
+
* @stability experimental
|
|
29
|
+
*/
|
|
30
|
+
export interface TransitionInput {
|
|
31
|
+
/** The instant of the evaluation. */
|
|
32
|
+
readonly now: Date;
|
|
33
|
+
/** The open incident for this rule and labels, or `null`. */
|
|
34
|
+
readonly open: OpenIncidentState | null;
|
|
35
|
+
/** This evaluation's observation for the labels; `null` when the kind did not report them. */
|
|
36
|
+
readonly observation: TransitionObservation | null;
|
|
37
|
+
/** The rule's `forSeconds`. */
|
|
38
|
+
readonly forSeconds: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* What the evaluator must do: `none`; `open` a new incident in `state`;
|
|
42
|
+
* `touch` an open one; `promote` a pending one to firing; `discard` a pending
|
|
43
|
+
* one that cleared; `resolve` a firing one. A `notify` of `true` marks the
|
|
44
|
+
* answers that raise a notification (subject to the cooldown, decided by
|
|
45
|
+
* {@link shouldNotify}).
|
|
46
|
+
*
|
|
47
|
+
* @stability experimental
|
|
48
|
+
*/
|
|
49
|
+
export interface Transition {
|
|
50
|
+
/** The action. */
|
|
51
|
+
readonly type: 'none' | 'open' | 'touch' | 'promote' | 'discard' | 'resolve';
|
|
52
|
+
/** For `open`: the state the new incident starts in. */
|
|
53
|
+
readonly state?: 'pending' | 'firing';
|
|
54
|
+
/** Whether the answer raises a notification (absent when it does not). */
|
|
55
|
+
readonly notify?: boolean;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* The next transition for one rule and label set.
|
|
59
|
+
*
|
|
60
|
+
* @param input - the open incident, the observation, the rule's wait and the instant.
|
|
61
|
+
* @returns the answer.
|
|
62
|
+
*
|
|
63
|
+
* @stability experimental
|
|
64
|
+
*/
|
|
65
|
+
export declare function nextTransition(input: TransitionInput): Transition;
|
|
66
|
+
/**
|
|
67
|
+
* Whether a FIRED (and its matching RESOLVED) notification is sent: not when
|
|
68
|
+
* the same rule and labels resolved less than `cooldownSeconds` before this
|
|
69
|
+
* incident fired. The incident is recorded either way. Derived from stored
|
|
70
|
+
* times, so the resolve decision repeats the fire decision exactly.
|
|
71
|
+
*
|
|
72
|
+
* @param firedAt - when this incident fired.
|
|
73
|
+
* @param previousResolvedAt - when the previous incident of the same rule and labels resolved, or `null`.
|
|
74
|
+
* @param cooldownSeconds - the rule's cooldown.
|
|
75
|
+
* @returns whether to notify.
|
|
76
|
+
*
|
|
77
|
+
* @stability experimental
|
|
78
|
+
*/
|
|
79
|
+
export declare function shouldNotify(firedAt: Date, previousResolvedAt: Date | null, cooldownSeconds: number): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* The canonical identity of a label set within a rule: keys sorted, `k=v`
|
|
82
|
+
* joined by `,`, each side percent-encoded so a `,` or `=` in a value cannot
|
|
83
|
+
* collide two sets. `''` when unlabelled. A key past the column width keeps its
|
|
84
|
+
* head and ends in a hash of the whole.
|
|
85
|
+
*
|
|
86
|
+
* @param labels - the labels.
|
|
87
|
+
* @returns the key.
|
|
88
|
+
*
|
|
89
|
+
* @stability experimental
|
|
90
|
+
*/
|
|
91
|
+
export declare function labelsKeyOf(labels: Readonly<Record<string, string>>): string;
|
|
92
|
+
//# sourceMappingURL=alert-state-machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-state-machine.d.ts","sourceRoot":"","sources":["../../../src/alerts/state/alert-state-machine.ts"],"names":[],"mappings":"AAyBA,4CAA4C;AAC5C,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,CAAC;IACrC,qCAAqC;IACrC,QAAQ,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,8FAA8F;IAC9F,QAAQ,CAAC,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACnD,+BAA+B;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7E,wDAAwD;IACxD,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,UAAU,CAiBjE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,GAAG,IAAI,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAG7G;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAO5E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LABELS_KEY_MAX = void 0;
|
|
4
|
+
exports.nextTransition = nextTransition;
|
|
5
|
+
exports.shouldNotify = shouldNotify;
|
|
6
|
+
exports.labelsKeyOf = labelsKeyOf;
|
|
7
|
+
const node_crypto_1 = require("node:crypto");
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// The incident state machine (issue #1047)
|
|
10
|
+
// =============================================================================
|
|
11
|
+
//
|
|
12
|
+
// PURE: no I/O, no clock (the instant is an argument), no Nest. The evaluator
|
|
13
|
+
// feeds it one open incident (or none) and one observation (or none) per rule
|
|
14
|
+
// and label set, and does what it answers. Unit-tested in isolation.
|
|
15
|
+
//
|
|
16
|
+
// observation open incident answer
|
|
17
|
+
// ------------ ------------------- ------------------------------------------
|
|
18
|
+
// breached none open `firing` (forSeconds = 0) or `pending`
|
|
19
|
+
// breached pending, held long promote to firing (notify)
|
|
20
|
+
// breached pending, not yet touch
|
|
21
|
+
// breached firing touch
|
|
22
|
+
// clear/absent none none
|
|
23
|
+
// clear/absent pending discard (it never fired: no history)
|
|
24
|
+
// clear/absent firing resolve (notify)
|
|
25
|
+
//
|
|
26
|
+
// Resolution is on the FIRST clean evaluation (no hysteresis): a rule that
|
|
27
|
+
// flaps is tamed with `forSeconds` and `cooldownSeconds`, not by delaying the
|
|
28
|
+
// resolve.
|
|
29
|
+
// =============================================================================
|
|
30
|
+
/** Longest `labelsKey` the column holds. */
|
|
31
|
+
exports.LABELS_KEY_MAX = 512;
|
|
32
|
+
/**
|
|
33
|
+
* The next transition for one rule and label set.
|
|
34
|
+
*
|
|
35
|
+
* @param input - the open incident, the observation, the rule's wait and the instant.
|
|
36
|
+
* @returns the answer.
|
|
37
|
+
*
|
|
38
|
+
* @stability experimental
|
|
39
|
+
*/
|
|
40
|
+
function nextTransition(input) {
|
|
41
|
+
const { open, observation, now, forSeconds } = input;
|
|
42
|
+
const breached = observation?.breached === true;
|
|
43
|
+
if (breached) {
|
|
44
|
+
if (!open) {
|
|
45
|
+
return forSeconds <= 0
|
|
46
|
+
? { type: 'open', state: 'firing', notify: true }
|
|
47
|
+
: { type: 'open', state: 'pending', notify: false };
|
|
48
|
+
}
|
|
49
|
+
if (open.state === 'firing')
|
|
50
|
+
return { type: 'touch' };
|
|
51
|
+
const since = open.pendingSince?.getTime() ?? now.getTime();
|
|
52
|
+
return now.getTime() - since >= forSeconds * 1000 ? { type: 'promote', notify: true } : { type: 'touch' };
|
|
53
|
+
}
|
|
54
|
+
if (!open)
|
|
55
|
+
return { type: 'none' };
|
|
56
|
+
return open.state === 'pending' ? { type: 'discard' } : { type: 'resolve', notify: true };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Whether a FIRED (and its matching RESOLVED) notification is sent: not when
|
|
60
|
+
* the same rule and labels resolved less than `cooldownSeconds` before this
|
|
61
|
+
* incident fired. The incident is recorded either way. Derived from stored
|
|
62
|
+
* times, so the resolve decision repeats the fire decision exactly.
|
|
63
|
+
*
|
|
64
|
+
* @param firedAt - when this incident fired.
|
|
65
|
+
* @param previousResolvedAt - when the previous incident of the same rule and labels resolved, or `null`.
|
|
66
|
+
* @param cooldownSeconds - the rule's cooldown.
|
|
67
|
+
* @returns whether to notify.
|
|
68
|
+
*
|
|
69
|
+
* @stability experimental
|
|
70
|
+
*/
|
|
71
|
+
function shouldNotify(firedAt, previousResolvedAt, cooldownSeconds) {
|
|
72
|
+
if (!previousResolvedAt || cooldownSeconds <= 0)
|
|
73
|
+
return true;
|
|
74
|
+
return firedAt.getTime() - previousResolvedAt.getTime() >= cooldownSeconds * 1000;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The canonical identity of a label set within a rule: keys sorted, `k=v`
|
|
78
|
+
* joined by `,`, each side percent-encoded so a `,` or `=` in a value cannot
|
|
79
|
+
* collide two sets. `''` when unlabelled. A key past the column width keeps its
|
|
80
|
+
* head and ends in a hash of the whole.
|
|
81
|
+
*
|
|
82
|
+
* @param labels - the labels.
|
|
83
|
+
* @returns the key.
|
|
84
|
+
*
|
|
85
|
+
* @stability experimental
|
|
86
|
+
*/
|
|
87
|
+
function labelsKeyOf(labels) {
|
|
88
|
+
const key = Object.keys(labels)
|
|
89
|
+
.sort()
|
|
90
|
+
.map((name) => `${encodeURIComponent(name)}=${encodeURIComponent(labels[name] ?? '')}`)
|
|
91
|
+
.join(',');
|
|
92
|
+
if (key.length <= exports.LABELS_KEY_MAX)
|
|
93
|
+
return key;
|
|
94
|
+
return `${key.slice(0, exports.LABELS_KEY_MAX - 33)}~${(0, node_crypto_1.createHash)('sha256').update(key).digest('hex').slice(0, 32)}`;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=alert-state-machine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-state-machine.js","sourceRoot":"","sources":["../../../src/alerts/state/alert-state-machine.ts"],"names":[],"mappings":"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"}
|