def do_POST(self): with never_fail("parse logs event"): size = int(self.headers.get("Content-Length", "0")) records = json.loads(self.rfile.read(size)) get_logger().info(records) LogsManager.get_manager().add_records(records) self.send_response(200) self.end_headers()
def test_send_batch_some_failures(caplog, record): class TestHandler(LogsHandler): def handle_logs(self, records): 1 / 0 manager = LogsManager() manager.pending_logs.append(record) manager.send_batch() # No exception assert len([r for r in caplog.records if r.levelname == "ERROR"]) == 1 assert [r for r in caplog.records if r.levelname == "DEBUG"]
def extension_loop(extension_id): url = ( f"http://{os.environ['AWS_LAMBDA_RUNTIME_API']}/2020-01-01/extension/event/next" ) req = urllib.request.Request(url, headers={HEADERS_ID_KEY: extension_id}) while True: event = json.loads(urllib.request.urlopen(req).read()) with never_fail("Send initial logs"): get_logger().debug(f"Extension got event {event}") LogsManager.get_manager().send_batch_if_needed() if event.get("eventType") == "SHUTDOWN": with never_fail("send final batch"): LogsManager.get_manager().send_batch() break
def test_do_POST_happy_flow(logs_server_mock, monkeypatch, raw_record): monkeypatch.setattr( logs_server_mock, "rfile", BytesIO(b"[" + json.dumps(raw_record).encode() + b"]"), False, ) logs_server_mock.do_POST() assert LogsManager.get_manager().pending_logs == [ LogRecord.parse(raw_record) ]
def test_send_batch_empty(): assert not LogsManager.get_manager().send_batch()
def test_add_records_old_batch(raw_record, monkeypatch): monkeypatch.setattr(Configuration, "min_batch_time", -1) LogsManager.get_manager().add_records([raw_record]) assert LogsManager.get_manager().send_batch_if_needed()
def test_add_records_clear_after_send(raw_record): LogsManager.get_manager().add_records([raw_record] * (Configuration.min_batch_size + 1)) LogsManager.get_manager().send_batch_if_needed() assert not LogsManager.get_manager().send_batch_if_needed()
def test_send_batch_if_needed_big_time_gap(record): logs = LogsManager.get_manager() logs.last_sent_time = datetime.datetime.now() - datetime.timedelta( seconds=Configuration.min_batch_time + 1) assert logs.send_batch_if_needed()
def test_send_batch_if_needed_big_batch(record): logs = LogsManager.get_manager() logs.pending_logs_size = Configuration.min_batch_size + 1 assert logs.send_batch_if_needed()
def test_send_batch_if_needed_no_send(record): logs = LogsManager.get_manager() assert not logs.send_batch_if_needed()
def test_add_records_no_logs(): assert not LogsManager.get_manager().add_records([])