Esempio n. 1
0
 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()
Esempio n. 2
0
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"]
Esempio n. 3
0
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
Esempio n. 4
0
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)
    ]
Esempio n. 5
0
def test_send_batch_empty():
    assert not LogsManager.get_manager().send_batch()
Esempio n. 6
0
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()
Esempio n. 7
0
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()
Esempio n. 8
0
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()
Esempio n. 9
0
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()
Esempio n. 10
0
def test_send_batch_if_needed_no_send(record):
    logs = LogsManager.get_manager()
    assert not logs.send_batch_if_needed()
Esempio n. 11
0
def test_add_records_no_logs():
    assert not LogsManager.get_manager().add_records([])