|
4 | 4 | from .logging import log
|
5 | 5 | from datetime import datetime
|
6 | 6 |
|
7 |
| -cw_logs = boto3.client('logs') |
| 7 | +cw_logs = boto3.client("logs") |
8 | 8 |
|
9 | 9 |
|
10 | 10 | def _delete_empty_log_streams(group: dict, oldest_in_ms: int, dry_run: bool):
|
11 | 11 | log_group_name = group["logGroupName"]
|
12 | 12 | kwargs = {
|
13 | 13 | "logGroupName": log_group_name,
|
14 |
| - "orderBy": 'LastEventTime', |
15 |
| - "descending": False |
| 14 | + "orderBy": "LastEventTime", |
| 15 | + "descending": False, |
16 | 16 | }
|
17 |
| - for response in cw_logs.get_paginator('describe_log_streams').paginate(**kwargs): |
18 |
| - for stream in response['logStreams']: |
19 |
| - log_stream_name = stream['logStreamName'] |
| 17 | + for response in cw_logs.get_paginator("describe_log_streams").paginate(**kwargs): |
| 18 | + for stream in response["logStreams"]: |
| 19 | + log_stream_name = stream["logStreamName"] |
20 | 20 | if stream["creationTime"] > oldest_in_ms:
|
21 |
| - log.debug('keeping log stream %s from group %s as it is within retention period', log_stream_name, log_group_name) |
| 21 | + log.debug( |
| 22 | + "keeping log stream %s from group %s as it is within retention period", |
| 23 | + log_stream_name, |
| 24 | + log_group_name, |
| 25 | + ) |
22 | 26 | continue
|
23 | 27 |
|
24 | 28 | if not stream["storedBytes"] == 0 and stream["creationTime"] < oldest_in_ms:
|
25 | 29 | try:
|
26 |
| - log.info('deleting log stream %s from group %s', log_stream_name, log_group_name) |
| 30 | + log.info( |
| 31 | + "deleting log stream %s from group %s", |
| 32 | + log_stream_name, |
| 33 | + log_group_name, |
| 34 | + ) |
27 | 35 | if dry_run:
|
28 | 36 | continue
|
29 | 37 | cw_logs.delete_log_stream(
|
30 |
| - logGroupName=log_group_name, |
31 |
| - logStreamName=log_stream_name |
| 38 | + logGroupName=log_group_name, logStreamName=log_stream_name |
32 | 39 | )
|
33 | 40 | except ClientError as e:
|
34 |
| - log.error('failed to delete log stream %s from group %s, %s', log_stream_name, log_group_name, e) |
| 41 | + log.error( |
| 42 | + "failed to delete log stream %s from group %s, %s", |
| 43 | + log_stream_name, |
| 44 | + log_group_name, |
| 45 | + e, |
| 46 | + ) |
35 | 47 | else:
|
36 |
| - log.debug('keeping log stream %s from group %s', log_stream_name, log_group_name) |
| 48 | + log.debug( |
| 49 | + "keeping log stream %s from group %s", |
| 50 | + log_stream_name, |
| 51 | + log_group_name, |
| 52 | + ) |
| 53 | + |
37 | 54 |
|
38 | 55 | def delete_empty_log_streams(dry_run: bool = False):
|
39 |
| - log.info('cleaning empty log streams older than the retention period of the group') |
| 56 | + log.info("cleaning empty log streams older than the retention period of the group") |
40 | 57 | now = (datetime.utcnow() - datetime(1970, 1, 1)).total_seconds()
|
41 |
| - for response in cw_logs.get_paginator('describe_log_groups').paginate(): |
42 |
| - for group in response['logGroups']: |
43 |
| - oldest = now - (group.get('retentionInDays', 365) * 24 * 3600) |
| 58 | + for response in cw_logs.get_paginator("describe_log_groups").paginate(): |
| 59 | + for group in response["logGroups"]: |
| 60 | + oldest = now - (group.get("retentionInDays", 365) * 24 * 3600) |
44 | 61 | _delete_empty_log_streams(group, oldest * 1000, dry_run)
|
45 | 62 |
|
46 | 63 |
|
47 |
| -def handle(request, context): |
48 |
| - delete_empty_log_streams() |
| 64 | +def handle(request: dict = {}, context: dict = {}): |
| 65 | + dry_run = request.get("dry_run", False) |
| 66 | + if "dry_run" in request and not isinstance(dry_run, bool): |
| 67 | + raise ValueError(f"'dry_run' is not a boolean value, {request}") |
| 68 | + |
| 69 | + delete_empty_log_streams(dry_run) |
0 commit comments