Coverage for chalicelib/core/log_tools/cloudwatch.py: 42%

58 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-10-10 12:56 +0000

1import boto3 

2from chalicelib.core.log_tools import log_tools 

3from schemas import schemas 

4 

5IN_TY = "cloudwatch" 

6 

7 

8def __find_groups(client, token): 

9 d_args = { 

10 "limit": 50 

11 } 

12 if token is not None: 

13 d_args["nextToken"] = token 

14 response = client.describe_log_groups(**d_args) 

15 response["logGroups"] = [i['logGroupName'] for i in response["logGroups"]] 

16 if "nextToken" not in response: 

17 return response["logGroups"] 

18 

19 return response["logGroups"] + __find_groups(client, response["nextToken"]) 

20 

21 

22def __find_streams(project_id, log_group, client, token, stream_filter): 

23 d_args = {"logGroupName": log_group, "orderBy": 'LastEventTime', 'limit': 50} 

24 if token is not None and len(token) > 0: 

25 d_args["nextToken"] = token 

26 data = client.describe_log_streams(**d_args) 

27 streams = list(filter(stream_filter, data['logStreams'])) 

28 if 'nextToken' not in data: 

29 save_new_token(project_id=project_id, token=token) 

30 return streams 

31 return streams + __find_streams(project_id, log_group, client, data['nextToken'], stream_filter) 

32 

33 

34def __find_events(client, log_group, streams, last_token, start_time, end_time): 

35 f_args = { 

36 "logGroupName": log_group, 

37 "logStreamNames": streams, 

38 "startTime": start_time, 

39 "endTime": end_time, 

40 "limit": 10000, 

41 "filterPattern": "openreplay_session_id" 

42 } 

43 if last_token is not None: 

44 f_args["nextToken"] = last_token 

45 response = client.filter_log_events( 

46 **f_args 

47 ) 

48 if "nextToken" not in response: 

49 return response["events"] 

50 

51 return response["events"] + __find_events(client, log_group, streams, response["nextToken"], start_time, end_time) 

52 

53 

54def list_log_groups(aws_access_key_id, aws_secret_access_key, region): 

55 logs = boto3.client('logs', aws_access_key_id=aws_access_key_id, 

56 aws_secret_access_key=aws_secret_access_key, 

57 region_name=region 

58 ) 

59 return __find_groups(logs, None) 

60 

61 

62def get_all(tenant_id): 

63 return log_tools.get_all_by_tenant(tenant_id=tenant_id, integration=IN_TY) 

64 

65 

66def get(project_id): 

67 return log_tools.get(project_id=project_id, integration=IN_TY) 

68 

69 

70def update(tenant_id, project_id, changes): 

71 options = {} 

72 if "authorization_token" in changes: 72 ↛ 73line 72 didn't jump to line 73 because the condition on line 72 was never true

73 options["authorization_token"] = changes.pop("authorization_token") 

74 if "project_id" in changes: 74 ↛ 75line 74 didn't jump to line 75 because the condition on line 74 was never true

75 options["project_id"] = changes.pop("project_id") 

76 if len(options.keys()) > 0: 76 ↛ 77line 76 didn't jump to line 77 because the condition on line 76 was never true

77 changes["options"] = options 

78 return log_tools.edit(project_id=project_id, integration=IN_TY, changes=changes) 

79 

80 

81def add(tenant_id, project_id, aws_access_key_id, aws_secret_access_key, log_group_name, region): 

82 return log_tools.add(project_id=project_id, integration=IN_TY, 

83 options={"awsAccessKeyId": aws_access_key_id, 

84 "awsSecretAccessKey": aws_secret_access_key, 

85 "logGroupName": log_group_name, "region": region}) 

86 

87 

88def save_new_token(project_id, token): 

89 update(tenant_id=None, project_id=project_id, changes={"last_token": token}) 

90 

91 

92def delete(tenant_id, project_id): 

93 return log_tools.delete(project_id=project_id, integration=IN_TY) 

94 

95 

96def add_edit(tenant_id, project_id, data: schemas.IntegrationCloudwatchSchema): 

97 s = get(project_id) 

98 if s is not None: 

99 return update(tenant_id=tenant_id, project_id=project_id, 

100 changes={"awsAccessKeyId": data.aws_access_key_id, 

101 "awsSecretAccessKey": data.aws_secret_access_key, 

102 "logGroupName": data.log_group_name, 

103 "region": data.region}) 

104 else: 

105 return add(tenant_id=tenant_id, 

106 project_id=project_id, 

107 aws_access_key_id=data.aws_access_key_id, 

108 aws_secret_access_key=data.aws_secret_access_key, 

109 log_group_name=data.log_group_name, 

110 region=data.region)