U Dx`} @sUdZddlZddlZddlZddlmZmZmZmZm Z ddl Z ddl Z ddl mZmZeeZejed<dZeed<eeddd d Zejd d d ejjd ejddfeeeejejeeee jedddZdeee jeeefdddZejd d d ejjd ejddfeeeejejeeee jeeeeefdddZ ejd d d ejjd ejddfeeeejejeeee je j!dddZ"dS)zCloudWatch Logs module.N)AnyDictListOptionalcast)_utils exceptions_loggerg?_QUERY_WAIT_POLLING_DELAY)start_timestamp end_timestampreturncCs(|dkrtd||kr$tddS)Nrz(`start_time` cannot be a negative value.z,`start_time` must be inferior to `end_time`.)rZInvalidArgumentZInvalidArgumentCombinationr r r=/tmp/pip-target-zr53vnty/lib/python/awswrangler/cloudwatch.py_validate_argss ri)yearmonthdaytzinfo)querylog_group_names start_timeend_timelimit boto3_sessionr c Cstd|td|}td|}td|td|t||d||||d}|dk rn||d<tjd |d } | jf|} tt | d S) aRun a query against AWS CloudWatchLogs Insights. https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html Parameters ---------- query : str The query string. log_group_names : str The list of log groups to be queried. You can include up to 20 log groups. start_time : datetime.datetime The beginning of the time range to query. end_time : datetime.datetime The end of the time range to query. limit : Optional[int] The maximum number of log events to return in the query. boto3_session : boto3.Session(), optional Boto3 Session. The default boto3 session will be used if boto3_session receive None. Returns ------- str Query ID. Examples -------- >>> import awswrangler as wr >>> query_id = wr.cloudwatch.start_query( ... log_group_names=["loggroup"], ... query="fields @timestamp, @message | sort @timestamp desc | limit 5", ... ) zlog_group_names: %sizstart_timestamp: %szend_timestamp: %sr)Z logGroupNamesZ startTimeZendTimeZ queryStringNrlogs service_namesessionqueryId) r debugint timestamprrclient start_queryrstr) rrrrrrr r args client_logsresponserrrr&s )     r&)query_idrr cCsdddg}tjd|d}|j|d}|d}||krTtt|j|d}|d}q,td||dkrxt d ||dkrt d ||S) aWait query ends. https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html Parameters ---------- query_id : str Query ID. boto3_session : boto3.Session(), optional Boto3 Session. The default boto3 session will be used if boto3_session receive None. Returns ------- Dict[str, Any] Query result payload. Examples -------- >>> import awswrangler as wr >>> query_id = wr.cloudwatch.start_query( ... log_group_names=["loggroup"], ... query="fields @timestamp, @message | sort @timestamp desc | limit 5", ... ) ... response = wr.cloudwatch.wait_query(query_id=query_id) ZCompleteZFailedZ Cancelledrr)r!statusz status: %sz query ID: ) rr%Zget_query_resultstimesleepr r r"rZ QueryFailedZQueryCancelled)r+rZ final_statesr)r*r,rrr wait_queryXs      r/c CsJtj|d}t||||||d}t||d}ttttttf|dS)aRun a query against AWS CloudWatchLogs Insights and wait the results. https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html Parameters ---------- query : str The query string. log_group_names : str The list of log groups to be queried. You can include up to 20 log groups. start_time : datetime.datetime The beginning of the time range to query. end_time : datetime.datetime The end of the time range to query. limit : Optional[int] The maximum number of log events to return in the query. boto3_session : boto3.Session(), optional Boto3 Session. The default boto3 session will be used if boto3_session receive None. Returns ------- List[List[Dict[str, str]]] Result. Examples -------- >>> import awswrangler as wr >>> result = wr.cloudwatch.run_query( ... log_group_names=["loggroup"], ... query="fields @timestamp, @message | sort @timestamp desc | limit 5", ... ) )r rrrrrr)r+rresults)rZensure_sessionr&r/rrrr') rrrrrrr r+r*rrr run_querys)  r2c Cst||||||d}g}|D]R}i} |D]:} | ddrN| dddd} n| d} | d| | <q(|| qtj|dd} d | jkrt| d | d <| S) a/Run a query against AWS CloudWatchLogs Insights and convert the results to Pandas DataFrame. https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html Parameters ---------- query : str The query string. log_group_names : str The list of log groups to be queried. You can include up to 20 log groups. start_time : datetime.datetime The beginning of the time range to query. end_time : datetime.datetime The end of the time range to query. limit : Optional[int] The maximum number of log events to return in the query. boto3_session : boto3.Session(), optional Boto3 Session. The default boto3 session will be used if boto3_session receive None. Returns ------- pandas.DataFrame Result as a Pandas DataFrame. Examples -------- >>> import awswrangler as wr >>> df = wr.cloudwatch.read_logs( ... log_group_names=["loggroup"], ... query="fields @timestamp, @message | sort @timestamp desc | limit 5", ... ) r0field@rvaluestring)Zdtyper$)r2 startswithreplaceappendpd DataFramecolumns to_datetime) rrrrrrr1Zpre_dfrowZnew_rowcolZcol_nameZdfrrr read_logss*)  rA)N)#__doc__datetimeloggingr-typingrrrrrZboto3Zpandasr;Z awswranglerrr getLogger__name__r Logger__annotations__r floatr#rtimezoneutcnowr'Sessionr&r/r2r<rArrrrsj   <". 9