def test_get_task_details(self): from osbot_aws.apis.Logs import Logs def find_starts(array, text): return [item for item in array if item.startswith(text)] def find_in(array, text): return [item for item in array if text in item] #build_id = 'OSBot-Jupyter:a553dda5-953a-41b8-ae91-e068cba4f56b' result = self.api.code_build.project_builds_ids(self.api.project_name) build_id = result.__next__() # get last one build_info = self.api.code_build.build_info(build_id) group_name = build_info.get('logs').get('groupName') stream_name = build_info.get('logs').get('streamName') #Dev.pprint(group_name,stream_name) logs = Logs(group_name=group_name, stream_name=stream_name) messages = logs.messages() #ngrok_messages = find_starts(messages,'t=') ngrok_url = find_in( messages, 'name=command_line addr')[0].split('url=')[1].strip() jupyter_token = find_in(messages, 'token=')[0].split('token=')[1].strip() Dev.pprint("{0}?token={1}".format(ngrok_url, jupyter_token))
def run(event, context): group_name = event.get('group_name' ) stream_name = event.get('stream_name') message = event.get('message' ) logs = Logs(group_name=group_name, stream_name=stream_name) return logs.event_add(message)
def _test_lambda_write_cloud_watch__with_asserts(self): group_name = '/unit-tests/test_log_group' stream_name = Misc.random_string_and_numbers(prefix='tmp_stream_') message = 'this is a message sent from an lambda function' lambda_name = 'osbot_aws.lambdas.dev.write_cloud_watch_log' log_group_arn = 'arn:aws:logs:eu-west-2:244560807427:log-group:{0}*'.format( group_name) policy_name = 'temp_policy_for_lambda_write_cloud_watch' role_name = 'temp_role_for_lambda_invocation' policy_actions = ['logs:PutLogEvents'] logs = Logs(group_name=group_name, stream_name=stream_name) logs.group_create() logs.stream_create() iam_role = IAM(role_name=role_name) iam_policy = IAM_Policy(policy_name=policy_name) iam_policy.add_statement_allow(policy_actions, [log_group_arn]) policy_arn = iam_policy.create( delete_before_create=True).get('policy_arn') assert iam_policy.exists() is True assert iam_role.role_exists() is True assert logs.group_exists() is True assert logs.stream_exists() is True assert set(iam_role.role_policies()) == { 'AWSXrayWriteOnlyAccess', 'policy_temp_role_for_lambda_invocation' } iam_role.role_policy_attach(policy_arn) assert set(iam_role.role_policies()) == { 'AWSXrayWriteOnlyAccess', 'policy_temp_role_for_lambda_invocation', 'temp_policy_for_lambda_write_cloud_watch' } sleep(10) # wait for AWS to propagate role update payload = { 'group_name': group_name, 'stream_name': stream_name, 'message': message } lambda_obj = Lambda_Package(lambda_name) #.update_with_root_folder() result = lambda_obj.invoke(payload) sleep(1) # wait for Cloudwatch to update assert result.get('status') == 'ok' assert logs.messages() == [message] assert iam_policy.delete() is True assert logs.group_delete() is True assert logs.group_exists() is False assert set(iam_role.role_policies()) == { 'AWSXrayWriteOnlyAccess', 'policy_temp_role_for_lambda_invocation' }
def test_log_group_create_delete_exists_info(self): tmp_log_group = Misc.random_string_and_numbers( prefix='/unit-tests/test_log_group_') temp_logs = Logs(tmp_log_group, '') assert temp_logs.group_exists() is False assert temp_logs.group_create() is True assert temp_logs.group_exists() is True assert temp_logs.group_info().get('logGroupName') == tmp_log_group assert temp_logs.group_delete() == True assert temp_logs.group_exists() is False
def delete_temp_logs(self): all_groups = self.logs().groups_names() temp_ids = ['temp_lambda', 'osbot'] groups_to_delete = [] for temp_id in temp_ids: groups_to_delete.extend(list_filter_contains(all_groups, temp_id)) for group_to_delete in groups_to_delete: if Logs(group_name=group_to_delete).group_delete(): print(f'deleted cloudwatch group: {group_to_delete}') return groups_to_delete
def test_lambdas_cloud_watch_logs(self): with Temp_Lambda() as _: assert _.invoke() == 'hello None' log_name = '/aws/lambda/{0}'.format(_.name) logs = Logs(group_name=log_name) assert logs.group_exists() is True logs.stream_name = logs.streams()[0].get('logStreamName') sleep( 1.0 ) # wait for logs to be updated (0.5 has failed in CodeBuild) messages = logs.messages() assert len(messages) > 0 assert 'START RequestId: ' in messages.pop()
def test_lambda_write_cloud_watch(self): group_name = '/aws/lambda/unit-tests/test_log_group' stream_name = Misc.random_string_and_numbers(prefix='tmp_stream_') message = 'this is a message sent from an lambda function' lambda_name = 'osbot_aws.lambdas.dev.write_cloud_watch_log' logs = Logs(group_name=group_name, stream_name=stream_name).create() lambda_obj = Lambda_Package(lambda_name) payload = {'group_name': group_name, 'stream_name': stream_name, 'message': message} assert lambda_obj.invoke(payload).get('status') == 'ok' #sleep(0.8) # assert logs.messages() == ['this is a message sent from an lambda function'] assert logs.group_delete() is True
def logs(self): return Logs()
def build_log_messages(self): build_info = self.build_info() group_name = build_info.get('logs').get('groupName') stream_name = build_info.get('logs').get('streamName') logs = Logs(group_name=group_name, stream_name=stream_name) return logs.messages()
def setUp(self): self.logs = Logs(test_Logs.log_group, test_Logs.stream_name) self.logs.stream_create()
class test_Logs(TestCase): log_group = '/unit-tests/test_log_group' stream_name = 'tmp_stream' logs = Logs(log_group, stream_name) delete_on_exit = True @classmethod def setUpClass(cls): if test_Logs.delete_on_exit: assert test_Logs.logs.group_create() is True @classmethod def tearDownClass(cls): if test_Logs.delete_on_exit: assert test_Logs.logs.group_delete() is True def setUp(self): self.logs = Logs(test_Logs.log_group, test_Logs.stream_name) self.logs.stream_create() def test_events(self): assert self.logs.events().get('events') == [] message_1 = 'an message' message_2 = 'another message' result = self.logs.event_add(message_1) assert result.get('status') == 'ok' assert 'An error occurred (DataAlreadyAcceptedException)' in self.logs.event_add( 'an message').get('data') assert self.logs.event_add( message_2, sequence_token=result.get('nextSequenceToken')).get( 'status') == 'ok' max_attempts = 20 sleep_for = 0.5 for i in range(1, max_attempts): # wait for log events to be processed if len(self.logs.events().get('events')) == 2: break sleep(sleep_for) assert len(self.logs.events().get('events')) == 2 assert self.logs.messages() == [message_1, message_2] def test_log_group_create_delete_exists_info(self): tmp_log_group = Misc.random_string_and_numbers( prefix='/unit-tests/test_log_group_') temp_logs = Logs(tmp_log_group, '') assert temp_logs.group_exists() is False assert temp_logs.group_create() is True assert temp_logs.group_exists() is True assert temp_logs.group_info().get('logGroupName') == tmp_log_group assert temp_logs.group_delete() == True assert temp_logs.group_exists() is False def test_groups(self): assert len(list(self.logs.groups())) > 1 assert len(self.logs.groups()) > 10 def test_streams__exists_delete_create(self): assert self.logs.stream_exists( ) is True # log stream is created by setUpClass assert self.logs.streams().pop().get( 'logStreamName') == test_Logs.stream_name assert self.logs.stream_delete() is True assert self.logs.stream_delete() is False assert self.logs.streams() == [] assert self.logs.stream_create() is True assert self.logs.stream_create() is False
def log_group(self): return Logs(group_name=f'/aws/lambda/{self.name}')