@meyicloud/meyi-insight-server 1.0.0
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/dist/constants/incidentCategories.d.ts +18 -0
- package/dist/constants/incidentCategories.d.ts.map +1 -0
- package/dist/constants/incidentCategories.js +36 -0
- package/dist/constants/incidentCategories.js.map +1 -0
- package/dist/controllers/alert.controller.d.ts +12 -0
- package/dist/controllers/alert.controller.d.ts.map +1 -0
- package/dist/controllers/alert.controller.js +89 -0
- package/dist/controllers/alert.controller.js.map +1 -0
- package/dist/controllers/incident.controller.d.ts +16 -0
- package/dist/controllers/incident.controller.d.ts.map +1 -0
- package/dist/controllers/incident.controller.js +215 -0
- package/dist/controllers/incident.controller.js.map +1 -0
- package/dist/controllers/notification-provider.controller.d.ts +10 -0
- package/dist/controllers/notification-provider.controller.d.ts.map +1 -0
- package/dist/controllers/notification-provider.controller.js +59 -0
- package/dist/controllers/notification-provider.controller.js.map +1 -0
- package/dist/controllers/settings.controller.d.ts +7 -0
- package/dist/controllers/settings.controller.d.ts.map +1 -0
- package/dist/controllers/settings.controller.js +27 -0
- package/dist/controllers/settings.controller.js.map +1 -0
- package/dist/controllers/sop.controller.d.ts +11 -0
- package/dist/controllers/sop.controller.d.ts.map +1 -0
- package/dist/controllers/sop.controller.js +89 -0
- package/dist/controllers/sop.controller.js.map +1 -0
- package/dist/controllers/source.controller.d.ts +26 -0
- package/dist/controllers/source.controller.d.ts.map +1 -0
- package/dist/controllers/source.controller.js +333 -0
- package/dist/controllers/source.controller.js.map +1 -0
- package/dist/controllers/sourceDatadog.controller.d.ts +17 -0
- package/dist/controllers/sourceDatadog.controller.d.ts.map +1 -0
- package/dist/controllers/sourceDatadog.controller.js +169 -0
- package/dist/controllers/sourceDatadog.controller.js.map +1 -0
- package/dist/controllers/tenant.controller.d.ts +7 -0
- package/dist/controllers/tenant.controller.d.ts.map +1 -0
- package/dist/controllers/tenant.controller.js +33 -0
- package/dist/controllers/tenant.controller.js.map +1 -0
- package/dist/controllers/webhook.controller.d.ts +6 -0
- package/dist/controllers/webhook.controller.d.ts.map +1 -0
- package/dist/controllers/webhook.controller.js +83 -0
- package/dist/controllers/webhook.controller.js.map +1 -0
- package/dist/controllers/workflow.controller.d.ts +18 -0
- package/dist/controllers/workflow.controller.d.ts.map +1 -0
- package/dist/controllers/workflow.controller.js +118 -0
- package/dist/controllers/workflow.controller.js.map +1 -0
- package/dist/database/index.d.ts +7 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +12 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/schema.d.ts +5358 -0
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/database/schema.js +516 -0
- package/dist/database/schema.js.map +1 -0
- package/dist/features/sources/cloudtrail/controller.d.ts +38 -0
- package/dist/features/sources/cloudtrail/controller.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/controller.js +421 -0
- package/dist/features/sources/cloudtrail/controller.js.map +1 -0
- package/dist/features/sources/cloudtrail/routes.d.ts +6 -0
- package/dist/features/sources/cloudtrail/routes.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/routes.js +8 -0
- package/dist/features/sources/cloudtrail/routes.js.map +1 -0
- package/dist/features/sources/cloudtrail/schema.d.ts +2 -0
- package/dist/features/sources/cloudtrail/schema.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/schema.js +26 -0
- package/dist/features/sources/cloudtrail/schema.js.map +1 -0
- package/dist/features/sources/cloudtrail/stackTemplates.d.ts +3 -0
- package/dist/features/sources/cloudtrail/stackTemplates.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/stackTemplates.js +548 -0
- package/dist/features/sources/cloudtrail/stackTemplates.js.map +1 -0
- package/dist/features/sources/cloudtrail/template.d.ts +21 -0
- package/dist/features/sources/cloudtrail/template.d.ts.map +1 -0
- package/dist/features/sources/cloudtrail/template.js +1230 -0
- package/dist/features/sources/cloudtrail/template.js.map +1 -0
- package/dist/features/sources/cloudwatch/controller.d.ts +13 -0
- package/dist/features/sources/cloudwatch/controller.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/controller.js +514 -0
- package/dist/features/sources/cloudwatch/controller.js.map +1 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.d.ts +7 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.js +230 -0
- package/dist/features/sources/cloudwatch/eventbridgeTemplate.js.map +1 -0
- package/dist/features/sources/cloudwatch/service.d.ts +50 -0
- package/dist/features/sources/cloudwatch/service.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/service.js +269 -0
- package/dist/features/sources/cloudwatch/service.js.map +1 -0
- package/dist/features/sources/cloudwatch/template.d.ts +26 -0
- package/dist/features/sources/cloudwatch/template.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/template.js +335 -0
- package/dist/features/sources/cloudwatch/template.js.map +1 -0
- package/dist/features/sources/cloudwatch/types.d.ts +26 -0
- package/dist/features/sources/cloudwatch/types.d.ts.map +1 -0
- package/dist/features/sources/cloudwatch/types.js +2 -0
- package/dist/features/sources/cloudwatch/types.js.map +1 -0
- package/dist/features/sources/grafana/controller.d.ts +18 -0
- package/dist/features/sources/grafana/controller.d.ts.map +1 -0
- package/dist/features/sources/grafana/controller.js +183 -0
- package/dist/features/sources/grafana/controller.js.map +1 -0
- package/dist/features/sources/grafana/routes.d.ts +6 -0
- package/dist/features/sources/grafana/routes.d.ts.map +1 -0
- package/dist/features/sources/grafana/routes.js +6 -0
- package/dist/features/sources/grafana/routes.js.map +1 -0
- package/dist/features/sources/grafana/schema.d.ts +2 -0
- package/dist/features/sources/grafana/schema.d.ts.map +1 -0
- package/dist/features/sources/grafana/schema.js +24 -0
- package/dist/features/sources/grafana/schema.js.map +1 -0
- package/dist/features/sources/grafana/service.d.ts +33 -0
- package/dist/features/sources/grafana/service.d.ts.map +1 -0
- package/dist/features/sources/grafana/service.js +215 -0
- package/dist/features/sources/grafana/service.js.map +1 -0
- package/dist/features/sources/index.d.ts +29 -0
- package/dist/features/sources/index.d.ts.map +1 -0
- package/dist/features/sources/index.js +47 -0
- package/dist/features/sources/index.js.map +1 -0
- package/dist/features/sources/observability/controller.d.ts +6 -0
- package/dist/features/sources/observability/controller.d.ts.map +1 -0
- package/dist/features/sources/observability/controller.js +16 -0
- package/dist/features/sources/observability/controller.js.map +1 -0
- package/dist/features/sources/observability/routes.d.ts +4 -0
- package/dist/features/sources/observability/routes.d.ts.map +1 -0
- package/dist/features/sources/observability/routes.js +8 -0
- package/dist/features/sources/observability/routes.js.map +1 -0
- package/dist/features/sources/observability/schema.d.ts +3 -0
- package/dist/features/sources/observability/schema.d.ts.map +1 -0
- package/dist/features/sources/observability/schema.js +44 -0
- package/dist/features/sources/observability/schema.js.map +1 -0
- package/dist/features/sources/observability/service.d.ts +36 -0
- package/dist/features/sources/observability/service.d.ts.map +1 -0
- package/dist/features/sources/observability/service.js +127 -0
- package/dist/features/sources/observability/service.js.map +1 -0
- package/dist/features/sources/prometheus/controller.d.ts +9 -0
- package/dist/features/sources/prometheus/controller.d.ts.map +1 -0
- package/dist/features/sources/prometheus/controller.js +359 -0
- package/dist/features/sources/prometheus/controller.js.map +1 -0
- package/dist/features/sources/prometheus/templates.d.ts +18 -0
- package/dist/features/sources/prometheus/templates.d.ts.map +1 -0
- package/dist/features/sources/prometheus/templates.js +244 -0
- package/dist/features/sources/prometheus/templates.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.d.ts +3 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.d.ts.map +1 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.js +19 -0
- package/dist/migrations/0007_pipeline_yaml_definitions.js.map +1 -0
- package/dist/migrations/0008_tenant_isolation.d.ts +3 -0
- package/dist/migrations/0008_tenant_isolation.d.ts.map +1 -0
- package/dist/migrations/0008_tenant_isolation.js +42 -0
- package/dist/migrations/0008_tenant_isolation.js.map +1 -0
- package/dist/migrations/run.d.ts +6 -0
- package/dist/migrations/run.d.ts.map +1 -0
- package/dist/migrations/run.js +1262 -0
- package/dist/migrations/run.js.map +1 -0
- package/dist/models/alarm-group.model.d.ts +42 -0
- package/dist/models/alarm-group.model.d.ts.map +1 -0
- package/dist/models/alarm-group.model.js +98 -0
- package/dist/models/alarm-group.model.js.map +1 -0
- package/dist/models/alert.model.d.ts +54 -0
- package/dist/models/alert.model.d.ts.map +1 -0
- package/dist/models/alert.model.js +119 -0
- package/dist/models/alert.model.js.map +1 -0
- package/dist/models/dedup-config.model.d.ts +53 -0
- package/dist/models/dedup-config.model.d.ts.map +1 -0
- package/dist/models/dedup-config.model.js +157 -0
- package/dist/models/dedup-config.model.js.map +1 -0
- package/dist/models/grouping-config.model.d.ts +70 -0
- package/dist/models/grouping-config.model.d.ts.map +1 -0
- package/dist/models/grouping-config.model.js +174 -0
- package/dist/models/grouping-config.model.js.map +1 -0
- package/dist/models/incident-comment.model.d.ts +14 -0
- package/dist/models/incident-comment.model.d.ts.map +1 -0
- package/dist/models/incident-comment.model.js +38 -0
- package/dist/models/incident-comment.model.js.map +1 -0
- package/dist/models/incident-event.model.d.ts +16 -0
- package/dist/models/incident-event.model.d.ts.map +1 -0
- package/dist/models/incident-event.model.js +31 -0
- package/dist/models/incident-event.model.js.map +1 -0
- package/dist/models/incident.model.d.ts +47 -0
- package/dist/models/incident.model.d.ts.map +1 -0
- package/dist/models/incident.model.js +201 -0
- package/dist/models/incident.model.js.map +1 -0
- package/dist/models/normalization-config.model.d.ts +44 -0
- package/dist/models/normalization-config.model.d.ts.map +1 -0
- package/dist/models/normalization-config.model.js +153 -0
- package/dist/models/normalization-config.model.js.map +1 -0
- package/dist/models/notification-provider.model.d.ts +12 -0
- package/dist/models/notification-provider.model.d.ts.map +1 -0
- package/dist/models/notification-provider.model.js +48 -0
- package/dist/models/notification-provider.model.js.map +1 -0
- package/dist/models/pipeline-event.model.d.ts +15 -0
- package/dist/models/pipeline-event.model.d.ts.map +1 -0
- package/dist/models/pipeline-event.model.js +32 -0
- package/dist/models/pipeline-event.model.js.map +1 -0
- package/dist/models/settings.model.d.ts +8 -0
- package/dist/models/settings.model.d.ts.map +1 -0
- package/dist/models/settings.model.js +30 -0
- package/dist/models/settings.model.js.map +1 -0
- package/dist/models/sop.model.d.ts +58 -0
- package/dist/models/sop.model.d.ts.map +1 -0
- package/dist/models/sop.model.js +138 -0
- package/dist/models/sop.model.js.map +1 -0
- package/dist/models/source.model.d.ts +177 -0
- package/dist/models/source.model.d.ts.map +1 -0
- package/dist/models/source.model.js +794 -0
- package/dist/models/source.model.js.map +1 -0
- package/dist/models/tenant.model.d.ts +13 -0
- package/dist/models/tenant.model.d.ts.map +1 -0
- package/dist/models/tenant.model.js +28 -0
- package/dist/models/tenant.model.js.map +1 -0
- package/dist/models/workflow.model.d.ts +36 -0
- package/dist/models/workflow.model.d.ts.map +1 -0
- package/dist/models/workflow.model.js +136 -0
- package/dist/models/workflow.model.js.map +1 -0
- package/dist/pipeline/AlarmPipelineWorker.d.ts +18 -0
- package/dist/pipeline/AlarmPipelineWorker.d.ts.map +1 -0
- package/dist/pipeline/AlarmPipelineWorker.js +342 -0
- package/dist/pipeline/AlarmPipelineWorker.js.map +1 -0
- package/dist/pipeline/CanonicalAlarm.d.ts +59 -0
- package/dist/pipeline/CanonicalAlarm.d.ts.map +1 -0
- package/dist/pipeline/CanonicalAlarm.js +81 -0
- package/dist/pipeline/CanonicalAlarm.js.map +1 -0
- package/dist/pipeline/DedupService.d.ts +29 -0
- package/dist/pipeline/DedupService.d.ts.map +1 -0
- package/dist/pipeline/DedupService.js +172 -0
- package/dist/pipeline/DedupService.js.map +1 -0
- package/dist/pipeline/GroupFlushWorker.d.ts +16 -0
- package/dist/pipeline/GroupFlushWorker.d.ts.map +1 -0
- package/dist/pipeline/GroupFlushWorker.js +196 -0
- package/dist/pipeline/GroupFlushWorker.js.map +1 -0
- package/dist/pipeline/GroupingService.d.ts +27 -0
- package/dist/pipeline/GroupingService.d.ts.map +1 -0
- package/dist/pipeline/GroupingService.js +338 -0
- package/dist/pipeline/GroupingService.js.map +1 -0
- package/dist/pipeline/NormalizationRuleEngine.d.ts +5 -0
- package/dist/pipeline/NormalizationRuleEngine.d.ts.map +1 -0
- package/dist/pipeline/NormalizationRuleEngine.js +86 -0
- package/dist/pipeline/NormalizationRuleEngine.js.map +1 -0
- package/dist/pipeline/NormalizationService.d.ts +29 -0
- package/dist/pipeline/NormalizationService.d.ts.map +1 -0
- package/dist/pipeline/NormalizationService.js +275 -0
- package/dist/pipeline/NormalizationService.js.map +1 -0
- package/dist/pipeline/alarmQueue.d.ts +66 -0
- package/dist/pipeline/alarmQueue.d.ts.map +1 -0
- package/dist/pipeline/alarmQueue.js +254 -0
- package/dist/pipeline/alarmQueue.js.map +1 -0
- package/dist/pipeline/defaults/ensureDefaults.d.ts +3 -0
- package/dist/pipeline/defaults/ensureDefaults.d.ts.map +1 -0
- package/dist/pipeline/defaults/ensureDefaults.js +124 -0
- package/dist/pipeline/defaults/ensureDefaults.js.map +1 -0
- package/dist/pipeline/defaults/pipelineDefaults.d.ts +13 -0
- package/dist/pipeline/defaults/pipelineDefaults.d.ts.map +1 -0
- package/dist/pipeline/defaults/pipelineDefaults.js +266 -0
- package/dist/pipeline/defaults/pipelineDefaults.js.map +1 -0
- package/dist/pipeline/yaml/DedupYaml.d.ts +33 -0
- package/dist/pipeline/yaml/DedupYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/DedupYaml.js +25 -0
- package/dist/pipeline/yaml/DedupYaml.js.map +1 -0
- package/dist/pipeline/yaml/GroupingYaml.d.ts +49 -0
- package/dist/pipeline/yaml/GroupingYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/GroupingYaml.js +39 -0
- package/dist/pipeline/yaml/GroupingYaml.js.map +1 -0
- package/dist/pipeline/yaml/NormalizationYaml.d.ts +54 -0
- package/dist/pipeline/yaml/NormalizationYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/NormalizationYaml.js +23 -0
- package/dist/pipeline/yaml/NormalizationYaml.js.map +1 -0
- package/dist/pipeline/yaml/pipelineYaml.d.ts +11 -0
- package/dist/pipeline/yaml/pipelineYaml.d.ts.map +1 -0
- package/dist/pipeline/yaml/pipelineYaml.js +49 -0
- package/dist/pipeline/yaml/pipelineYaml.js.map +1 -0
- package/dist/realtime/events.d.ts +11 -0
- package/dist/realtime/events.d.ts.map +1 -0
- package/dist/realtime/events.js +21 -0
- package/dist/realtime/events.js.map +1 -0
- package/dist/routes/alert.routes.d.ts +4 -0
- package/dist/routes/alert.routes.d.ts.map +1 -0
- package/dist/routes/alert.routes.js +15 -0
- package/dist/routes/alert.routes.js.map +1 -0
- package/dist/routes/dedup-config.routes.d.ts +4 -0
- package/dist/routes/dedup-config.routes.d.ts.map +1 -0
- package/dist/routes/dedup-config.routes.js +82 -0
- package/dist/routes/dedup-config.routes.js.map +1 -0
- package/dist/routes/grouping-config.routes.d.ts +4 -0
- package/dist/routes/grouping-config.routes.d.ts.map +1 -0
- package/dist/routes/grouping-config.routes.js +82 -0
- package/dist/routes/grouping-config.routes.js.map +1 -0
- package/dist/routes/incident.routes.d.ts +4 -0
- package/dist/routes/incident.routes.d.ts.map +1 -0
- package/dist/routes/incident.routes.js +21 -0
- package/dist/routes/incident.routes.js.map +1 -0
- package/dist/routes/index.d.ts +47 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +83 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/normalization-config.routes.d.ts +4 -0
- package/dist/routes/normalization-config.routes.d.ts.map +1 -0
- package/dist/routes/normalization-config.routes.js +199 -0
- package/dist/routes/normalization-config.routes.js.map +1 -0
- package/dist/routes/notification-provider.routes.d.ts +4 -0
- package/dist/routes/notification-provider.routes.d.ts.map +1 -0
- package/dist/routes/notification-provider.routes.js +13 -0
- package/dist/routes/notification-provider.routes.js.map +1 -0
- package/dist/routes/pipeline.routes.d.ts +8 -0
- package/dist/routes/pipeline.routes.d.ts.map +1 -0
- package/dist/routes/pipeline.routes.js +243 -0
- package/dist/routes/pipeline.routes.js.map +1 -0
- package/dist/routes/settings.routes.d.ts +4 -0
- package/dist/routes/settings.routes.d.ts.map +1 -0
- package/dist/routes/settings.routes.js +10 -0
- package/dist/routes/settings.routes.js.map +1 -0
- package/dist/routes/sop.routes.d.ts +4 -0
- package/dist/routes/sop.routes.d.ts.map +1 -0
- package/dist/routes/sop.routes.js +14 -0
- package/dist/routes/sop.routes.js.map +1 -0
- package/dist/routes/source.routes.d.ts +9 -0
- package/dist/routes/source.routes.d.ts.map +1 -0
- package/dist/routes/source.routes.js +31 -0
- package/dist/routes/source.routes.js.map +1 -0
- package/dist/routes/tenant.routes.d.ts +4 -0
- package/dist/routes/tenant.routes.d.ts.map +1 -0
- package/dist/routes/tenant.routes.js +10 -0
- package/dist/routes/tenant.routes.js.map +1 -0
- package/dist/routes/workflow.routes.d.ts +4 -0
- package/dist/routes/workflow.routes.d.ts.map +1 -0
- package/dist/routes/workflow.routes.js +18 -0
- package/dist/routes/workflow.routes.js.map +1 -0
- package/dist/server.d.ts +22 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +76 -0
- package/dist/server.js.map +1 -0
- package/dist/service.d.ts +159 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +156 -0
- package/dist/service.js.map +1 -0
- package/dist/services/alert.service.d.ts +76 -0
- package/dist/services/alert.service.d.ts.map +1 -0
- package/dist/services/alert.service.js +688 -0
- package/dist/services/alert.service.js.map +1 -0
- package/dist/services/connector.service.d.ts +65 -0
- package/dist/services/connector.service.d.ts.map +1 -0
- package/dist/services/connector.service.js +28 -0
- package/dist/services/connector.service.js.map +1 -0
- package/dist/services/incident.service.d.ts +108 -0
- package/dist/services/incident.service.d.ts.map +1 -0
- package/dist/services/incident.service.js +325 -0
- package/dist/services/incident.service.js.map +1 -0
- package/dist/services/notification-provider.service.d.ts +12 -0
- package/dist/services/notification-provider.service.d.ts.map +1 -0
- package/dist/services/notification-provider.service.js +25 -0
- package/dist/services/notification-provider.service.js.map +1 -0
- package/dist/services/settings.service.d.ts +8 -0
- package/dist/services/settings.service.d.ts.map +1 -0
- package/dist/services/settings.service.js +14 -0
- package/dist/services/settings.service.js.map +1 -0
- package/dist/services/sop.service.d.ts +60 -0
- package/dist/services/sop.service.d.ts.map +1 -0
- package/dist/services/sop.service.js +66 -0
- package/dist/services/sop.service.js.map +1 -0
- package/dist/services/source.service.d.ts +162 -0
- package/dist/services/source.service.d.ts.map +1 -0
- package/dist/services/source.service.js +124 -0
- package/dist/services/source.service.js.map +1 -0
- package/dist/services/tenant.service.d.ts +11 -0
- package/dist/services/tenant.service.d.ts.map +1 -0
- package/dist/services/tenant.service.js +22 -0
- package/dist/services/tenant.service.js.map +1 -0
- package/dist/services/workflow.service.d.ts +32 -0
- package/dist/services/workflow.service.d.ts.map +1 -0
- package/dist/services/workflow.service.js +291 -0
- package/dist/services/workflow.service.js.map +1 -0
- package/dist/standalone.d.ts +2 -0
- package/dist/standalone.d.ts.map +1 -0
- package/dist/standalone.js +55 -0
- package/dist/standalone.js.map +1 -0
- package/dist/tenancy.d.ts +5 -0
- package/dist/tenancy.d.ts.map +1 -0
- package/dist/tenancy.js +35 -0
- package/dist/tenancy.js.map +1 -0
- package/dist/utils/notificationTemplates.d.ts +98 -0
- package/dist/utils/notificationTemplates.d.ts.map +1 -0
- package/dist/utils/notificationTemplates.js +227 -0
- package/dist/utils/notificationTemplates.js.map +1 -0
- package/dist/utils/secretCrypto.d.ts +3 -0
- package/dist/utils/secretCrypto.d.ts.map +1 -0
- package/dist/utils/secretCrypto.js +40 -0
- package/dist/utils/secretCrypto.js.map +1 -0
- package/dist/utils/workflowYaml.d.ts +53 -0
- package/dist/utils/workflowYaml.d.ts.map +1 -0
- package/dist/utils/workflowYaml.js +269 -0
- package/dist/utils/workflowYaml.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export interface GroupingConfigRow {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
priority: number;
|
|
5
|
+
isActive: boolean;
|
|
6
|
+
sourceId: string | null;
|
|
7
|
+
sourceType: string | null;
|
|
8
|
+
groupBy: string[];
|
|
9
|
+
timeoutSeconds: number;
|
|
10
|
+
maxAlarms: number;
|
|
11
|
+
incidentTitleTemplate: string | null;
|
|
12
|
+
useAiGenerate: boolean;
|
|
13
|
+
userPrompt: string | null;
|
|
14
|
+
yamlDefinition: string;
|
|
15
|
+
topologyTagMapping: string | null;
|
|
16
|
+
isSystem: boolean;
|
|
17
|
+
tenantId: string | null;
|
|
18
|
+
createdAt: Date;
|
|
19
|
+
updatedAt: Date;
|
|
20
|
+
}
|
|
21
|
+
export interface CreateGroupingConfigInput {
|
|
22
|
+
name: string;
|
|
23
|
+
priority?: number;
|
|
24
|
+
isActive?: boolean;
|
|
25
|
+
sourceId?: string | null;
|
|
26
|
+
sourceType?: string | null;
|
|
27
|
+
groupBy?: string[];
|
|
28
|
+
timeoutSeconds?: number;
|
|
29
|
+
maxAlarms?: number;
|
|
30
|
+
topologyTagMapping?: string | null;
|
|
31
|
+
incidentTitleTemplate?: string | null;
|
|
32
|
+
useAiGenerate?: boolean;
|
|
33
|
+
userPrompt?: string | null;
|
|
34
|
+
yamlDefinition?: string;
|
|
35
|
+
tenantId?: string | null;
|
|
36
|
+
}
|
|
37
|
+
export interface UpdateGroupingConfigInput {
|
|
38
|
+
name?: string;
|
|
39
|
+
priority?: number;
|
|
40
|
+
isActive?: boolean;
|
|
41
|
+
sourceId?: string | null;
|
|
42
|
+
sourceType?: string | null;
|
|
43
|
+
groupBy?: string[];
|
|
44
|
+
timeoutSeconds?: number;
|
|
45
|
+
maxAlarms?: number;
|
|
46
|
+
topologyTagMapping?: string | null;
|
|
47
|
+
incidentTitleTemplate?: string | null;
|
|
48
|
+
useAiGenerate?: boolean;
|
|
49
|
+
userPrompt?: string | null;
|
|
50
|
+
yamlDefinition?: string;
|
|
51
|
+
isSystem?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare class GroupingConfigModel {
|
|
54
|
+
private db;
|
|
55
|
+
private table;
|
|
56
|
+
private sourceTable?;
|
|
57
|
+
constructor(db: any, table: any, sourceTable?: any);
|
|
58
|
+
/**
|
|
59
|
+
* Find highest-priority active grouping config.
|
|
60
|
+
* Resolution: source_id → source_type → global (both null).
|
|
61
|
+
*/
|
|
62
|
+
findCandidates(sourceId: string, sourceType: string, tenantId?: string): Promise<GroupingConfigRow[]>;
|
|
63
|
+
findByPriority(sourceId: string, sourceType: string, tenantId?: string): Promise<GroupingConfigRow | null>;
|
|
64
|
+
list(tenantId?: string, sourceId?: string): Promise<GroupingConfigRow[]>;
|
|
65
|
+
findById(id: string, tenantId?: string): Promise<GroupingConfigRow | null>;
|
|
66
|
+
create(input: CreateGroupingConfigInput): Promise<GroupingConfigRow>;
|
|
67
|
+
update(id: string, data: Partial<CreateGroupingConfigInput>, tenantId?: string): Promise<GroupingConfigRow | null>;
|
|
68
|
+
delete(id: string, tenantId?: string): Promise<void>;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=grouping-config.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-config.model.d.ts","sourceRoot":"","sources":["../../src/models/grouping-config.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { eq, and, isNull, asc, or } from "drizzle-orm";
|
|
2
|
+
import { parseGroupingYaml } from "../pipeline/yaml/pipelineYaml.js";
|
|
3
|
+
import { ensureTenantPipelineDefaults } from "../pipeline/defaults/ensureDefaults.js";
|
|
4
|
+
export class GroupingConfigModel {
|
|
5
|
+
db;
|
|
6
|
+
table;
|
|
7
|
+
sourceTable;
|
|
8
|
+
constructor(db, table, sourceTable) {
|
|
9
|
+
this.db = db;
|
|
10
|
+
this.table = table;
|
|
11
|
+
this.sourceTable = sourceTable;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Find highest-priority active grouping config.
|
|
15
|
+
* Resolution: source_id → source_type → global (both null).
|
|
16
|
+
*/
|
|
17
|
+
async findCandidates(sourceId, sourceType, tenantId) {
|
|
18
|
+
const tenantCond = tenantId ? eq(this.table.tenantId, tenantId) : undefined;
|
|
19
|
+
const conds = [eq(this.table.isActive, true)];
|
|
20
|
+
if (tenantCond)
|
|
21
|
+
conds.push(tenantCond);
|
|
22
|
+
const all = await this.db
|
|
23
|
+
.select()
|
|
24
|
+
.from(this.table)
|
|
25
|
+
.where(and(...conds))
|
|
26
|
+
.orderBy(asc(this.table.priority));
|
|
27
|
+
return all.filter((c) => {
|
|
28
|
+
if (c.sourceId && c.sourceId === sourceId)
|
|
29
|
+
return true;
|
|
30
|
+
if (!c.sourceId && c.sourceType && c.sourceType === sourceType)
|
|
31
|
+
return true;
|
|
32
|
+
if (!c.sourceId && !c.sourceType)
|
|
33
|
+
return true;
|
|
34
|
+
return false;
|
|
35
|
+
}).sort((a, b) => {
|
|
36
|
+
const aSpecificity = a.sourceId ? 2 : a.sourceType ? 1 : 0;
|
|
37
|
+
const bSpecificity = b.sourceId ? 2 : b.sourceType ? 1 : 0;
|
|
38
|
+
if (aSpecificity !== bSpecificity)
|
|
39
|
+
return bSpecificity - aSpecificity;
|
|
40
|
+
return (a.priority ?? 0) - (b.priority ?? 0);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
async findByPriority(sourceId, sourceType, tenantId) {
|
|
44
|
+
const candidates = await this.findCandidates(sourceId, sourceType, tenantId);
|
|
45
|
+
return candidates[0] ?? null;
|
|
46
|
+
}
|
|
47
|
+
async list(tenantId, sourceId) {
|
|
48
|
+
if (tenantId)
|
|
49
|
+
await ensureTenantPipelineDefaults(this.db, tenantId);
|
|
50
|
+
let q = this.db.select().from(this.table);
|
|
51
|
+
const conditions = [];
|
|
52
|
+
if (tenantId)
|
|
53
|
+
conditions.push(eq(this.table.tenantId, tenantId));
|
|
54
|
+
if (sourceId) {
|
|
55
|
+
let sType = null;
|
|
56
|
+
if (this.sourceTable) {
|
|
57
|
+
const src = await this.db.select().from(this.sourceTable).where(eq(this.sourceTable.id, sourceId)).limit(1);
|
|
58
|
+
if (src.length > 0)
|
|
59
|
+
sType = src[0].type;
|
|
60
|
+
}
|
|
61
|
+
if (sType) {
|
|
62
|
+
conditions.push(or(eq(this.table.sourceId, sourceId), and(isNull(this.table.sourceId), eq(this.table.sourceType, sType)), and(isNull(this.table.sourceId), isNull(this.table.sourceType))));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
conditions.push(or(eq(this.table.sourceId, sourceId), and(isNull(this.table.sourceId), isNull(this.table.sourceType))));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (conditions.length > 0) {
|
|
69
|
+
q = q.where(and(...conditions));
|
|
70
|
+
}
|
|
71
|
+
return q.orderBy(asc(this.table.priority));
|
|
72
|
+
}
|
|
73
|
+
async findById(id, tenantId) {
|
|
74
|
+
const conditions = [eq(this.table.id, id)];
|
|
75
|
+
if (tenantId)
|
|
76
|
+
conditions.push(eq(this.table.tenantId, tenantId));
|
|
77
|
+
const rows = await this.db.select().from(this.table).where(conditions.length > 1 ? and(...conditions) : conditions[0]).limit(1);
|
|
78
|
+
return rows[0] ?? null;
|
|
79
|
+
}
|
|
80
|
+
async create(input) {
|
|
81
|
+
let groupBy = input.groupBy ?? [];
|
|
82
|
+
let timeoutSeconds = input.timeoutSeconds ?? 600;
|
|
83
|
+
let name = input.name;
|
|
84
|
+
let priority = input.priority ?? 0;
|
|
85
|
+
let isActive = input.isActive ?? true;
|
|
86
|
+
let sourceId = input.sourceId ?? null;
|
|
87
|
+
let sourceType = input.sourceType ?? null;
|
|
88
|
+
let incidentTitleTemplate = input.incidentTitleTemplate ?? null;
|
|
89
|
+
let useAiGenerate = input.useAiGenerate ?? false;
|
|
90
|
+
let userPrompt = input.userPrompt ?? null;
|
|
91
|
+
if (input.yamlDefinition) {
|
|
92
|
+
const parsed = parseGroupingYaml(input.yamlDefinition);
|
|
93
|
+
if (parsed.ok) {
|
|
94
|
+
groupBy = parsed.data.default_key ?? groupBy;
|
|
95
|
+
timeoutSeconds = parsed.data.window_seconds ?? timeoutSeconds;
|
|
96
|
+
name = parsed.data.name ?? name;
|
|
97
|
+
priority = parsed.data.priority ?? priority;
|
|
98
|
+
isActive = parsed.data.is_active ?? isActive;
|
|
99
|
+
sourceId = parsed.data.source_id ?? sourceId;
|
|
100
|
+
sourceType = parsed.data.source_type ?? sourceType;
|
|
101
|
+
if (parsed.data.incident_title)
|
|
102
|
+
incidentTitleTemplate = parsed.data.incident_title;
|
|
103
|
+
if (parsed.data.user_prompt)
|
|
104
|
+
userPrompt = parsed.data.user_prompt;
|
|
105
|
+
if (parsed.data.topology_tag_mapping)
|
|
106
|
+
input.topologyTagMapping = parsed.data.topology_tag_mapping;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const rows = await this.db.insert(this.table).values({
|
|
110
|
+
name,
|
|
111
|
+
priority,
|
|
112
|
+
isActive,
|
|
113
|
+
sourceId,
|
|
114
|
+
sourceType,
|
|
115
|
+
groupBy,
|
|
116
|
+
timeoutSeconds,
|
|
117
|
+
maxAlarms: input.maxAlarms ?? 50,
|
|
118
|
+
incidentTitleTemplate,
|
|
119
|
+
useAiGenerate,
|
|
120
|
+
userPrompt,
|
|
121
|
+
topologyTagMapping: input.topologyTagMapping ?? null,
|
|
122
|
+
yamlDefinition: input.yamlDefinition ?? "",
|
|
123
|
+
isSystem: false,
|
|
124
|
+
tenantId: input.tenantId ?? null,
|
|
125
|
+
}).returning();
|
|
126
|
+
return rows[0];
|
|
127
|
+
}
|
|
128
|
+
async update(id, data, tenantId) {
|
|
129
|
+
const updateData = { ...data, updatedAt: new Date() };
|
|
130
|
+
if (data.yamlDefinition) {
|
|
131
|
+
const parsed = parseGroupingYaml(data.yamlDefinition);
|
|
132
|
+
if (parsed.ok) {
|
|
133
|
+
if (parsed.data.default_key !== undefined)
|
|
134
|
+
updateData.groupBy = parsed.data.default_key;
|
|
135
|
+
if (parsed.data.window_seconds !== undefined)
|
|
136
|
+
updateData.timeoutSeconds = parsed.data.window_seconds;
|
|
137
|
+
if (parsed.data.name !== undefined)
|
|
138
|
+
updateData.name = parsed.data.name;
|
|
139
|
+
if (parsed.data.priority !== undefined)
|
|
140
|
+
updateData.priority = parsed.data.priority;
|
|
141
|
+
if (parsed.data.is_active !== undefined)
|
|
142
|
+
updateData.isActive = parsed.data.is_active;
|
|
143
|
+
if (parsed.data.source_id !== undefined)
|
|
144
|
+
updateData.sourceId = parsed.data.source_id;
|
|
145
|
+
if (parsed.data.source_type !== undefined)
|
|
146
|
+
updateData.sourceType = parsed.data.source_type;
|
|
147
|
+
if (parsed.data.incident_title !== undefined)
|
|
148
|
+
updateData.incidentTitleTemplate = parsed.data.incident_title;
|
|
149
|
+
if (parsed.data.use_ai_generate !== undefined)
|
|
150
|
+
updateData.useAiGenerate = parsed.data.use_ai_generate;
|
|
151
|
+
if (parsed.data.user_prompt !== undefined)
|
|
152
|
+
updateData.userPrompt = parsed.data.user_prompt;
|
|
153
|
+
if (parsed.data.topology_tag_mapping !== undefined)
|
|
154
|
+
updateData.topologyTagMapping = parsed.data.topology_tag_mapping;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const conditions = [eq(this.table.id, id)];
|
|
158
|
+
if (tenantId)
|
|
159
|
+
conditions.push(eq(this.table.tenantId, tenantId));
|
|
160
|
+
const rows = await this.db
|
|
161
|
+
.update(this.table)
|
|
162
|
+
.set(updateData)
|
|
163
|
+
.where(conditions.length > 1 ? and(...conditions) : conditions[0])
|
|
164
|
+
.returning();
|
|
165
|
+
return rows[0] ?? null;
|
|
166
|
+
}
|
|
167
|
+
async delete(id, tenantId) {
|
|
168
|
+
const conditions = [eq(this.table.id, id)];
|
|
169
|
+
if (tenantId)
|
|
170
|
+
conditions.push(eq(this.table.tenantId, tenantId));
|
|
171
|
+
await this.db.delete(this.table).where(conditions.length > 1 ? and(...conditions) : conditions[0]);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=grouping-config.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grouping-config.model.js","sourceRoot":"","sources":["../../src/models/grouping-config.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class IncidentCommentModel {
|
|
2
|
+
private db;
|
|
3
|
+
private tbl;
|
|
4
|
+
constructor(db: any, tbl: any);
|
|
5
|
+
listByIncidentId(incidentId: string): Promise<any>;
|
|
6
|
+
listByIncidentIds(incidentIds: string[]): Promise<any>;
|
|
7
|
+
create(input: {
|
|
8
|
+
incidentId: string;
|
|
9
|
+
message: string;
|
|
10
|
+
authorId?: string | null;
|
|
11
|
+
authorName?: string | null;
|
|
12
|
+
}): Promise<any>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=incident-comment.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incident-comment.model.d.ts","sourceRoot":"","sources":["../../src/models/incident-comment.model.ts"],"names":[],"mappings":"AAEA,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;gBADH,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,GAAG;IAGZ,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAQnC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE;IASvC,MAAM,CAAC,KAAK,EAAE;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC5B;CAYF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { asc, eq, inArray } from "drizzle-orm";
|
|
2
|
+
export class IncidentCommentModel {
|
|
3
|
+
db;
|
|
4
|
+
tbl;
|
|
5
|
+
constructor(db, tbl) {
|
|
6
|
+
this.db = db;
|
|
7
|
+
this.tbl = tbl;
|
|
8
|
+
}
|
|
9
|
+
async listByIncidentId(incidentId) {
|
|
10
|
+
return this.db
|
|
11
|
+
.select()
|
|
12
|
+
.from(this.tbl)
|
|
13
|
+
.where(eq(this.tbl.incidentId, incidentId))
|
|
14
|
+
.orderBy(asc(this.tbl.createdAt));
|
|
15
|
+
}
|
|
16
|
+
async listByIncidentIds(incidentIds) {
|
|
17
|
+
if (!incidentIds.length)
|
|
18
|
+
return [];
|
|
19
|
+
return this.db
|
|
20
|
+
.select()
|
|
21
|
+
.from(this.tbl)
|
|
22
|
+
.where(inArray(this.tbl.incidentId, incidentIds))
|
|
23
|
+
.orderBy(asc(this.tbl.createdAt));
|
|
24
|
+
}
|
|
25
|
+
async create(input) {
|
|
26
|
+
const [row] = await this.db
|
|
27
|
+
.insert(this.tbl)
|
|
28
|
+
.values({
|
|
29
|
+
incidentId: input.incidentId,
|
|
30
|
+
message: input.message,
|
|
31
|
+
authorId: input.authorId ?? null,
|
|
32
|
+
authorName: input.authorName ?? null,
|
|
33
|
+
})
|
|
34
|
+
.returning();
|
|
35
|
+
return row;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=incident-comment.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incident-comment.model.js","sourceRoot":"","sources":["../../src/models/incident-comment.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,OAAO,oBAAoB;IAErB;IACA;IAFV,YACU,EAAO,EACP,GAAQ;QADR,OAAE,GAAF,EAAE,CAAK;QACP,QAAG,GAAH,GAAG,CAAK;IACf,CAAC;IAEJ,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;aACd,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;aAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAqB;QAC3C,IAAI,CAAC,WAAW,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;aACd,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;aAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAKZ;QACC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE;aACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAChB,MAAM,CAAC;YACN,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;YAChC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;SACrC,CAAC;aACD,SAAS,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CreateIncidentEventInput {
|
|
2
|
+
incidentId: string;
|
|
3
|
+
type: string;
|
|
4
|
+
actor?: string | null;
|
|
5
|
+
message?: string | null;
|
|
6
|
+
beforeValue?: string | null;
|
|
7
|
+
afterValue?: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare class IncidentEventModel {
|
|
10
|
+
private db;
|
|
11
|
+
private tbl;
|
|
12
|
+
constructor(db: any, tbl: any);
|
|
13
|
+
listByIncidentId(incidentId: string): Promise<any>;
|
|
14
|
+
create(input: CreateIncidentEventInput): Promise<any>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=incident-event.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incident-event.model.d.ts","sourceRoot":"","sources":["../../src/models/incident-event.model.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;gBADH,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,GAAG;IAGZ,gBAAgB,CAAC,UAAU,EAAE,MAAM;IAQnC,MAAM,CAAC,KAAK,EAAE,wBAAwB;CAc7C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { asc, eq } from "drizzle-orm";
|
|
2
|
+
export class IncidentEventModel {
|
|
3
|
+
db;
|
|
4
|
+
tbl;
|
|
5
|
+
constructor(db, tbl) {
|
|
6
|
+
this.db = db;
|
|
7
|
+
this.tbl = tbl;
|
|
8
|
+
}
|
|
9
|
+
async listByIncidentId(incidentId) {
|
|
10
|
+
return this.db
|
|
11
|
+
.select()
|
|
12
|
+
.from(this.tbl)
|
|
13
|
+
.where(eq(this.tbl.incidentId, incidentId))
|
|
14
|
+
.orderBy(asc(this.tbl.createdAt));
|
|
15
|
+
}
|
|
16
|
+
async create(input) {
|
|
17
|
+
const [row] = await this.db
|
|
18
|
+
.insert(this.tbl)
|
|
19
|
+
.values({
|
|
20
|
+
incidentId: input.incidentId,
|
|
21
|
+
type: input.type,
|
|
22
|
+
actor: input.actor ?? null,
|
|
23
|
+
message: input.message ?? null,
|
|
24
|
+
beforeValue: input.beforeValue ?? null,
|
|
25
|
+
afterValue: input.afterValue ?? null,
|
|
26
|
+
})
|
|
27
|
+
.returning();
|
|
28
|
+
return row;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=incident-event.model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incident-event.model.js","sourceRoot":"","sources":["../../src/models/incident-event.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAWtC,MAAM,OAAO,kBAAkB;IAEnB;IACA;IAFV,YACU,EAAO,EACP,GAAQ;QADR,OAAE,GAAF,EAAE,CAAK;QACP,QAAG,GAAH,GAAG,CAAK;IACf,CAAC;IAEJ,KAAK,CAAC,gBAAgB,CAAC,UAAkB;QACvC,OAAO,IAAI,CAAC,EAAE;aACX,MAAM,EAAE;aACR,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;aACd,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;aAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAA+B;QAC1C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE;aACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAChB,MAAM,CAAC;YACN,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;YAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;YACtC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,IAAI;SACrC,CAAC;aACD,SAAS,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare class IncidentModel {
|
|
2
|
+
private db;
|
|
3
|
+
private tbl;
|
|
4
|
+
constructor(db: any, tbl: any);
|
|
5
|
+
findById(id: string, tenantId?: string): Promise<any>;
|
|
6
|
+
searchUsers(search: string, limit: number, tenantId?: string): Promise<any>;
|
|
7
|
+
findByIds(ids: string[], tenantId?: string): Promise<any>;
|
|
8
|
+
list(params: {
|
|
9
|
+
page: number;
|
|
10
|
+
limit: number;
|
|
11
|
+
name?: string;
|
|
12
|
+
search?: string;
|
|
13
|
+
assigneeIds?: string[];
|
|
14
|
+
statuses?: string[];
|
|
15
|
+
sourceTypes?: string[];
|
|
16
|
+
tenantId?: string;
|
|
17
|
+
}): Promise<{
|
|
18
|
+
incidents: any;
|
|
19
|
+
total: number;
|
|
20
|
+
page: number;
|
|
21
|
+
limit: number;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Lightweight projection of incidents for dashboard/analytics aggregation.
|
|
25
|
+
* Returns only the columns needed for stat computation, optionally scoped
|
|
26
|
+
* to a tenant and/or a createdAt lower bound.
|
|
27
|
+
*/
|
|
28
|
+
findForAggregation(tenantId?: string, sinceIso?: string, sourceTypes?: string[]): Promise<any>;
|
|
29
|
+
create(input: {
|
|
30
|
+
name: string;
|
|
31
|
+
source: string;
|
|
32
|
+
resourceName: string;
|
|
33
|
+
resourceType: string;
|
|
34
|
+
downMessage?: string | null;
|
|
35
|
+
tags?: Record<string, string>;
|
|
36
|
+
downTime?: string;
|
|
37
|
+
alertId?: string | null;
|
|
38
|
+
assigneeIds?: string[];
|
|
39
|
+
tenantId?: string | null;
|
|
40
|
+
description?: string | null;
|
|
41
|
+
accountId?: string | null;
|
|
42
|
+
accountName?: string | null;
|
|
43
|
+
}): Promise<any>;
|
|
44
|
+
update(id: string, data: Record<string, any>, tenantId?: string): Promise<void>;
|
|
45
|
+
delete(id: string, tenantId?: string): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=incident.model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"incident.model.d.ts","sourceRoot":"","sources":["../../src/models/incident.model.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IAEtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;gBADH,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,GAAG;IAGZ,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAWtC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAgB5D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU1C,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;;;;IAwDD;;;;OAIG;IACG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE;IAmC/E,MAAM,CAAC,KAAK,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B;IAwBK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM;IAab,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAiB3C"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { eq, desc, count, and, inArray, sql, or } from "drizzle-orm";
|
|
2
|
+
export class IncidentModel {
|
|
3
|
+
db;
|
|
4
|
+
tbl;
|
|
5
|
+
constructor(db, tbl) {
|
|
6
|
+
this.db = db;
|
|
7
|
+
this.tbl = tbl;
|
|
8
|
+
}
|
|
9
|
+
async findById(id, tenantId) {
|
|
10
|
+
const conditions = [eq(this.tbl.id, id)];
|
|
11
|
+
if (tenantId)
|
|
12
|
+
conditions.push(eq(this.tbl.tenantId, tenantId));
|
|
13
|
+
const [row] = await this.db
|
|
14
|
+
.select()
|
|
15
|
+
.from(this.tbl)
|
|
16
|
+
.where(conditions.length > 1 ? and(...conditions) : conditions[0])
|
|
17
|
+
.limit(1);
|
|
18
|
+
return row ?? null;
|
|
19
|
+
}
|
|
20
|
+
async searchUsers(search, limit, tenantId) {
|
|
21
|
+
const searchParam = `%${search}%`;
|
|
22
|
+
let query;
|
|
23
|
+
if (search) {
|
|
24
|
+
query = tenantId
|
|
25
|
+
? sql `SELECT id, email, full_name FROM "meyiconnect"."users" WHERE (email ILIKE ${searchParam} OR full_name ILIKE ${searchParam}) AND tenant_id = ${tenantId}::uuid LIMIT ${limit}`
|
|
26
|
+
: sql `SELECT id, email, full_name FROM "meyiconnect"."users" WHERE email ILIKE ${searchParam} OR full_name ILIKE ${searchParam} LIMIT ${limit}`;
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
query = tenantId
|
|
30
|
+
? sql `SELECT id, email, full_name FROM "meyiconnect"."users" WHERE tenant_id = ${tenantId}::uuid LIMIT ${limit}`
|
|
31
|
+
: sql `SELECT id, email, full_name FROM "meyiconnect"."users" LIMIT ${limit}`;
|
|
32
|
+
}
|
|
33
|
+
const { rows } = await this.db.execute(query);
|
|
34
|
+
return rows;
|
|
35
|
+
}
|
|
36
|
+
async findByIds(ids, tenantId) {
|
|
37
|
+
if (!ids.length)
|
|
38
|
+
return [];
|
|
39
|
+
const conditions = [inArray(this.tbl.id, ids)];
|
|
40
|
+
if (tenantId)
|
|
41
|
+
conditions.push(eq(this.tbl.tenantId, tenantId));
|
|
42
|
+
return this.db
|
|
43
|
+
.select()
|
|
44
|
+
.from(this.tbl)
|
|
45
|
+
.where(conditions.length > 1 ? and(...conditions) : conditions[0]);
|
|
46
|
+
}
|
|
47
|
+
async list(params) {
|
|
48
|
+
const { page, limit } = params;
|
|
49
|
+
const offset = (page - 1) * limit;
|
|
50
|
+
const conditions = [];
|
|
51
|
+
if (params.name)
|
|
52
|
+
conditions.push(eq(this.tbl.name, params.name));
|
|
53
|
+
if (params.tenantId)
|
|
54
|
+
conditions.push(eq(this.tbl.tenantId, params.tenantId));
|
|
55
|
+
if (params.sourceTypes !== undefined) {
|
|
56
|
+
if (params.sourceTypes.length === 0) {
|
|
57
|
+
conditions.push(sql `1 = 0`);
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
const lowerSources = params.sourceTypes.map((s) => s.toLowerCase());
|
|
61
|
+
conditions.push(inArray(sql `LOWER(${this.tbl.source})`, lowerSources));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (params.assigneeIds?.length) {
|
|
65
|
+
const assigneeConditions = params.assigneeIds.map((assigneeId) => {
|
|
66
|
+
if (assigneeId === "unassigned") {
|
|
67
|
+
return sql `(${this.tbl.assigneeIds} IS NULL OR ${this.tbl.assigneeIds}::text = '[]' OR ${this.tbl.assigneeIds}::text = 'null')`;
|
|
68
|
+
}
|
|
69
|
+
const jsonMatch = JSON.stringify([assigneeId]);
|
|
70
|
+
const pattern = `%"${assigneeId}"%`;
|
|
71
|
+
return sql `(${this.tbl.assigneeIds}::jsonb @> ${jsonMatch}::jsonb OR ${this.tbl.assigneeIds}::text LIKE ${pattern})`;
|
|
72
|
+
});
|
|
73
|
+
conditions.push(or(...assigneeConditions));
|
|
74
|
+
}
|
|
75
|
+
if (params.search) {
|
|
76
|
+
const pattern = `%${params.search}%`;
|
|
77
|
+
conditions.push(sql `(${this.tbl.name} ILIKE ${pattern} OR ${this.tbl.resourceName} ILIKE ${pattern} OR ${this.tbl.tags}::text ILIKE ${pattern})`);
|
|
78
|
+
}
|
|
79
|
+
if (params.statuses?.length) {
|
|
80
|
+
const taskStatuses = params.statuses.filter((s) => ["open", "in_progress", "resolved", "closed"].includes(s));
|
|
81
|
+
const analysisStatuses = params.statuses.filter((s) => !["open", "in_progress", "resolved", "closed"].includes(s));
|
|
82
|
+
const statusConditions = [];
|
|
83
|
+
if (taskStatuses.length)
|
|
84
|
+
statusConditions.push(inArray(this.tbl.status, taskStatuses));
|
|
85
|
+
if (analysisStatuses.length)
|
|
86
|
+
statusConditions.push(inArray(this.tbl.analysisStatus, analysisStatuses));
|
|
87
|
+
if (statusConditions.length)
|
|
88
|
+
conditions.push(or(...statusConditions));
|
|
89
|
+
}
|
|
90
|
+
const whereClause = conditions.length > 0 ? and(...conditions) : undefined;
|
|
91
|
+
let q = this.db
|
|
92
|
+
.select()
|
|
93
|
+
.from(this.tbl)
|
|
94
|
+
.orderBy(desc(this.tbl.createdAt))
|
|
95
|
+
.limit(limit)
|
|
96
|
+
.offset(offset);
|
|
97
|
+
if (whereClause)
|
|
98
|
+
q = q.where(whereClause);
|
|
99
|
+
const incidents = await q;
|
|
100
|
+
let countQ = this.db.select({ value: count() }).from(this.tbl);
|
|
101
|
+
if (whereClause)
|
|
102
|
+
countQ = countQ.where(whereClause);
|
|
103
|
+
const [{ value: total }] = await countQ;
|
|
104
|
+
return { incidents, total: Number(total), page, limit };
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Lightweight projection of incidents for dashboard/analytics aggregation.
|
|
108
|
+
* Returns only the columns needed for stat computation, optionally scoped
|
|
109
|
+
* to a tenant and/or a createdAt lower bound.
|
|
110
|
+
*/
|
|
111
|
+
async findForAggregation(tenantId, sinceIso, sourceTypes) {
|
|
112
|
+
const conditions = [];
|
|
113
|
+
if (tenantId)
|
|
114
|
+
conditions.push(eq(this.tbl.tenantId, tenantId));
|
|
115
|
+
if (sinceIso)
|
|
116
|
+
conditions.push(sql `${this.tbl.createdAt} >= ${sinceIso}`);
|
|
117
|
+
if (sourceTypes !== undefined) {
|
|
118
|
+
if (sourceTypes.length === 0) {
|
|
119
|
+
conditions.push(sql `1 = 0`);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const lowerSources = sourceTypes.map((s) => s.toLowerCase());
|
|
123
|
+
conditions.push(inArray(sql `LOWER(${this.tbl.source})`, lowerSources));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const whereClause = conditions.length ? and(...conditions) : undefined;
|
|
127
|
+
let q = this.db
|
|
128
|
+
.select({
|
|
129
|
+
id: this.tbl.id,
|
|
130
|
+
aliasId: this.tbl.aliasId,
|
|
131
|
+
name: this.tbl.name,
|
|
132
|
+
source: this.tbl.source,
|
|
133
|
+
resourceName: this.tbl.resourceName,
|
|
134
|
+
status: this.tbl.status,
|
|
135
|
+
analysisStatus: this.tbl.analysisStatus,
|
|
136
|
+
assigneeIds: this.tbl.assigneeIds,
|
|
137
|
+
createdAt: this.tbl.createdAt,
|
|
138
|
+
resolvedAt: this.tbl.resolvedAt,
|
|
139
|
+
analysisTriggeredAt: this.tbl.analysisTriggeredAt,
|
|
140
|
+
analysisCompletedAt: this.tbl.analysisCompletedAt,
|
|
141
|
+
})
|
|
142
|
+
.from(this.tbl)
|
|
143
|
+
.orderBy(desc(this.tbl.createdAt));
|
|
144
|
+
if (whereClause)
|
|
145
|
+
q = q.where(whereClause);
|
|
146
|
+
return q;
|
|
147
|
+
}
|
|
148
|
+
async create(input) {
|
|
149
|
+
const [row] = await this.db
|
|
150
|
+
.insert(this.tbl)
|
|
151
|
+
.values({
|
|
152
|
+
name: input.name,
|
|
153
|
+
tenantId: input.tenantId ?? null,
|
|
154
|
+
source: input.source,
|
|
155
|
+
resourceName: input.resourceName,
|
|
156
|
+
resourceType: input.resourceType,
|
|
157
|
+
downMessage: input.downMessage ?? null,
|
|
158
|
+
description: input.description ?? null,
|
|
159
|
+
tags: input.tags ?? {},
|
|
160
|
+
downTime: input.downTime ?? new Date().toISOString(),
|
|
161
|
+
alertId: input.alertId ?? null,
|
|
162
|
+
accountId: input.accountId ?? null,
|
|
163
|
+
accountName: input.accountName ?? null,
|
|
164
|
+
assigneeIds: input.assigneeIds ?? [],
|
|
165
|
+
status: "open",
|
|
166
|
+
analysisStatus: "pending",
|
|
167
|
+
})
|
|
168
|
+
.returning({ id: this.tbl.id });
|
|
169
|
+
return row;
|
|
170
|
+
}
|
|
171
|
+
async update(id, data, tenantId) {
|
|
172
|
+
const updateData = { ...data, updatedAt: new Date() };
|
|
173
|
+
const conditions = [eq(this.tbl.id, id)];
|
|
174
|
+
if (tenantId)
|
|
175
|
+
conditions.push(eq(this.tbl.tenantId, tenantId));
|
|
176
|
+
await this.db
|
|
177
|
+
.update(this.tbl)
|
|
178
|
+
.set(updateData)
|
|
179
|
+
.where(conditions.length > 1 ? and(...conditions) : conditions[0]);
|
|
180
|
+
}
|
|
181
|
+
async delete(id, tenantId) {
|
|
182
|
+
const conditions = [eq(this.tbl.id, id)];
|
|
183
|
+
if (tenantId)
|
|
184
|
+
conditions.push(eq(this.tbl.tenantId, tenantId));
|
|
185
|
+
// Verify the incident belongs to the tenant before deleting alerts
|
|
186
|
+
const incident = await this.findById(id, tenantId);
|
|
187
|
+
if (!incident)
|
|
188
|
+
return;
|
|
189
|
+
try {
|
|
190
|
+
await this.db.execute(sql `UPDATE insight_alerts SET incident_id = null WHERE incident_id = ${id}`);
|
|
191
|
+
await this.db.execute(sql `UPDATE insight_alarm_groups SET incident_id = null WHERE incident_id = ${id}`);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
console.error("Failed to nullify incident_id:", err);
|
|
195
|
+
}
|
|
196
|
+
await this.db
|
|
197
|
+
.delete(this.tbl)
|
|
198
|
+
.where(conditions.length > 1 ? and(...conditions) : conditions[0]);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=incident.model.js.map
|