def processing_crash_dump(self, crash_pk): try: crash = Crash.objects.get(pk=crash_pk) url = furl(crash.upload_file_minidump.url) path = url.pathstr crash_dump_path = os.path.join(S3_MOUNT_PATH, *path.split('/')) stacktrace, errors = get_stacktrace(crash_dump_path) crash.stacktrace = stacktrace crash.stacktrace_json = parse_stacktrace(stacktrace) crash.signature = get_signature(crash.stacktrace_json) crash.save() send_stacktrace_sentry(crash) except FileNotFoundError as exc: logger.error( 'Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise self.retry( exc=exc, countdown=2**processing_crash_dump.request.retries) except CommandError as exc: logger.error( 'Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise exc
def test_get_stacktrace(self): with open(STACKTRACE_PATH, 'rb') as f: stacktrace = f.read() rezult, stderr = get_stacktrace(CRASH_DUMP_PATH) self.assertEqual(bytes(rezult.stdout, 'utf8'), stacktrace)
def processing_crash_dump(self, crash_pk): try: crash = Crash.objects.get(pk=crash_pk) url = furl(crash.upload_file_minidump.url) path = url.pathstr crash_dump_path = os.path.join(S3_MOUNT_PATH, *path.split('/')) stacktrace, errors = get_stacktrace(crash_dump_path) crash.stacktrace = stacktrace crash.stacktrace_json = parse_stacktrace(stacktrace) crash.signature = get_signature(crash.stacktrace_json) crash.os = get_os(crash.stacktrace_json) crash.build_number = crash.meta.get('ver') crash.save() send_stacktrace_sentry(crash) except FileNotFoundError as exc: logger.error('Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise self.retry(exc=exc, countdown=2 ** processing_crash_dump.request.retries) except CommandError as exc: logger.error('Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise exc
def processing_crash_dump(self, crash_pk): try: crash = Crash.objects.get(pk=crash_pk) # assemble crash_dump_path url = furl(crash.upload_file_minidump.url) path = url.pathstr crash_dump_path = os.path.join(S3_MOUNT_PATH, *path.split('/')) # Set various values in the crash object. stacktrace = get_stacktrace(crash_dump_path) crash.stacktrace = stacktrace crash.stacktrace_json = parse_stacktrace(stacktrace) crash.signature = get_signature(crash.stacktrace_json) _os = get_os(crash.stacktrace_json) meta = crash.meta or {} build_number = meta.get('ver', '') channel = meta.get('channel', '') or get_channel(build_number, _os) crash.os = _os crash.build_number = build_number crash.channel = channel crash.save() # Send the crash to the configured logger. send_stacktrace(crash) except FileNotFoundError as exc: logger.error('Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise self.retry(exc=exc, countdown=2**processing_crash_dump.request.retries) except CommandError as exc: logger.error('Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise exc
def processing_crash_dump(self, crash_pk): try: crash = Crash.objects.get(pk=crash_pk) # assemble crash_dump_path url = furl(crash.upload_file_minidump.url) path = url.pathstr crash_dump_path = os.path.join(S3_MOUNT_PATH, *path.split('/')) # Set various values in the crash object. stacktrace = get_stacktrace(crash_dump_path) crash.stacktrace = stacktrace crash.stacktrace_json = parse_stacktrace(stacktrace) crash.signature = get_signature(crash.stacktrace_json) _os = get_os(crash.stacktrace_json) meta = crash.meta or {} build_number = meta.get('ver', '') channel = meta.get('channel', '') or get_channel(build_number, _os) crash.os = _os crash.build_number = build_number crash.channel = channel crash.save() # Send the crash to the configured logger. send_stacktrace(crash) except FileNotFoundError as exc: logger.error('Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise self.retry(exc=exc, countdown=2 ** processing_crash_dump.request.retries) except CommandError as exc: logger.error('Failed processing_crash_dump', exc_info=True, extra=dict(crash_pk=crash_pk, crash_dump_path=crash_dump_path)) raise exc