def get(self, package_name, report_id): group = CrashReportGroup.get_group(package_name) report = CrashReport.get_by_id(long(report_id), parent=group.key) template_values = { 'report': report, } path = os.path.join(os.path.dirname(__file__), 'templates/crashreport.html') self.response.out.write(template.render(path, template_values))
def delete(self, package_name, report_id): group = CrashReportGroup.get_group(package_name) report = CrashReport.get_by_id(long(report_id), parent=group.key) self.response.headers['Content-Type'] = 'text/plain' #self.redirect('/reports/package/' + package_name) if report: report.key.delete() self.response.write('Report %d deleted' % report.key.id()) else: self.response.set_status(404) self.response.write('Invalid report')
def parse_crash_report(self, request): # Get or create the parent report group for this crash report package_name = request.get('PACKAGE_NAME') report_group = CrashReportGroup.get_group(package_name) # Create a new crash report report = CrashReport(parent=report_group.key) # Parse POST body report.package_name = package_name report.android_version = request.get('ANDROID_VERSION') report.app_version_code = request.get('APP_VERSION_CODE') report.app_version_name = request.get('APP_VERSION_NAME') report.available_mem_size = request.get('AVAILABLE_MEM_SIZE') report.brand = request.get('BRAND') report.build = request.get('BUILD') report.crash_configuration = request.get('CRASH_CONFIGURATION') report.device_features = request.get('DEVICE_FEATURES') report.display = request.get('DISPLAY') report.environment = request.get('ENVIRONMENT') report.file_path = request.get('FILE_PATH') report.initial_configuration = request.get('INITIAL_CONFIGURATION') report.installation_id = request.get('INSTALLATION_ID') report.model = request.get('PHONE_MODEL') report.product = request.get('PRODUCT') report.report_id = request.get('REPORT_ID') report.settings_secure = request.get('SETTINGS_SECURE') report.settings_system = request.get('SETTINGS_SYSTEM') report.shared_preferences = request.get('SHARED_PREFERENCES') report.total_mem_size = request.get('TOTAL_MEM_SIZE') # Coerce date strings into parseable format start_date = dateparser.parse(request.get('USER_APP_START_DATE'), ignoretz=True) crash_date = dateparser.parse(request.get('USER_CRASH_DATE'), ignoretz=True) report.user_app_start_date = start_date report.user_crash_date = crash_date # If this crash report's timestamp is more recent than its parent's # latest crash date, update the parent group if report_group.latest_crash_date == None or report.user_crash_date > report_group.latest_crash_date: report_group.latest_crash_date = report.user_crash_date report_group.put() # Parse stack trace / summary stack_trace = request.get('STACK_TRACE') report.stack_trace = stack_trace summary = self.get_stack_summary(stack_trace, report.package_name) report.stack_summary = summary[:500] return report