Skip to content

Commit 44709ab

Browse files
Merge pull request #124 from jinyoungmoonDEV/master
fix: add color & add paginator logic to all new feature api request
2 parents a1755da + 725c1eb commit 44709ab

File tree

3 files changed

+65
-44
lines changed

3 files changed

+65
-44
lines changed

src/spaceone/inventory/conf/cloud_service_conf.py

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -12,34 +12,34 @@
1212
DEFAULT_VULNERABLE_PORTS = "22,3306"
1313

1414
CLOUD_SERVICE_GROUP_MAP = {
15-
"IAM": "IAMConnectorManager",
16-
"DynamoDB": "DynamoDBConnectorManager",
17-
"Lambda": "LambdaConnectorManager",
18-
"CloudFront": "CloudFrontConnectorManager",
19-
"RDS": "RDSConnectorManager",
20-
"Route53": "Route53ConnectorManager",
21-
"S3": "S3ConnectorManager",
22-
"ElastiCache": "ElastiCacheConnectorManager",
23-
"APIGateway": "APIGatewayConnectorManager",
24-
"DirectConnect": "DirectConnectConnectorManager",
25-
"EFS": "EFSConnectorManager",
26-
"DocumentDB": "DocumentDBConnectorManager",
27-
"ECS": "ECSConnectorManager",
28-
"Redshift": "RedshiftConnectorManager",
29-
"EKS": "EKSConnectorManager",
30-
"SQS": "SQSConnectorManager",
31-
"KMS": "KMSConnectorManager",
32-
"ECR": "ECRConnectorManager",
33-
"CloudTrail": "CloudTrailConnectorManager",
34-
"SNS": "SNSConnectorManager",
35-
"SecretsManager": "SecretsManagerConnectorManager",
36-
"ELB": "ELBConnectorManager",
37-
"VPC": "VPCConnectorManager",
38-
"ACM": "ACMConnectorManager",
39-
"KinesisDataStream": "KinesisDataStreamConnectorManager",
40-
"MSK": "MSKConnectorManager",
41-
"KinesisFirehose": "KinesisFirehoseConnectorManager",
42-
"Lightsail": "LightsailConnectorManager",
15+
# "IAM": "IAMConnectorManager",
16+
# "DynamoDB": "DynamoDBConnectorManager",
17+
# "Lambda": "LambdaConnectorManager",
18+
# "CloudFront": "CloudFrontConnectorManager",
19+
# "RDS": "RDSConnectorManager",
20+
# "Route53": "Route53ConnectorManager",
21+
# "S3": "S3ConnectorManager",
22+
# "ElastiCache": "ElastiCacheConnectorManager",
23+
# "APIGateway": "APIGatewayConnectorManager",
24+
# "DirectConnect": "DirectConnectConnectorManager",
25+
# "EFS": "EFSConnectorManager",
26+
# "DocumentDB": "DocumentDBConnectorManager",
27+
# "ECS": "ECSConnectorManager",
28+
# "Redshift": "RedshiftConnectorManager",
29+
# "EKS": "EKSConnectorManager",
30+
# "SQS": "SQSConnectorManager",
31+
# "KMS": "KMSConnectorManager",
32+
# "ECR": "ECRConnectorManager",
33+
# "CloudTrail": "CloudTrailConnectorManager",
34+
# "SNS": "SNSConnectorManager",
35+
# "SecretsManager": "SecretsManagerConnectorManager",
36+
# "ELB": "ELBConnectorManager",
37+
# "VPC": "VPCConnectorManager",
38+
# "ACM": "ACMConnectorManager",
39+
# "KinesisDataStream": "KinesisDataStreamConnectorManager",
40+
# "MSK": "MSKConnectorManager",
41+
# "KinesisFirehose": "KinesisFirehoseConnectorManager",
42+
# "Lightsail": "LightsailConnectorManager",
4343
"CloudWatch": "CloudWatchConnectorManager",
4444
# Not used services
4545
# "EC2": "EC2ConnectorManager",

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

Lines changed: 34 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
import logging
2+
from typing import Generator, List
23

34
from spaceone.core.utils import *
45

56
from spaceone.inventory.connector.aws_cloud_watch_connector.schema.data import Alarms
67
from spaceone.inventory.connector.aws_cloud_watch_connector.schema.resource import AlarmsResource, AlarmsResponse
78
from spaceone.inventory.connector.aws_cloud_watch_connector.schema.service_type import CLOUD_SERVICE_TYPES
9+
from spaceone.inventory.connector.aws_dynamodb_connector.schema.data import Table
10+
from spaceone.inventory.connector.aws_dynamodb_connector.schema.resource import TableResource
811
from spaceone.inventory.libs.connector import SchematicAWSConnector
912

1013

@@ -24,7 +27,7 @@ class CloudWatchConnector(SchematicAWSConnector):
2427
"GreaterThanUpperThreshold": ">"
2528
}
2629

27-
def get_resources(self):
30+
def get_resources(self) -> List[TableResource]:
2831
_LOGGER.debug(f"[get_resources][account_id: {self.account_id}] START: CloudWatch")
2932
resources = []
3033
start_time = time.time()
@@ -60,17 +63,24 @@ def get_resources(self):
6063
return resources
6164

6265
def get_alarms(self):
63-
response = self.client.describe_alarms()
64-
# Only MetricAlarms are returned temporarily, CompositeAlarms must be applied later.
65-
return response["MetricAlarms"]
66+
paginator = self.client.get_paginator("describe_alarms")
67+
response_iterator = paginator.paginate(
68+
PaginationConfig={
69+
"MaxRecords": 100,
70+
}
71+
)
72+
73+
for data in response_iterator:
74+
# Only MetricAlarms are returned temporarily, CompositeAlarms must be applied later.
75+
for raw in data.get("MetricAlarms", []):
76+
yield raw
6677

67-
def request_alarms_data(self, region_name):
78+
def request_alarms_data(self, region_name: str) -> List[Table]:
6879
self.cloud_service_type = "Alarm"
6980
cloudwatch_resource_type = "AWS::CloudWatch::Alarm"
7081

7182
try:
7283
raw_alarms = self.get_alarms()
73-
7484
for raw_alarm in raw_alarms:
7585
self._set_alarm_conditions(raw_alarm)
7686
self._set_alarm_actions(raw_alarm)
@@ -91,7 +101,7 @@ def request_alarms_data(self, region_name):
91101
)
92102
yield {"data": error_resource_response}
93103

94-
def _set_alarm_conditions(self, raw_alarm):
104+
def _set_alarm_conditions(self, raw_alarm: Alarms) -> None:
95105
metric_name = raw_alarm.get("MetricName", "?")
96106
period = raw_alarm["Period"]
97107
evaluation_periods = self._convert_int_type(raw_alarm.get("EvaluationPeriods", "?"))
@@ -104,7 +114,7 @@ def _set_alarm_conditions(self, raw_alarm):
104114
raw_alarm["conditions"] = f"{metric_name} {operator} {threshold} for {evaluation_periods} datapoionts within {period_minutes} minutes"
105115

106116
@staticmethod
107-
def _set_alarm_actions(raw_alarm):
117+
def _set_alarm_actions(raw_alarm: Alarms) -> None:
108118
raw_alarm["actions"] = []
109119
actions = raw_alarm["actions"]
110120
alarm_actions = raw_alarm.get("AlarmActions", [])
@@ -132,18 +142,27 @@ def _set_alarm_actions(raw_alarm):
132142

133143
actions.append({"type": action_type, "description": action_description, "config": action_config})
134144
else:
135-
raw_alarm["actions_enabled"] = "No Actions"
136-
137-
def get_alarm_history(self, alarm_name: str):
138-
response = self.client.describe_alarm_history(AlarmName=alarm_name)
139-
return response["AlarmHistoryItems"]
145+
raw_alarm["actions_enabled"] = "No actions"
146+
147+
def get_alarm_history(self, alarm_name: str) -> Generator[dict, None, None]:
148+
paginator = self.client.get_paginator("describe_alarm_history")
149+
response_iterator = paginator.paginate(
150+
PaginationConfig={
151+
"AlarmName": alarm_name,
152+
"MaxItems": 100,
153+
"ScanBy": "TimestampDescending",
154+
}
155+
)
140156

141-
def _set_alarm_history(self, raw_alarm):
142-
alarm_histories = self.get_alarm_history(raw_alarm["AlarmName"])
157+
for data in response_iterator:
158+
for raw in data.get("AlarmHistoryItems", []):
159+
yield raw
143160

161+
def _set_alarm_history(self, raw_alarm: Alarms) -> None:
144162
raw_alarm["history"] = []
145163
history = raw_alarm["history"]
146164

165+
alarm_histories = self.get_alarm_history(raw_alarm["AlarmName"])
147166
for alarm_history in alarm_histories:
148167
history.append(
149168
{

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
EnumDyField.data_source("State", "data.state_value", default_badge={
2525
'gray.500': ['INSUFFICIENT_DATA'], 'green.500': ['OK'], 'red.500': ['ALARM']
2626
}),
27-
TextDyField.data_source("State", "data.state_value"),
2827
DateTimeDyField.data_source("Last State Update", "data.state_updated_timestamp"),
2928
TextDyField.data_source("Conditions", "data.conditions"),
29+
EnumDyField.data_source("Actions", "data.actions_enabled", default_badge={
30+
'gray.500': ['No actions'], 'green.500': ['Actions enabled']
31+
}),
3032
ListDyField.data_source("Actions", "data.actions_enabled"),
3133
],
3234
search=[

0 commit comments

Comments
 (0)