def update_channels(apps, schema_editor): Crash = apps.get_model("crash", "Crash") crashes = Crash.objects.all().exclude(build_number='') crashes = crashes.exclude(os='').iterator() for obj in crashes: obj.channel = get_channel(obj.build_number, obj.os) obj.save()
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) _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_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 test_invalid_build_number(self): version = self.factory() build_number = "%s-devel" % self.get_number_version(version) channel = get_channel(build_number, self.os) self.assertEqual(channel, 'undefined')
def test_not_version(self): build_number = '0.0.0.1' channel = get_channel(build_number, self.os) self.assertEqual(channel, 'undefined')
def test_ambiguity(self): version = self.factory.create_batch(2)[0] build_number = self.get_number_version(version) channel = get_channel(build_number, self.os) self.assertEqual(channel, 'undefined')
def test_version(self): version = self.factory() build_number = self.get_number_version(version) channel = get_channel(build_number, self.os) self.assertEqual(channel, version.channel.name)