in handler.py [0:0]
def describe_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']
delta_hours = int(delta_hours)
time_delta = (datetime.now() - timedelta(hours=delta_hours))
print("Searching for events and updates made after: ", time_delta)
dict_regions = os.environ['REGIONS']
str_filter = {
'lastUpdatedTimes': [
{
'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)
event_paginator = health_client.get_paginator('describe_events')
event_page_iterator = event_paginator.paginate(filter=str_filter)
for response in 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: # if there are new event(s) from AWS
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 non-organizational view requirements
affected_accounts = get_health_accounts(health_client, event, event_arn)
affected_entities = get_health_entities(health_client, event, event_arn)
# get event details
event_details = json.dumps(describe_event_details(health_client, event_arn), 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
update_ddb(event_arn, str_update, status_code, event_details, affected_accounts, affected_entities)
else:
print("No events found in time frame, checking again in 1 minute.")