"""AWS CloudWatch Log helper.""" from datetime import datetime from typing import List from copy_auth0_logs_to_cloudwatch.boto import session as boto_session def get_stream_name() -> str: """Get generic new stream name. Returns: str: Stream name. """ return datetime.utcnow().strftime('%Y-%m-%dT%H-%M-%S.%fZ') def create_stream(log_group: str) -> str: """Create Log stream. Args: log_group (str): AWS CloudWatch Log group name. Returns: str: New stream name. """ logs_client = boto_session.client('logs') log_stream_name = get_stream_name() logs_client.create_log_stream(logGroupName=log_group, logStreamName=log_stream_name) return log_stream_name def put_events(log_group: str, log_stream: str, log_events: List[dict], sequence_token: str or None = None) -> str: """Put log events to AWS CloudWatch Log. Args: log_group (str): AWS CloudWatch Log group name. log_stream (str): AWS CloudWatch Log stream name. log_events (List[dict]): Log events list. sequence_token (str or None): AWS CloudWatch Log stream sequence token. Returns: str: New sequence token. """ logs_client = boto_session.client('logs') kwargs = dict( logGroupName=log_group, logStreamName=log_stream, logEvents=log_events ) if sequence_token: kwargs['sequenceToken'] = sequence_token response = logs_client.put_log_events(**kwargs) return response['nextSequenceToken']