Coverage for src/container_collection/batch/get_batch_logs.py: 100%
16 statements
« prev ^ index » next coverage.py v7.1.0, created at 2024-09-25 18:23 +0000
« prev ^ index » next coverage.py v7.1.0, created at 2024-09-25 18:23 +0000
1import boto3
3LOG_GROUP_NAME = "/aws/batch/job"
4"""AWS Batch log group name."""
7def get_batch_logs(job_arn: str, log_filter: str) -> str:
8 """
9 Get logs for AWS Batch job.
11 Parameters
12 ----------
13 job_arn
14 Job ARN.
15 log_filter
16 Filter for log events.
18 Returns
19 -------
20 :
21 All filtered log events.
22 """
24 client = boto3.client("batch")
25 response = client.describe_jobs(jobs=[job_arn])["jobs"][0]
26 log_stream = response["container"]["logStreamName"]
28 client = boto3.client("logs")
29 log_events: list[str] = []
31 response = client.filter_log_events(
32 logGroupName=LOG_GROUP_NAME,
33 logStreamNames=[log_stream],
34 filterPattern=log_filter,
35 )
37 if response["events"]:
38 log_events = log_events + [event["message"] for event in response["events"]]
40 while "nextToken" in response:
41 response = client.filter_log_events(
42 logGroupName="/aws/batch/job",
43 logStreamNames=[log_stream],
44 filterPattern=log_filter,
45 nextToken=response["nextToken"],
46 )
48 log_events = log_events + [event["message"] for event in response["events"]]
50 return "\n".join(log_events)