@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,230 @@
|
|
|
1
|
+
function yamlSingleQuoted(value) {
|
|
2
|
+
return `'${String(value || "").replace(/'/g, "''")}'`;
|
|
3
|
+
}
|
|
4
|
+
export function buildCloudWatchEventBridgeTemplate(input) {
|
|
5
|
+
return `AWSTemplateFormatVersion: '2010-09-09'
|
|
6
|
+
Description: MeyiConnect CloudWatch alarm state forwarding to Insight webhook
|
|
7
|
+
|
|
8
|
+
Resources:
|
|
9
|
+
MeyiCloudWatchForwarderRole:
|
|
10
|
+
Type: AWS::IAM::Role
|
|
11
|
+
Properties:
|
|
12
|
+
AssumeRolePolicyDocument:
|
|
13
|
+
Version: '2012-10-17'
|
|
14
|
+
Statement:
|
|
15
|
+
- Effect: Allow
|
|
16
|
+
Principal:
|
|
17
|
+
Service: lambda.amazonaws.com
|
|
18
|
+
Action: sts:AssumeRole
|
|
19
|
+
ManagedPolicyArns:
|
|
20
|
+
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
|
|
21
|
+
Policies:
|
|
22
|
+
- PolicyName: MeyiCloudWatchReadTagsPolicy
|
|
23
|
+
PolicyDocument:
|
|
24
|
+
Version: '2012-10-17'
|
|
25
|
+
Statement:
|
|
26
|
+
- Effect: Allow
|
|
27
|
+
Action:
|
|
28
|
+
- cloudwatch:ListTagsForResource
|
|
29
|
+
Resource: '*'
|
|
30
|
+
|
|
31
|
+
MeyiCloudWatchForwarder:
|
|
32
|
+
Type: AWS::Lambda::Function
|
|
33
|
+
Properties:
|
|
34
|
+
FunctionName: ${yamlSingleQuoted(input.lambdaName || "MeyiCloudWatchForwarder")}
|
|
35
|
+
Runtime: nodejs20.x
|
|
36
|
+
Handler: index.handler
|
|
37
|
+
Timeout: 20
|
|
38
|
+
Role: !GetAtt MeyiCloudWatchForwarderRole.Arn
|
|
39
|
+
Environment:
|
|
40
|
+
Variables:
|
|
41
|
+
MEYI_WEBHOOK_URL: ${yamlSingleQuoted(input.webhookUrl)}
|
|
42
|
+
MEYI_WEBHOOK_AUTH_TOKEN: ${yamlSingleQuoted(input.webhookAuthToken || "")}
|
|
43
|
+
MEYI_DEPLOYMENT_STATUS_URL: ${yamlSingleQuoted(input.deploymentStatusUrl)}
|
|
44
|
+
Code:
|
|
45
|
+
ZipFile: |
|
|
46
|
+
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
|
|
47
|
+
const { CloudWatchClient, ListTagsForResourceCommand } = require("@aws-sdk/client-cloudwatch");
|
|
48
|
+
const WEBHOOK_URL = process.env.MEYI_WEBHOOK_URL;
|
|
49
|
+
const WEBHOOK_AUTH_TOKEN = process.env.MEYI_WEBHOOK_AUTH_TOKEN;
|
|
50
|
+
const DEPLOYMENT_STATUS_URL = process.env.MEYI_DEPLOYMENT_STATUS_URL;
|
|
51
|
+
const TIMEOUT_MS = Number(process.env.WEBHOOK_TIMEOUT_MS || 10000);
|
|
52
|
+
|
|
53
|
+
async function postJson(url, payload) {
|
|
54
|
+
const controller = new AbortController();
|
|
55
|
+
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
56
|
+
try {
|
|
57
|
+
const headers = { "Content-Type": "application/json" };
|
|
58
|
+
if (WEBHOOK_AUTH_TOKEN) {
|
|
59
|
+
headers["Authorization"] = "Bearer " + WEBHOOK_AUTH_TOKEN;
|
|
60
|
+
}
|
|
61
|
+
const response = await fetch(url, {
|
|
62
|
+
method: "POST",
|
|
63
|
+
headers,
|
|
64
|
+
body: JSON.stringify(payload),
|
|
65
|
+
signal: controller.signal,
|
|
66
|
+
});
|
|
67
|
+
const text = await response.text();
|
|
68
|
+
if (!response.ok) throw new Error(\`POST failed: \${response.status} \${text}\`);
|
|
69
|
+
return { status: response.status, response: text };
|
|
70
|
+
} finally {
|
|
71
|
+
clearTimeout(timer);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async function sendCloudFormationResponse(event, context, status, reason) {
|
|
76
|
+
if (!event.ResponseURL) return;
|
|
77
|
+
const body = JSON.stringify({
|
|
78
|
+
Status: status,
|
|
79
|
+
Reason: reason || \`See CloudWatch Logs for request \${context.logStreamName}\`,
|
|
80
|
+
PhysicalResourceId: event.PhysicalResourceId || context.logStreamName,
|
|
81
|
+
StackId: event.StackId,
|
|
82
|
+
RequestId: event.RequestId,
|
|
83
|
+
LogicalResourceId: event.LogicalResourceId,
|
|
84
|
+
NoEcho: false,
|
|
85
|
+
Data: {},
|
|
86
|
+
});
|
|
87
|
+
await fetch(event.ResponseURL, {
|
|
88
|
+
method: "PUT",
|
|
89
|
+
headers: { "Content-Type": "", "Content-Length": String(Buffer.byteLength(body)) },
|
|
90
|
+
body,
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async function handleDeploymentStatus(event, context) {
|
|
95
|
+
try {
|
|
96
|
+
if (DEPLOYMENT_STATUS_URL) {
|
|
97
|
+
await postJson(DEPLOYMENT_STATUS_URL, {
|
|
98
|
+
status: event.RequestType === "Delete" ? "deleted" : "deployed",
|
|
99
|
+
reason: \`CloudFormation \${event.RequestType} completed\`,
|
|
100
|
+
stackId: event.StackId,
|
|
101
|
+
stackName: event.ResourceProperties && event.ResourceProperties.StackName,
|
|
102
|
+
requestType: event.RequestType,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
await sendCloudFormationResponse(event, context, "SUCCESS", "Deployment status updated");
|
|
106
|
+
return { ok: true };
|
|
107
|
+
} catch (error) {
|
|
108
|
+
if (DEPLOYMENT_STATUS_URL) {
|
|
109
|
+
await postJson(DEPLOYMENT_STATUS_URL, {
|
|
110
|
+
status: "failed",
|
|
111
|
+
reason: error && error.message ? error.message : String(error),
|
|
112
|
+
stackId: event.StackId,
|
|
113
|
+
stackName: event.ResourceProperties && event.ResourceProperties.StackName,
|
|
114
|
+
requestType: event.RequestType,
|
|
115
|
+
}).catch(() => {});
|
|
116
|
+
}
|
|
117
|
+
await sendCloudFormationResponse(event, context, "FAILED", error && error.message ? error.message : String(error));
|
|
118
|
+
return { ok: false, error: error && error.message ? error.message : String(error) };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
async function getAlarmTags(alarmArn, region) {
|
|
123
|
+
if (!alarmArn) return {};
|
|
124
|
+
try {
|
|
125
|
+
const client = new CloudWatchClient({ region: region || process.env.AWS_REGION || "ap-south-1" });
|
|
126
|
+
const res = await client.send(new ListTagsForResourceCommand({ ResourceARN: alarmArn }));
|
|
127
|
+
const tags = {};
|
|
128
|
+
for (const t of res.Tags || []) {
|
|
129
|
+
if (t && t.Key) tags[t.Key] = t.Value || "";
|
|
130
|
+
}
|
|
131
|
+
return tags;
|
|
132
|
+
} catch (err) {
|
|
133
|
+
console.warn("Could not fetch alarm tags:", err && err.message ? err.message : String(err));
|
|
134
|
+
return {};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function normalizeCloudWatchEvent(event) {
|
|
139
|
+
const detail = event && event.detail ? event.detail : {};
|
|
140
|
+
const account = event && (event.account || (detail && detail.recipientAccountId) || (detail && detail.account));
|
|
141
|
+
const alarmName = (detail && detail.alarmName) || (event && event.alarmName);
|
|
142
|
+
const alarmArn =
|
|
143
|
+
(event && Array.isArray(event.resources) && event.resources[0]) ||
|
|
144
|
+
(detail && detail.alarmArn) ||
|
|
145
|
+
(event && event.alarmArn) ||
|
|
146
|
+
(event && event.region && account && alarmName
|
|
147
|
+
? \`arn:aws:cloudwatch:\${event.region}:\${account}:alarm:\${alarmName}\`
|
|
148
|
+
: undefined);
|
|
149
|
+
|
|
150
|
+
return {
|
|
151
|
+
AlarmName: alarmName,
|
|
152
|
+
AlarmArn: alarmArn,
|
|
153
|
+
NewStateValue: detail && detail.state && detail.state.value,
|
|
154
|
+
NewStateReason: detail && detail.state && detail.state.reason,
|
|
155
|
+
StateChangeTime: (detail && detail.state && detail.state.timestamp) || (event && event.time),
|
|
156
|
+
source: event && event.source,
|
|
157
|
+
region: event && event.region,
|
|
158
|
+
account: account,
|
|
159
|
+
accountId: account,
|
|
160
|
+
rawEvent: event,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
exports.handler = async (event, context) => {
|
|
165
|
+
if (event && event.RequestType && event.ResponseURL) {
|
|
166
|
+
return handleDeploymentStatus(event, context);
|
|
167
|
+
}
|
|
168
|
+
if (!WEBHOOK_URL) throw new Error("MEYI_WEBHOOK_URL env var is required");
|
|
169
|
+
const payload = normalizeCloudWatchEvent(event);
|
|
170
|
+
if (payload.NewStateValue && payload.NewStateValue !== "ALARM") {
|
|
171
|
+
return { ok: true, skipped: true, state: payload.NewStateValue };
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const arnToQuery =
|
|
175
|
+
payload.AlarmArn ||
|
|
176
|
+
(payload.region && (payload.accountId || payload.account) && payload.AlarmName
|
|
177
|
+
? \`arn:aws:cloudwatch:\${payload.region}:\${payload.accountId || payload.account}:alarm:\${payload.AlarmName}\`
|
|
178
|
+
: null);
|
|
179
|
+
|
|
180
|
+
if (arnToQuery) {
|
|
181
|
+
payload.AlarmArn = arnToQuery;
|
|
182
|
+
payload.tags = await getAlarmTags(arnToQuery, payload.region);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return { ok: true, ...(await postJson(WEBHOOK_URL, payload)) };
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
MeyiCloudWatchAlarmStateRule:
|
|
189
|
+
Type: AWS::Events::Rule
|
|
190
|
+
Properties:
|
|
191
|
+
Description: Forward CloudWatch alarm ALARM state changes to MeyiConnect
|
|
192
|
+
EventPattern:
|
|
193
|
+
source:
|
|
194
|
+
- aws.cloudwatch
|
|
195
|
+
detail-type:
|
|
196
|
+
- CloudWatch Alarm State Change
|
|
197
|
+
detail:
|
|
198
|
+
state:
|
|
199
|
+
value:
|
|
200
|
+
- ALARM
|
|
201
|
+
State: ENABLED
|
|
202
|
+
Targets:
|
|
203
|
+
- Id: MeyiCloudWatchForwarderTarget
|
|
204
|
+
Arn: !GetAtt MeyiCloudWatchForwarder.Arn
|
|
205
|
+
|
|
206
|
+
MeyiAllowEventBridgeInvoke:
|
|
207
|
+
Type: AWS::Lambda::Permission
|
|
208
|
+
Properties:
|
|
209
|
+
Action: lambda:InvokeFunction
|
|
210
|
+
FunctionName: !Ref MeyiCloudWatchForwarder
|
|
211
|
+
Principal: events.amazonaws.com
|
|
212
|
+
SourceArn: !GetAtt MeyiCloudWatchAlarmStateRule.Arn
|
|
213
|
+
|
|
214
|
+
MeyiDeploymentStatus:
|
|
215
|
+
Type: Custom::MeyiDeploymentStatus
|
|
216
|
+
DependsOn:
|
|
217
|
+
- MeyiCloudWatchAlarmStateRule
|
|
218
|
+
- MeyiAllowEventBridgeInvoke
|
|
219
|
+
Properties:
|
|
220
|
+
ServiceToken: !GetAtt MeyiCloudWatchForwarder.Arn
|
|
221
|
+
StackName: !Ref AWS::StackName
|
|
222
|
+
|
|
223
|
+
Outputs:
|
|
224
|
+
LambdaName:
|
|
225
|
+
Value: !Ref MeyiCloudWatchForwarder
|
|
226
|
+
EventBridgeRuleName:
|
|
227
|
+
Value: !Ref MeyiCloudWatchAlarmStateRule
|
|
228
|
+
`;
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=eventbridgeTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventbridgeTemplate.js","sourceRoot":"","sources":["../../../../src/features/sources/cloudwatch/eventbridgeTemplate.ts"],"names":[],"mappings":"AAAA,SAAS,gBAAgB,CAAC,KAAgC;IACxD,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,KAKlD;IACC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sBA6Ba,gBAAgB,CAAC,KAAK,CAAC,UAAU,IAAI,yBAAyB,CAAC;;;;;;;8BAOvD,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;qCAC3B,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAAC;wCAC3C,gBAAgB,CAAC,KAAK,CAAC,mBAAmB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyLlF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { CloudWatchAlarmSummary, CloudWatchCredentialsInput, CloudWatchMetricSummary } from "./types.js";
|
|
2
|
+
export declare class CloudWatchSourceService {
|
|
3
|
+
discover(credentials: CloudWatchCredentialsInput): Promise<{
|
|
4
|
+
region: string;
|
|
5
|
+
metrics: CloudWatchMetricSummary[];
|
|
6
|
+
alarms: CloudWatchAlarmSummary[];
|
|
7
|
+
}>;
|
|
8
|
+
deploy(input: {
|
|
9
|
+
credentials: CloudWatchCredentialsInput;
|
|
10
|
+
stackName: string;
|
|
11
|
+
webhookUrl: string;
|
|
12
|
+
webhookAuthToken?: string | null;
|
|
13
|
+
deploymentStatusUrl?: string;
|
|
14
|
+
selectedAlarmNames: string[];
|
|
15
|
+
selectedMetricKeys?: string[];
|
|
16
|
+
lambdaName?: string;
|
|
17
|
+
alarmNamePrefix?: string;
|
|
18
|
+
alarmDefaults?: {
|
|
19
|
+
statistic?: string;
|
|
20
|
+
period?: number;
|
|
21
|
+
evaluationPeriods?: number;
|
|
22
|
+
threshold?: number;
|
|
23
|
+
comparisonOperator?: string;
|
|
24
|
+
treatMissingData?: string;
|
|
25
|
+
};
|
|
26
|
+
}): Promise<{
|
|
27
|
+
region: string;
|
|
28
|
+
stackName: string;
|
|
29
|
+
action: "create" | "update";
|
|
30
|
+
stackStatus: string | null;
|
|
31
|
+
stackId: string | null;
|
|
32
|
+
selectedAlarmNames: string[];
|
|
33
|
+
selectedMetricKeys: string[];
|
|
34
|
+
lambdaName: string;
|
|
35
|
+
alarmNamePrefix: string;
|
|
36
|
+
createdAlarmNames: string[];
|
|
37
|
+
alarmDefaults: {
|
|
38
|
+
statistic: string;
|
|
39
|
+
period: number;
|
|
40
|
+
evaluationPeriods: number;
|
|
41
|
+
threshold: number;
|
|
42
|
+
comparisonOperator: string;
|
|
43
|
+
treatMissingData: string;
|
|
44
|
+
};
|
|
45
|
+
}>;
|
|
46
|
+
maskCredentialSummary(accessKeyId: string): {
|
|
47
|
+
accessKeyIdMasked: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../../src/features/sources/cloudwatch/service.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EACV,sBAAsB,EACtB,0BAA0B,EAE1B,uBAAuB,EACxB,MAAM,YAAY,CAAC;AA+HpB,qBAAa,uBAAuB;IAC5B,QAAQ,CAAC,WAAW,EAAE,0BAA0B,GAAG,OAAO,CAAC;QAC/D,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,uBAAuB,EAAE,CAAC;QACnC,MAAM,EAAE,sBAAsB,EAAE,CAAC;KAClC,CAAC;IAiEI,MAAM,CAAC,KAAK,EAAE;QAClB,WAAW,EAAE,0BAA0B,CAAC;QACxC,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;YAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;SAC3B,CAAC;KACH,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;QAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,kBAAkB,EAAE,MAAM,EAAE,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,aAAa,EAAE;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,MAAM,CAAC;YACf,iBAAiB,EAAE,MAAM,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC;YAClB,kBAAkB,EAAE,MAAM,CAAC;YAC3B,gBAAgB,EAAE,MAAM,CAAC;SAC1B,CAAC;KACH,CAAC;IAmGF,qBAAqB,CAAC,WAAW,EAAE,MAAM;;;CAK1C"}
|
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
import { CloudWatchClient, DescribeAlarmsCommand, ListMetricsCommand, } from "@aws-sdk/client-cloudwatch";
|
|
2
|
+
import { CloudFormationClient, CreateStackCommand, DescribeStacksCommand, UpdateStackCommand, } from "@aws-sdk/client-cloudformation";
|
|
3
|
+
import { buildCloudWatchLambdaTemplate } from "./template.js";
|
|
4
|
+
function sanitizeRegion(value) {
|
|
5
|
+
const region = String(value || "").trim();
|
|
6
|
+
return region || "ap-south-1";
|
|
7
|
+
}
|
|
8
|
+
function normalizeAlarmNames(values) {
|
|
9
|
+
if (!Array.isArray(values))
|
|
10
|
+
return [];
|
|
11
|
+
return Array.from(new Set(values
|
|
12
|
+
.map((x) => String(x || "").trim())
|
|
13
|
+
.filter(Boolean)));
|
|
14
|
+
}
|
|
15
|
+
function buildMetricKey(namespace, metricName) {
|
|
16
|
+
return `${namespace}::${metricName}`;
|
|
17
|
+
}
|
|
18
|
+
function normalizeMetricKeys(values) {
|
|
19
|
+
if (!Array.isArray(values))
|
|
20
|
+
return [];
|
|
21
|
+
return Array.from(new Set(values
|
|
22
|
+
.map((x) => String(x || "").trim())
|
|
23
|
+
.filter((x) => x.includes("::"))));
|
|
24
|
+
}
|
|
25
|
+
function parseMetricKey(value) {
|
|
26
|
+
const [namespaceRaw, metricNameRaw] = value.split("::");
|
|
27
|
+
const namespace = String(namespaceRaw || "").trim();
|
|
28
|
+
const metricName = String(metricNameRaw || "").trim();
|
|
29
|
+
if (!namespace || !metricName)
|
|
30
|
+
return null;
|
|
31
|
+
return {
|
|
32
|
+
namespace,
|
|
33
|
+
metricName,
|
|
34
|
+
key: buildMetricKey(namespace, metricName),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
function normalizePositiveNumber(value, fallback) {
|
|
38
|
+
const parsed = Number(value);
|
|
39
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
40
|
+
return fallback;
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
function normalizeStatistic(value) {
|
|
44
|
+
const allowed = new Set(["SampleCount", "Average", "Sum", "Minimum", "Maximum"]);
|
|
45
|
+
const input = String(value || "").trim();
|
|
46
|
+
if (allowed.has(input))
|
|
47
|
+
return input;
|
|
48
|
+
return "Average";
|
|
49
|
+
}
|
|
50
|
+
function normalizeComparisonOperator(value) {
|
|
51
|
+
const allowed = new Set([
|
|
52
|
+
"GreaterThanOrEqualToThreshold",
|
|
53
|
+
"GreaterThanThreshold",
|
|
54
|
+
"LessThanThreshold",
|
|
55
|
+
"LessThanOrEqualToThreshold",
|
|
56
|
+
]);
|
|
57
|
+
const input = String(value || "").trim();
|
|
58
|
+
if (allowed.has(input))
|
|
59
|
+
return input;
|
|
60
|
+
return "GreaterThanOrEqualToThreshold";
|
|
61
|
+
}
|
|
62
|
+
function normalizeTreatMissingData(value) {
|
|
63
|
+
const allowed = new Set(["breaching", "notBreaching", "ignore", "missing"]);
|
|
64
|
+
const input = String(value || "").trim();
|
|
65
|
+
if (allowed.has(input))
|
|
66
|
+
return input;
|
|
67
|
+
return "breaching";
|
|
68
|
+
}
|
|
69
|
+
function sanitizeLambdaName(value, fallback) {
|
|
70
|
+
const raw = String(value || "").trim();
|
|
71
|
+
const base = raw || fallback;
|
|
72
|
+
const cleaned = base.replace(/[^a-zA-Z0-9-_]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
73
|
+
const finalName = cleaned || fallback;
|
|
74
|
+
return finalName.slice(0, 64);
|
|
75
|
+
}
|
|
76
|
+
function sanitizeAlarmNamePrefix(value, fallback) {
|
|
77
|
+
const raw = String(value || "").trim();
|
|
78
|
+
const base = raw || fallback;
|
|
79
|
+
const cleaned = base.replace(/[^a-zA-Z0-9-_]/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
|
|
80
|
+
const finalName = cleaned || fallback;
|
|
81
|
+
return finalName.slice(0, 120);
|
|
82
|
+
}
|
|
83
|
+
function sanitizeAlarmSuffix(value) {
|
|
84
|
+
return String(value || "")
|
|
85
|
+
.toLowerCase()
|
|
86
|
+
.replace(/[^a-z0-9-_]+/g, "-")
|
|
87
|
+
.replace(/-+/g, "-")
|
|
88
|
+
.replace(/^-+|-+$/g, "")
|
|
89
|
+
.slice(0, 40) || "metric";
|
|
90
|
+
}
|
|
91
|
+
function buildAwsClients(credentials) {
|
|
92
|
+
const region = sanitizeRegion(credentials.region);
|
|
93
|
+
const sessionToken = String(credentials.sessionToken || "").trim();
|
|
94
|
+
const config = {
|
|
95
|
+
region,
|
|
96
|
+
credentials: {
|
|
97
|
+
accessKeyId: credentials.accessKeyId,
|
|
98
|
+
secretAccessKey: credentials.secretAccessKey,
|
|
99
|
+
...(sessionToken ? { sessionToken } : {}),
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
return {
|
|
103
|
+
region,
|
|
104
|
+
cloudWatch: new CloudWatchClient(config),
|
|
105
|
+
cloudFormation: new CloudFormationClient(config),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function maskAccessKey(accessKeyId) {
|
|
109
|
+
if (!accessKeyId)
|
|
110
|
+
return null;
|
|
111
|
+
if (accessKeyId.length <= 6)
|
|
112
|
+
return `***${accessKeyId}`;
|
|
113
|
+
return `********${accessKeyId.slice(-6)}`;
|
|
114
|
+
}
|
|
115
|
+
export class CloudWatchSourceService {
|
|
116
|
+
async discover(credentials) {
|
|
117
|
+
const { region, cloudWatch } = buildAwsClients(credentials);
|
|
118
|
+
const metricSet = new Set();
|
|
119
|
+
const metrics = [];
|
|
120
|
+
let metricToken = undefined;
|
|
121
|
+
let metricPages = 0;
|
|
122
|
+
do {
|
|
123
|
+
const response = await cloudWatch.send(new ListMetricsCommand({
|
|
124
|
+
NextToken: metricToken,
|
|
125
|
+
}));
|
|
126
|
+
for (const metric of response.Metrics || []) {
|
|
127
|
+
const namespace = String(metric.Namespace || "").trim();
|
|
128
|
+
const metricName = String(metric.MetricName || "").trim();
|
|
129
|
+
if (!namespace || !metricName)
|
|
130
|
+
continue;
|
|
131
|
+
const key = `${namespace}::${metricName}`;
|
|
132
|
+
if (metricSet.has(key))
|
|
133
|
+
continue;
|
|
134
|
+
metricSet.add(key);
|
|
135
|
+
metrics.push({ namespace, metricName });
|
|
136
|
+
if (metrics.length >= 300)
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
139
|
+
metricToken = response.NextToken;
|
|
140
|
+
metricPages += 1;
|
|
141
|
+
if (metrics.length >= 300 || metricPages >= 8)
|
|
142
|
+
break;
|
|
143
|
+
} while (metricToken);
|
|
144
|
+
const alarms = [];
|
|
145
|
+
let alarmToken = undefined;
|
|
146
|
+
let alarmPages = 0;
|
|
147
|
+
do {
|
|
148
|
+
const response = await cloudWatch.send(new DescribeAlarmsCommand({
|
|
149
|
+
NextToken: alarmToken,
|
|
150
|
+
MaxRecords: 100,
|
|
151
|
+
}));
|
|
152
|
+
for (const alarm of response.MetricAlarms || []) {
|
|
153
|
+
alarms.push({
|
|
154
|
+
alarmName: String(alarm.AlarmName || ""),
|
|
155
|
+
stateValue: alarm.StateValue || null,
|
|
156
|
+
metricName: alarm.MetricName || null,
|
|
157
|
+
namespace: alarm.Namespace || null,
|
|
158
|
+
dimensions: (alarm.Dimensions || []).map((d) => ({
|
|
159
|
+
name: String(d.Name || ""),
|
|
160
|
+
value: String(d.Value || ""),
|
|
161
|
+
})),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
alarmToken = response.NextToken;
|
|
165
|
+
alarmPages += 1;
|
|
166
|
+
if (alarmPages >= 10)
|
|
167
|
+
break;
|
|
168
|
+
} while (alarmToken);
|
|
169
|
+
metrics.sort((a, b) => a.namespace === b.namespace
|
|
170
|
+
? a.metricName.localeCompare(b.metricName)
|
|
171
|
+
: a.namespace.localeCompare(b.namespace));
|
|
172
|
+
alarms.sort((a, b) => a.alarmName.localeCompare(b.alarmName));
|
|
173
|
+
return { region, metrics, alarms };
|
|
174
|
+
}
|
|
175
|
+
async deploy(input) {
|
|
176
|
+
const { region, cloudFormation } = buildAwsClients(input.credentials);
|
|
177
|
+
const stackName = String(input.stackName || "").trim() || "meyi-cloudwatch-stack";
|
|
178
|
+
const selectedAlarmNames = normalizeAlarmNames(input.selectedAlarmNames);
|
|
179
|
+
const selectedMetricKeys = normalizeMetricKeys(input.selectedMetricKeys);
|
|
180
|
+
const selectedMetrics = selectedMetricKeys
|
|
181
|
+
.map(parseMetricKey)
|
|
182
|
+
.filter(Boolean);
|
|
183
|
+
if (!selectedMetrics.length) {
|
|
184
|
+
throw new Error("Select at least one CloudWatch metric for alarm deployment");
|
|
185
|
+
}
|
|
186
|
+
const alarmDefaults = {
|
|
187
|
+
statistic: normalizeStatistic(input.alarmDefaults?.statistic),
|
|
188
|
+
period: Math.floor(normalizePositiveNumber(input.alarmDefaults?.period, 60)),
|
|
189
|
+
evaluationPeriods: Math.floor(normalizePositiveNumber(input.alarmDefaults?.evaluationPeriods, 1)),
|
|
190
|
+
threshold: normalizePositiveNumber(input.alarmDefaults?.threshold, 50),
|
|
191
|
+
comparisonOperator: normalizeComparisonOperator(input.alarmDefaults?.comparisonOperator),
|
|
192
|
+
treatMissingData: normalizeTreatMissingData(input.alarmDefaults?.treatMissingData),
|
|
193
|
+
};
|
|
194
|
+
const lambdaName = sanitizeLambdaName(input.lambdaName, `meyi-cloudwatch-forwarder-${stackName}`.slice(0, 64));
|
|
195
|
+
const alarmNamePrefix = sanitizeAlarmNamePrefix(input.alarmNamePrefix, `meyi-${stackName}`);
|
|
196
|
+
const namedSelectedMetrics = selectedMetrics.map((metric, index) => {
|
|
197
|
+
const suffix = sanitizeAlarmSuffix(`${metric.namespace}-${metric.metricName}`);
|
|
198
|
+
const alarmName = `${alarmNamePrefix}-${index + 1}-${suffix}`.slice(0, 255);
|
|
199
|
+
return { ...metric, alarmName };
|
|
200
|
+
});
|
|
201
|
+
const templateBody = buildCloudWatchLambdaTemplate({
|
|
202
|
+
webhookUrl: input.webhookUrl,
|
|
203
|
+
webhookAuthToken: input.webhookAuthToken,
|
|
204
|
+
deploymentStatusUrl: input.deploymentStatusUrl || "",
|
|
205
|
+
selectedAlarmNames,
|
|
206
|
+
selectedMetricKeys,
|
|
207
|
+
selectedMetrics: namedSelectedMetrics,
|
|
208
|
+
alarmDefaults,
|
|
209
|
+
lambdaName,
|
|
210
|
+
});
|
|
211
|
+
let existing = null;
|
|
212
|
+
try {
|
|
213
|
+
const describe = await cloudFormation.send(new DescribeStacksCommand({ StackName: stackName }));
|
|
214
|
+
existing = describe.Stacks?.[0] || null;
|
|
215
|
+
}
|
|
216
|
+
catch (e) {
|
|
217
|
+
const msg = String(e?.message || "");
|
|
218
|
+
if (!msg.includes("does not exist"))
|
|
219
|
+
throw e;
|
|
220
|
+
}
|
|
221
|
+
let action = existing ? "update" : "create";
|
|
222
|
+
if (!existing) {
|
|
223
|
+
await cloudFormation.send(new CreateStackCommand({
|
|
224
|
+
StackName: stackName,
|
|
225
|
+
TemplateBody: templateBody,
|
|
226
|
+
Capabilities: ["CAPABILITY_IAM"],
|
|
227
|
+
}));
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
try {
|
|
231
|
+
await cloudFormation.send(new UpdateStackCommand({
|
|
232
|
+
StackName: stackName,
|
|
233
|
+
TemplateBody: templateBody,
|
|
234
|
+
Capabilities: ["CAPABILITY_IAM"],
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
catch (e) {
|
|
238
|
+
const msg = String(e?.message || "");
|
|
239
|
+
if (msg.includes("No updates are to be performed")) {
|
|
240
|
+
action = "update";
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
throw e;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
const latest = await cloudFormation.send(new DescribeStacksCommand({ StackName: stackName }));
|
|
248
|
+
const stack = latest.Stacks?.[0] || null;
|
|
249
|
+
return {
|
|
250
|
+
region,
|
|
251
|
+
stackName,
|
|
252
|
+
action,
|
|
253
|
+
stackStatus: stack?.StackStatus || null,
|
|
254
|
+
stackId: stack?.StackId || null,
|
|
255
|
+
selectedAlarmNames,
|
|
256
|
+
selectedMetricKeys,
|
|
257
|
+
lambdaName,
|
|
258
|
+
alarmNamePrefix,
|
|
259
|
+
createdAlarmNames: namedSelectedMetrics.map((metric) => metric.alarmName),
|
|
260
|
+
alarmDefaults,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
maskCredentialSummary(accessKeyId) {
|
|
264
|
+
return {
|
|
265
|
+
accessKeyIdMasked: maskAccessKey(accessKeyId),
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/features/sources/cloudwatch/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type AlarmDefaults = {
|
|
2
|
+
statistic: string;
|
|
3
|
+
period: number;
|
|
4
|
+
evaluationPeriods: number;
|
|
5
|
+
threshold: number;
|
|
6
|
+
comparisonOperator: string;
|
|
7
|
+
treatMissingData: string;
|
|
8
|
+
};
|
|
9
|
+
type MetricSelection = {
|
|
10
|
+
namespace: string;
|
|
11
|
+
metricName: string;
|
|
12
|
+
key: string;
|
|
13
|
+
alarmName?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function buildCloudWatchLambdaTemplate(input: {
|
|
16
|
+
webhookUrl: string;
|
|
17
|
+
webhookAuthToken?: string | null;
|
|
18
|
+
deploymentStatusUrl: string;
|
|
19
|
+
selectedAlarmNames?: string[];
|
|
20
|
+
selectedMetricKeys?: string[];
|
|
21
|
+
selectedMetrics: MetricSelection[];
|
|
22
|
+
alarmDefaults: AlarmDefaults;
|
|
23
|
+
lambdaName: string;
|
|
24
|
+
}): string;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../../src/features/sources/cloudwatch/template.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAgEF,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,eAAe,EAAE,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB,UAqRA"}
|