openpilot is an open source driver assistance system. openpilot performs the functions of Automated Lane Centering and Adaptive Cruise Control for over 200 supported car makes and models.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.8 KiB

#!/usr/bin/env python3
5 years ago
import os
import time
from raven import Client
from raven.transport.http import HTTPTransport
from selfdrive.version import version, dirty
from selfdrive.swaglog import cloudlog
MAX_SIZE = 100000 * 10 # Normal size is 40-100k, allow up to 1M
5 years ago
def get_tombstones():
5 years ago
"""Returns list of (filename, ctime) for all tombstones in /data/tombstones"""
5 years ago
DIR_DATA = "/data/tombstones/"
return [(DIR_DATA + fn, int(os.stat(DIR_DATA + fn).st_ctime))
5 years ago
for fn in os.listdir(DIR_DATA) if fn.startswith("tombstone")]
5 years ago
def report_tombstone(fn, client):
f_size = os.path.getsize(fn)
if f_size > MAX_SIZE:
cloudlog.error(f"Tombstone {fn} too big, {f_size}. Skipping...")
5 years ago
with open(fn, encoding='ISO-8859-1') as f:
contents = f.read()
# Get summary for sentry title
message = " ".join(contents.split('\n')[5:7])
5 years ago
# Cut off pid/tid, since that varies per run
name_idx = message.find('name')
if name_idx >= 0:
message = message[name_idx:]
5 years ago
cloudlog.error({'tombstone': message})
5 years ago
client.captureMessage(
message=message,
sdk={'name': 'tombstoned', 'version': '0'},
extra={
'tombstone_fn': fn,
'tombstone': contents
5 years ago
},
)
def main():
5 years ago
initial_tombstones = set(get_tombstones())
client = Client('https://d3b175702f62402c91ade04d1c547e68:b20d68c813c74f63a7cdf9c4039d8f56@sentry.io/157615',
install_sys_hook=False, transport=HTTPTransport, release=version, tags={'dirty': dirty}, string_max_length=10000)
client.user_context({'id': os.environ.get('DONGLE_ID')})
while True:
now_tombstones = set(get_tombstones())
for fn, ctime in (now_tombstones - initial_tombstones):
cloudlog.info(f"reporting new tombstone {fn}")
5 years ago
report_tombstone(fn, client)
initial_tombstones = now_tombstones
time.sleep(5)
5 years ago
if __name__ == "__main__":
main()