import time import os import io import json import shutil import zipfile import pathlib import pandas as pd import boto3 import datetime import botocore from dateutil.parser import parse s3 = boto3.client('s3') lookoutmetrics_client = boto3.client( "lookoutmetrics") def lambda_handler(event, context): #Function to format the date given by the event def datetime_from_string(s): try: dt = datetime.datetime.fromisoformat(s.split("[")[0]) except ValueError: dt = datetime.datetime.strptime(s.split("[")[0], "%Y-%m-%dT%H:%MZ") return dt #Function to update the metricValue_AnomalyScore csv in the case that one already exists def update_Anomaly_CSV(event,key,bucket,obj,response): print('object exist') #Reading the existing file original_df = pd.read_csv(obj.get("Body"), index_col=False) file2 = original_df.to_dict('list') #getting the needed data metricList = response['MetricList'] dimensionList = response['DimensionList'] metricName = event['impactedMetric']['metricName'] #Column names generator data2={} data2['key']=[] data2['Timestamp'] =[] for i in dimensionList: data2[i]=[] # data2[i]=[] for i in metricList: data2[i['MetricName']+'AnomalyMetricValue']=[] data2[i['MetricName']+'GroupScore']=[] #Data collection from the event for the CSV for i in event['impactedMetric']['relevantTimeSeries']: for a in i['dimensions']: data2[a['dimensionName']].append(a['dimensionValue']) data2[metricName+'AnomalyMetricValue'].append(i['metricValue']) data2[metricName+'GroupScore'].append(event['anomalyScore']) data2['Timestamp'].append(start_time) nRow=len(data2['Timestamp']) nDimension = len(dimensionList) #key generator i=0 while i