in handler.py [0:0]
def describe_org_events(health_client):
str_ddb_format_sec = '%s'
# set hours to search back in time for events
delta_hours = os.environ['EVENT_SEARCH_BACK']
health_event_type = os.environ['HEALTH_EVENT_TYPE']
dict_regions = os.environ['REGIONS']
delta_hours = int(delta_hours)
time_delta = (datetime.now() - timedelta(hours=delta_hours))
print("Searching for events and updates made after: ", time_delta)
str_filter = {
'lastUpdatedTime': {
'from': time_delta
}
}
if health_event_type == "issue":
event_type_filter = {'eventTypeCategories': ['issue','investigation']}
print("AHA will be monitoring events with event type categories as 'issue' only!")
str_filter.update(event_type_filter)
if dict_regions != "all regions":
dict_regions = [region.strip() for region in dict_regions.split(',')]
print("AHA will monitor for events only in the selected regions: ", dict_regions)
region_filter = {'regions': dict_regions}
str_filter.update(region_filter)
org_event_paginator = health_client.get_paginator('describe_events_for_organization')
org_event_page_iterator = org_event_paginator.paginate(filter=str_filter)
for response in org_event_page_iterator:
events = response.get('events', [])
aws_events = json.dumps(events, default=myconverter)
aws_events = json.loads(aws_events)
print('Event(s) Received: ', json.dumps(aws_events))
if len(aws_events) > 0:
for event in aws_events:
event_arn = event['arn']
status_code = event['statusCode']
str_update = parser.parse((event['lastUpdatedTime']))
str_update = str_update.strftime(str_ddb_format_sec)
# get organizational view requirements
affected_org_accounts = get_health_org_accounts(health_client, event, event_arn)
if os.environ['ACCOUNT_IDS'] == "None" or os.environ['ACCOUNT_IDS'] == "":
affected_org_accounts = affected_org_accounts
update_org_ddb_flag=True
else:
account_ids_to_filter = getAccountIDs()
if affected_org_accounts != []:
focused_org_accounts = [i for i in affected_org_accounts if i not in account_ids_to_filter]
print("Focused list is ", focused_org_accounts)
if focused_org_accounts != []:
update_org_ddb_flag=True
affected_org_accounts = focused_org_accounts
else:
update_org_ddb_flag=False
print("Focused Organization Account list is empty")
else:
update_org_ddb_flag=True
affected_org_entities = get_health_org_entities(health_client, event, event_arn, affected_org_accounts)
# get event details
event_details = json.dumps(describe_org_event_details(health_client, event_arn, affected_org_accounts),
default=myconverter)
event_details = json.loads(event_details)
print("Event Details: ", event_details)
if event_details['successfulSet'] == []:
print("An error occured with account:", event_details['failedSet'][0]['awsAccountId'], "due to:",
event_details['failedSet'][0]['errorName'], ":",
event_details['failedSet'][0]['errorMessage'])
continue
else:
# write to dynamoDB for persistence
if update_org_ddb_flag:
update_org_ddb(event_arn, str_update, status_code, event_details, affected_org_accounts,
affected_org_entities)
else:
print("No events found in time frame, checking again in 1 minute.")