Esempio n. 1
0
    def get(self, package_name, trace_id):
        group = CrashReportGroup.get_by_id(package_name)
        if not group:
            self.response.status = 404
            self.response.write("Not found")
            return

        trace = CrashReportTrace.get_by_id(trace_id, parent=group.key)
        if not trace:
            self.response.status = 404
            self.response.write("Not found")
            return

        trace = add_ts("created_at", trace, ts = "created_ts")

        reports = CrashReport.for_trace(package_name, trace_id)
        reports = map(partial(add_ts, "created_at"), reports)
        reports = map(partial(add_ts, "user_crash_date", ts = "crash_ts"), reports)
        reports.sort(lambda x,y: y.ts - x.ts)

        template_values = {
            'report':  trace,
            'reports': reports,
        }

        path = os.path.join(os.path.dirname(__file__), 'templates/publicreport.html')
        self.response.out.write(template.render(path, template_values))
    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))
Esempio n. 3
0
 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 get(self):
        # Build a dictionary of crash reports as {report.package_name: report}
        query = CrashReportGroup.query()
        pairs = query.map(lambda x: (x.package_name, x.report_count()))
        reports = {k: v for (k, v) in pairs}

        template_values = {
            'reports': reports,
        }

        path = os.path.join(os.path.dirname(__file__), 'templates/package_list.html')
        return self.response.write(template.render(path, template_values))
Esempio n. 5
0
    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
Esempio n. 6
0
    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