fix(aws): parallelize functions per resource (#4323)

This commit is contained in:
Sergio Garcia
2024-06-28 09:27:47 -04:00
committed by GitHub
parent a3cf7665ac
commit f515b2b53b
2 changed files with 41 additions and 62 deletions
@@ -95,7 +95,7 @@ class Logs(AWSService):
1000 # The threshold for number of events to return per log group.
)
self.__threading_call__(self.__get_log_events__)
self.__list_tags_for_resource__()
self.__threading_call__(self.__list_tags_for_resource__, self.log_groups)
def __describe_metric_filters__(self, regional_client):
logger.info("CloudWatch Logs - Describing metric filters...")
@@ -214,21 +214,19 @@ class Logs(AWSService):
f"CloudWatch Logs - Finished retrieving log events in {regional_client.region}..."
)
def __list_tags_for_resource__(self):
logger.info("CloudWatch Logs - List Tags...")
def __list_tags_for_resource__(self, log_group):
logger.info(f"CloudWatch Logs - List Tags for Log Group {log_group.name}...")
try:
for log_group in self.log_groups:
try:
regional_client = self.regional_clients[log_group.region]
response = regional_client.list_tags_log_group(
logGroupName=log_group.name
)["tags"]
log_group.tags = [response]
except ClientError as error:
if error.response["Error"]["Code"] == "ResourceNotFoundException":
log_group.tags = []
continue
regional_client = self.regional_clients[log_group.region]
response = regional_client.list_tags_for_resource(
resourceArn=log_group.arn
)["tags"]
log_group.tags = [response]
except ClientError as error:
if error.response["Error"]["Code"] == "ResourceNotFoundException":
logger.warning(
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
except Exception as error:
logger.error(
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
@@ -15,9 +15,11 @@ class Codebuild(AWSService):
super().__init__(__class__.__name__, provider)
self.projects = {}
self.__threading_call__(self.__list_projects__)
self.__threading_call__(self.__list_builds_for_project__)
self.__threading_call__(self.__batch_get_builds__)
self.__threading_call__(self.__batch_get_projects__)
self.__threading_call__(
self.__list_builds_for_project__, self.projects.values()
)
self.__threading_call__(self.__batch_get_builds__, self.projects.values())
self.__threading_call__(self.__batch_get_projects__, self.projects.values())
def __list_projects__(self, regional_client):
logger.info("Codebuild - Listing projects...")
@@ -40,64 +42,43 @@ class Codebuild(AWSService):
f"{regional_client.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
def __list_builds_for_project__(self, regional_client):
def __list_builds_for_project__(self, project):
logger.info("Codebuild - Listing builds...")
try:
for project in self.projects.values():
if project.region == regional_client.region:
try:
build_ids = regional_client.list_builds_for_project(
projectName=project.name
).get("ids", [])
if len(build_ids) > 0:
project.last_build = Build(id=build_ids[0])
except Exception as error:
logger.error(
f"{regional_client.region}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
regional_client = self.regional_clients[project.region]
build_ids = regional_client.list_builds_for_project(
projectName=project.name
).get("ids", [])
if len(build_ids) > 0:
project.last_build = Build(id=build_ids[0])
except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
f"{project.region}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
def __batch_get_builds__(self, regional_client):
def __batch_get_builds__(self, project):
logger.info("Codebuild - Getting builds...")
try:
for project in self.projects.values():
if (
project.region == regional_client.region
and project.last_build
and project.last_build.id
):
try:
builds_by_id = regional_client.batch_get_builds(
ids=[project.last_build.id]
).get("builds", [])
if len(builds_by_id) > 0:
project.last_invoked_time = builds_by_id[0].get("endTime")
except Exception as error:
logger.error(
f"{regional_client.region}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
if project.last_build and project.last_build.id:
regional_client = self.regional_clients[project.region]
builds_by_id = regional_client.batch_get_builds(
ids=[project.last_build.id]
).get("builds", [])
if len(builds_by_id) > 0:
project.last_invoked_time = builds_by_id[0].get("endTime")
except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
f"{regional_client.region}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
def __batch_get_projects__(self, regional_client):
def __batch_get_projects__(self, project):
logger.info("Codebuild - Getting projects...")
try:
for project in self.projects.values():
if project.region == regional_client.region:
try:
project_source = regional_client.batch_get_projects(
names=[project.name]
)["projects"][0]["source"]
project.buildspec = project_source.get("buildspec", "")
except Exception as error:
logger.error(
f"{regional_client.region}: {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"
)
regional_client = self.regional_clients[project.region]
project_source = regional_client.batch_get_projects(names=[project.name])[
"projects"
][0]["source"]
project.buildspec = project_source.get("buildspec", "")
except Exception as error:
logger.error(
f"{error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"