1import type { Alarm } from "./Alarm.ts";
2import type { AlarmMuteRule } from "./AlarmMuteRule.ts";
3import type { CompositeAlarm } from "./CompositeAlarm.ts";
4import type { Dashboard } from "./Dashboard.ts";
5import type { InsightRule } from "./InsightRule.ts";
6import type { MetricStream } from "./MetricStream.ts";
7import { sortByLogicalId } from "./common.ts";
8
9export type AlarmResource = Alarm | CompositeAlarm;
10
11export type InsightRuleResource = InsightRule;
12
13export type TaggableResource =
14 | AlarmResource
15 | Dashboard
16 | MetricStream
17 | InsightRule
18 | AlarmMuteRule;
19
20export const sortAlarmResources = (
21 alarms: [AlarmResource, ...AlarmResource[]],
22) => sortByLogicalId(alarms) as [AlarmResource, ...AlarmResource[]];
23
24export const sortInsightRuleResources = (
25 rules: [InsightRuleResource, ...InsightRuleResource[]],
26) => sortByLogicalId(rules) as [InsightRuleResource, ...InsightRuleResource[]];
27
28export const getTaggableResourceArn = (resource: TaggableResource) => {
29 switch (resource.Type) {
30 case "AWS.CloudWatch.Alarm":
31 case "AWS.CloudWatch.CompositeAlarm":
32 return resource.alarmArn;
33 case "AWS.CloudWatch.Dashboard":
34 return resource.dashboardArn;
35 case "AWS.CloudWatch.MetricStream":
36 return resource.metricStreamArn;
37 case "AWS.CloudWatch.InsightRule":
38 return resource.ruleArn;
39 case "AWS.CloudWatch.AlarmMuteRule":
40 return resource.alarmMuteRuleArn;
41 }
42};