Skip to content

Commit 4396e2c

Browse files
fix: add alarm actions fields & search fields
1 parent 4d168ad commit 4396e2c

File tree

4 files changed

+77
-49
lines changed

4 files changed

+77
-49
lines changed

src/spaceone/inventory/connector/aws_cloud_watch_connector/connector.py

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -128,37 +128,28 @@ def _set_alarm_conditions(self, raw_alarm: Alarms) -> None:
128128
f"{metric_name} {operator} {threshold} for {evaluation_periods} datapoionts within {period_minutes} minutes"
129129
)
130130

131-
def _set_alarm_actions(self, raw_alarm: Alarms) -> None:
131+
@staticmethod
132+
def _set_alarm_actions(raw_alarm: Alarms) -> None:
132133
raw_alarm["actions"] = []
133134
actions = raw_alarm["actions"]
134135
alarm_actions = raw_alarm.get("AlarmActions", [])
136+
ok_actions = raw_alarm.get("OKActions ", [])
137+
insufficient_data_actions = raw_alarm.get("InsufficientDataActions", [])
138+
139+
raw_alarm["actions_enabled"] = (
140+
"Actions enabled"
141+
if raw_alarm.get("ActionsEnabled", False)
142+
else "No actions"
143+
)
144+
145+
for action in alarm_actions:
146+
actions.append({"type": "AlarmAction", "arn": action})
135147

136-
if alarm_actions:
137-
raw_alarm["actions_enabled"] = "Actions enabled"
138-
139-
for action in alarm_actions:
140-
action_service = self._extract_arn_service(action)
141-
142-
if action_service == "sns":
143-
action_type = "Notification"
144-
arn = action.split(":")[-1]
145-
action_description = f'When in alarm, send message to topic "{arn}"'
146-
action_config = ""
147-
else:
148-
_LOGGER.debug(f"Other Actions Type Detected : {action}")
149-
action_type = action_service
150-
action_description = action.split(":")[-1]
151-
action_config = ""
152-
153-
actions.append(
154-
{
155-
"type": action_type,
156-
"description": action_description,
157-
"config": action_config,
158-
}
159-
)
160-
else:
161-
raw_alarm["actions_enabled"] = "No actions"
148+
for action in ok_actions:
149+
actions.append({"type": "OKAction", "arn": action})
150+
151+
for action in insufficient_data_actions:
152+
actions.append({"type": "InsufficientDataAction", "arn": action})
162153

163154
def get_alarm_history(self, alarm_name: str) -> Generator[dict, None, None]:
164155
paginator = self.client.get_paginator("describe_alarm_history")
@@ -200,8 +191,3 @@ def _convert_int_type(value):
200191
if isinstance(value, float) and value.is_integer():
201192
return int(value)
202193
return value
203-
204-
@staticmethod
205-
def _extract_arn_service(arn: str) -> str:
206-
match = re.search(r"^arn:[\w\-]+:([\w\-]+):", arn)
207-
return match.group(1)

src/spaceone/inventory/connector/aws_cloud_watch_connector/schema/data.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,41 @@
1212
"""
1313

1414
class Action(Model):
15-
type = StringType( deserialize_from="type")
16-
description = StringType(deserialize_from="description")
17-
config = StringType(deserialize_from="config")
15+
type = StringType(deserialize_from="type")
16+
arn = StringType(deserialize_from="arn")
1817

1918

2019
class History(Model):
2120
date = DateTimeType(deserialize_from="date")
22-
type = StringType(choices=("ConfigurationUpdate","StateUpdate","Action"), deserialize_from="type")
21+
type = StringType(
22+
choices=("ConfigurationUpdate", "StateUpdate", "Action"),
23+
deserialize_from="type",
24+
)
2325
description = StringType(deserialize_from="description")
2426

2527

2628
class Alarms(AWSCloudService):
2729
alarm_arn = StringType(deserialize_from="AlarmArn")
2830
name = StringType(deserialize_from="AlarmName")
29-
state_value = StringType(choices=("OK","ALARM","INSUFFICIENT_DATA"), deserialize_from="StateValue")
31+
state_value = StringType(
32+
choices=("OK", "ALARM", "INSUFFICIENT_DATA"), deserialize_from="StateValue"
33+
)
3034
state_updated_timestamp = DateTimeType(deserialize_from="StateUpdatedTimestamp")
3135
actions_enabled = StringType(deserialize_from="actions_enabled")
36+
namespace = StringType(deserialize_from="Namespace")
37+
metric_name = StringType(deserialize_from="MetricName")
38+
statistic = StringType(
39+
choices=("SampleCount", "Average", "Sum", "Minimum", "Maximum"),
40+
deserialize_from="Statistic",
41+
)
42+
period = StringType(deserialize_from="Period")
3243
conditions = StringType(deserialize_from="conditions")
33-
actions = ListType(ModelType(Action, deserialize_from="action"), deserialize_from="actions")
34-
history = ListType(ModelType(History, deserialize_from="history"), deserialize_from="history")
44+
actions = ListType(
45+
ModelType(Action, deserialize_from="action"), deserialize_from="actions"
46+
)
47+
history = ListType(
48+
ModelType(History, deserialize_from="history"), deserialize_from="history"
49+
)
3550

3651
def reference(self, region_code):
3752
return {

src/spaceone/inventory/connector/aws_cloud_watch_connector/schema/resource.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
"Actions", "data.actions",
1111
fields=[
1212
TextDyField.data_source("Type", "type"),
13-
TextDyField.data_source("Description", "description"),
14-
TextDyField.data_source("Config", "config")
13+
TextDyField.data_source("ARN", "arn"),
1514
],
1615
)
1716

src/spaceone/inventory/connector/aws_cloud_watch_connector/schema/service_type.py

Lines changed: 36 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
from spaceone.inventory.conf.cloud_service_conf import ASSET_URL
2-
from spaceone.inventory.libs.schema.dynamic_field import TextDyField, SearchField, DateTimeDyField, \
3-
EnumDyField
4-
from spaceone.inventory.libs.schema.resource import CloudServiceTypeResponse, CloudServiceTypeResource, \
5-
CloudServiceTypeMeta
2+
from spaceone.inventory.libs.schema.dynamic_field import (
3+
TextDyField,
4+
SearchField,
5+
DateTimeDyField,
6+
EnumDyField,
7+
)
8+
from spaceone.inventory.libs.schema.resource import (
9+
CloudServiceTypeResponse,
10+
CloudServiceTypeResource,
11+
CloudServiceTypeMeta,
12+
)
613

714
"""
815
ALARMS
@@ -30,17 +37,38 @@
3037
"alert": ["ALARM"],
3138
},
3239
),
33-
DateTimeDyField.data_source("Last State Update", "data.state_updated_timestamp"),
40+
DateTimeDyField.data_source(
41+
"Last State Update", "data.state_updated_timestamp"
42+
),
3443
TextDyField.data_source("Conditions", "data.conditions"),
35-
EnumDyField.data_source("Actions", "data.actions_enabled", default_badge={
36-
'gray.500': ['No actions'], 'green.500': ['Actions enabled']
37-
}),
44+
EnumDyField.data_source(
45+
"Actions",
46+
"data.actions_enabled",
47+
default_badge={
48+
"gray.500": ["No actions"],
49+
"green.500": ["Actions enabled"],
50+
},
51+
),
52+
TextDyField.data_source(
53+
"MetricName", "data.metric_name", options={"is_optional": True}
54+
),
55+
TextDyField.data_source(
56+
"Namespace", "data.namespace", options={"is_optional": True}
57+
),
58+
TextDyField.data_source(
59+
"Statistic", "data.statistic", options={"is_optional": True}
60+
),
61+
TextDyField.data_source("Period", "data.period", options={"is_optional": True}),
3862
],
3963
search=[
4064
SearchField.set(name="Alarm ARN", key="data.alarm_arn"),
4165
SearchField.set(name="Alarm Name", key="name"),
4266
SearchField.set(name="State", key="data.state_value"),
4367
SearchField.set(name="Actions", key="data.actions_enabled"),
68+
SearchField.set(name="MetricName", key="data.metric_name"),
69+
SearchField.set(name="Namespace", key="data.namespace"),
70+
SearchField.set(name="Statistic", key="data.statistic"),
71+
SearchField.set(name="Period", key="data.period"),
4472
],
4573
)
4674

0 commit comments

Comments
 (0)