mirror of
https://github.com/jlengrand/bugsink.git
synced 2026-03-10 08:01:17 +00:00
minidump after-digest cleanup
envelope-based happy path only
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import contextlib
|
||||
import os
|
||||
import logging
|
||||
import json
|
||||
@@ -17,10 +18,12 @@ def digest(event_id, event_metadata):
|
||||
|
||||
with open(get_filename_for_event_id(event_id), "rb") as f:
|
||||
event_data = json.loads(f.read().decode("utf-8"))
|
||||
opened = [get_filename_for_event_id(event_id)]
|
||||
|
||||
if event_metadata.get("has_minidump"):
|
||||
with open(get_filename_for_event_id(event_id, filetype="minidump"), "rb") as f:
|
||||
minidump_bytes = f.read()
|
||||
opened += [get_filename_for_event_id(event_id, filetype="minidump")]
|
||||
else:
|
||||
minidump_bytes = None
|
||||
|
||||
@@ -29,11 +32,10 @@ def digest(event_id, event_metadata):
|
||||
except ValidationError as e:
|
||||
logger.warning("ValidationError in digest_event", exc_info=e)
|
||||
finally:
|
||||
# NOTE: if an SDK misbehaves, and sends the same event_id multiple times in quick succession, the line below
|
||||
# will trigger a FileNotFoundError on the second attempt to delete the file (the files also overwrite each other
|
||||
# on-ingest). In that case your logs will also a "ValidationError in digest_event". Although that means an error
|
||||
# bubbles up from the below, at least for now I'm OK with that. (next steps _could_ be: [a] catching the error
|
||||
# as expected [b] refusing to "just overwrite and doubly enqueue on-ingest" [c] reporting about this particular
|
||||
# problem to the end-user etc... but at least "getting it really right" might actually be quite hard (race
|
||||
# conditions) and I'm not so sure it's worth it.
|
||||
os.unlink(get_filename_for_event_id(event_id))
|
||||
# NOTE: if an SDK misbehaves, and sends the same event_id multiple times in quick succession, the os.unlink
|
||||
# below will trigger a FileNotFoundError on the second attempt to delete the file (the events also overwrite
|
||||
# each other on-ingest, but that's separately dealt with, showing a "ValidationError in digest_event". We're
|
||||
# just catching those and ignoring them (bubble-up is not desirable because it hinders follow-up cleanups)
|
||||
for filename in opened:
|
||||
with contextlib.suppress(FileNotFoundError):
|
||||
os.unlink(filename)
|
||||
|
||||
Reference in New Issue
Block a user