def describe_org_events()

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.")