def testCreateNewOoid(self): ooid = oo.createNewOoid() ndate = oo.dateFromOoid(ooid) ndepth = oo.depthFromOoid(ooid) assert self.nowstamp == ndate, 'Expect date of %s, got %s' %(self.nowstamp,ndate) assert oo.defaultDepth == ndepth, 'Expect default depth (%d) got %d' % (oo.defaultDepth,ndepth) ooid = oo.createNewOoid(timestamp=self.xmas05) ndate = oo.dateFromOoid(ooid) ndepth = oo.depthFromOoid(ooid) assert self.xmas05 == ndate, 'Expect date of %s, got %s' %(self.xmas05,ndate) assert oo.defaultDepth == ndepth, 'Expect default depth (%d) got %d' % (oo.defaultDepth,ndepth) for d in range(1,5): ooid0 = oo.createNewOoid(depth=d) ooid1 = oo.createNewOoid(timestamp=self.xmas05,depth=d) ndate0 = oo.dateFromOoid(ooid0) ndepth0 = oo.depthFromOoid(ooid0) ndate1 = oo.dateFromOoid(ooid1) ndepth1 = oo.depthFromOoid(ooid1) assert self.nowstamp == ndate0, 'Expect date of %s, got %s' %(self.nowstamp,ndate0) assert self.xmas05 == ndate1, 'Expect date of %s, got %s' %(self.xmas05,ndate1) assert ndepth0 == ndepth1, 'Expect depth0(%d) == depth1(%d)' %(ndepth0,ndepth1) assert d == ndepth0, 'Expect depth %d, got %d' % (d,ndepth0) assert None == oo.depthFromOoid(self.badooid0) assert None == oo.depthFromOoid(self.badooid1)
def POST(self, *args): raw_crash, dumps = self._get_raw_crash_from_form() current_timestamp = utc_now() raw_crash.submitted_timestamp = current_timestamp.isoformat() # legacy - ought to be removed someday raw_crash.timestamp = time.time() if (not self.config.accept_submitted_crash_id or 'crash_id' not in raw_crash ): crash_id = createNewOoid(current_timestamp) raw_crash.crash_id = crash_id self.logger.info('%s received', crash_id) else: crash_id = raw_crash.crash_id self.logger.info('%s received with existing crash_id:', crash_id) raw_crash.type_tag = self.type_tag self.crash_storage.save_raw_crash( raw_crash, dumps, crash_id ) self.logger.info('%s accepted', crash_id) return "CrashID=%s%s\n" % (self.type_tag, crash_id)
def POST(self, *args): raw_crash, dumps = self._get_raw_crash_from_form() current_timestamp = utc_now() raw_crash.submitted_timestamp = current_timestamp.isoformat() # legacy - ought to be removed someday raw_crash.timestamp = time.time() if (not self.accept_submitted_crash_id or 'uuid' not in raw_crash): crash_id = createNewOoid(current_timestamp) raw_crash.uuid = crash_id self.logger.info('%s received', crash_id) else: crash_id = raw_crash.uuid self.logger.info('%s received with existing crash_id:', crash_id) if ('legacy_processing' not in raw_crash or not self.accept_submitted_legacy_processing): raw_crash.legacy_processing, raw_crash.throttle_rate = ( self.throttler.throttle(raw_crash)) else: raw_crash.legacy_processing = int(raw_crash.legacy_processing) if raw_crash.legacy_processing == DISCARD: self.logger.info('%s discarded', crash_id) return "Discarded=1\n" if raw_crash.legacy_processing == IGNORE: self.logger.info('%s ignored', crash_id) return "Unsupported=1\n" raw_crash.type_tag = self.dump_id_prefix.strip('-') self.crash_storage.save_raw_crash(raw_crash, dumps, crash_id) self.logger.info('%s accepted', crash_id) return "CrashID=%s%s\n" % (self.dump_id_prefix, crash_id)
def POST(self, *args): raw_crash, dumps = self._get_raw_crash_from_form() current_timestamp = utc_now() raw_crash.submitted_timestamp = current_timestamp.isoformat() # legacy - ought to be removed someday raw_crash.timestamp = time.time() if (not self.accept_submitted_crash_id or 'uuid' not in raw_crash): crash_id = createNewOoid(current_timestamp) raw_crash.uuid = crash_id self.logger.info('%s received', crash_id) else: crash_id = raw_crash.uuid self.logger.info('%s received with existing crash_id:', crash_id) if ('legacy_processing' not in raw_crash or not self.accept_submitted_legacy_processing): raw_crash.legacy_processing, raw_crash.throttle_rate = ( self.throttler.throttle(raw_crash)) else: raw_crash.legacy_processing = int(raw_crash.legacy_processing) try: # We want to capture the crash report size, but need to # differentiate between compressed vs. uncompressed data as well as # accepted vs. rejected data. crash_report_size = self._get_content_length() is_compressed = self._is_content_gzipped() is_accepted = (raw_crash.legacy_processing in (ACCEPT, DEFER)) metrics_data = {} size_key = '_'.join([ 'crash_report_size', 'accepted' if is_accepted else 'rejected', 'compressed' if is_compressed else 'uncompressed', ]) metrics_data = {size_key: crash_report_size} self.metrics.capture_stats(metrics_data) except Exception: # We *never* want metrics reporting to prevent saving a crash, so # we catch everything and log an error. self.logger.error('metrics kicked up exception', exc_info=True) if raw_crash.legacy_processing == DISCARD: self.logger.info('%s discarded', crash_id) return "Discarded=1\n" if raw_crash.legacy_processing == IGNORE: self.logger.info('%s ignored', crash_id) return "Unsupported=1\n" raw_crash.type_tag = self.dump_id_prefix.strip('-') # Save crash to storage. self.crash_storage.save_raw_crash(raw_crash, dumps, crash_id) # Return crash id to http client. self.logger.info('%s accepted', crash_id) return "CrashID=%s%s\n" % (self.dump_id_prefix, crash_id)
def POST(self, *args): raw_crash, dumps = self._get_raw_crash_from_form() current_timestamp = utc_now() raw_crash.submitted_timestamp = current_timestamp.isoformat() # legacy - ought to be removed someday raw_crash.timestamp = time.time() if (not self.accept_submitted_crash_id or 'uuid' not in raw_crash): crash_id = createNewOoid(current_timestamp) raw_crash.uuid = crash_id self.logger.info('%s received', crash_id) else: crash_id = raw_crash.uuid self.logger.info('%s received with existing crash_id:', crash_id) if ('legacy_processing' not in raw_crash or not self.accept_submitted_legacy_processing ): raw_crash.legacy_processing, raw_crash.throttle_rate = ( self.throttler.throttle(raw_crash) ) else: raw_crash.legacy_processing = int(raw_crash.legacy_processing) if raw_crash.legacy_processing == DISCARD: self.logger.info('%s discarded', crash_id) return "Discarded=1\n" if raw_crash.legacy_processing == IGNORE: self.logger.info('%s ignored', crash_id) return "Unsupported=1\n" raw_crash.type_tag = self.dump_id_prefix.strip('-') self.crash_storage.save_raw_crash( raw_crash, dumps, crash_id ) self.logger.info('%s accepted', crash_id) return "CrashID=%s%s\n" % (self.dump_id_prefix, crash_id)
def POST(self, *args): raw_crash, dumps = self._get_raw_crash_from_form() current_timestamp = utc_now() raw_crash.submitted_timestamp = current_timestamp.isoformat() # legacy - ought to be removed someday raw_crash.timestamp = time.time() if (not self.accept_submitted_crash_id or 'uuid' not in raw_crash): crash_id = createNewOoid(current_timestamp) raw_crash.uuid = crash_id self.logger.info('%s received', crash_id) else: crash_id = raw_crash.uuid self.logger.info('%s received with existing crash_id:', crash_id) if ('legacy_processing' not in raw_crash or not self.accept_submitted_legacy_processing ): raw_crash.legacy_processing, raw_crash.throttle_rate = ( self.throttler.throttle(raw_crash) ) else: raw_crash.legacy_processing = int(raw_crash.legacy_processing) try: # We want to capture the crash report size, but need to # differentiate between compressed vs. uncompressed data as well as # accepted vs. rejected data. crash_report_size = self._get_content_length() is_compressed = self._is_content_gzipped() is_accepted = (raw_crash.legacy_processing in (ACCEPT, DEFER)) metrics_data = {} size_key = '_'.join([ 'crash_report_size', 'accepted' if is_accepted else 'rejected', 'compressed' if is_compressed else 'uncompressed', ]) metrics_data = { size_key: crash_report_size } self.metrics.capture_stats(metrics_data) except Exception: # We *never* want metrics reporting to prevent saving a crash, so # we catch everything and log an error. self.logger.error( 'metrics kicked up exception', exc_info=True ) if raw_crash.legacy_processing == DISCARD: self.logger.info('%s discarded', crash_id) return "Discarded=1\n" if raw_crash.legacy_processing == IGNORE: self.logger.info('%s ignored', crash_id) return "Unsupported=1\n" raw_crash.type_tag = self.dump_id_prefix.strip('-') # Save crash to storage. self.crash_storage.save_raw_crash( raw_crash, dumps, crash_id ) # Return crash id to http client. self.logger.info('%s accepted', crash_id) return "CrashID=%s%s\n" % (self.dump_id_prefix, crash_id)