in handler.py [0:0]
def update_org_ddb(event_arn, str_update, status_code, event_details, affected_org_accounts, affected_org_entities):
# open dynamoDB
dynamodb = boto3.resource("dynamodb")
ddb_table = os.environ['DYNAMODB_TABLE']
aha_ddb_table = dynamodb.Table(ddb_table)
event_latestDescription = event_details['successfulSet'][0]['eventDescription']['latestDescription']
# set time parameters
delta_hours = os.environ['EVENT_SEARCH_BACK']
delta_hours = int(delta_hours)
delta_hours_sec = delta_hours * 3600
# formatting time in seconds
srt_ddb_format_full = "%Y-%m-%d %H:%M:%S"
str_ddb_format_sec = '%s'
sec_now = datetime.strftime(datetime.now(), str_ddb_format_sec)
# check if event arn already exists
try:
response = aha_ddb_table.get_item(
Key={
'arn': event_arn
}
)
except ClientError as e:
print(e.response['Error']['Message'])
else:
is_item_response = response.get('Item')
if is_item_response == None:
print(datetime.now().strftime(srt_ddb_format_full) + ": record not found")
# write to dynamodb
response = aha_ddb_table.put_item(
Item={
'arn': event_arn,
'lastUpdatedTime': str_update,
'added': sec_now,
'ttl': int(sec_now) + delta_hours_sec + 86400,
'statusCode': status_code,
'affectedAccountIDs': affected_org_accounts,
'latestDescription': event_latestDescription
# Cleanup: DynamoDB entry deleted 24 hours after last update
}
)
affected_org_accounts_details = [
f"{get_account_name(account_id)} ({account_id})" for account_id in affected_org_accounts]
# send to configured endpoints
if status_code != "closed":
send_org_alert(event_details, affected_org_accounts_details, affected_org_entities, event_type="create")
else:
send_org_alert(event_details, affected_org_accounts_details, affected_org_entities, event_type="resolve")
else:
item = response['Item']
if item['lastUpdatedTime'] != str_update and (item['statusCode'] != status_code or
item['latestDescription'] != event_latestDescription or
item['affectedAccountIDs'] != affected_org_accounts):
print(datetime.now().strftime(srt_ddb_format_full) + ": last Update is different")
# write to dynamodb
response = aha_ddb_table.put_item(
Item={
'arn': event_arn,
'lastUpdatedTime': str_update,
'added': sec_now,
'ttl': int(sec_now) + delta_hours_sec + 86400,
'statusCode': status_code,
'affectedAccountIDs': affected_org_accounts,
'latestDescription': event_latestDescription
# Cleanup: DynamoDB entry deleted 24 hours after last update
}
)
affected_org_accounts_details = [
f"{get_account_name(account_id)} ({account_id})" for account_id in affected_org_accounts]
# send to configured endpoints
if status_code != "closed":
send_org_alert(event_details, affected_org_accounts_details, affected_org_entities, event_type="create")
else:
send_org_alert(event_details, affected_org_accounts_details, affected_org_entities, event_type="resolve")
else:
print("No new updates found, checking again in 1 minute.")