示例#1
0
def index(request):

    if (request.method == "PUT" or request.method == "POST"):
        #log.log(logging.DEBUG, "got put "+ str(request.body) )
        json_data = json.loads(request.body)
        description = ""
        if (json_data.has_key("description")):
            description = json_data["description"]

        DEBUG = json_data['APP_VERSION_CODE'] == 10509999
        if DEBUG:
            log.log(logging.DEBUG,
                    "REQUEST:: %s" % json_data['APP_VERSION_CODE'])

        notallow = ["description", "solved", SESSION_NAME]
        crashreport = CrashReport()
        for key in json_data.keys():
            #if (DEBUG):
            #	log.log(logging.DEBUG, "Key: %s in POST" % (key) )
            if (not key.lower() in notallow):
                if (getattr(crashreport, key.lower(), None) != None):
                    #if(DEBUG):
                    #	log.log(logging.DEBUG, "ADDING %s -> %s" % (key.lower(),json_data[key]) )
                    v = getattr(crashreport, key.lower(), None)
                    if (v != None):
                        setattr(crashreport, key.lower(), json_data[key])
        crashreport.save()

    return HttpResponse(json.dumps({"ok": "true"}),
                        content_type="application/json")
示例#2
0
文件: views.py 项目: wrestrtdr/grm
def error(request):
    if request.method == "POST":
        data = json.loads(request.body)
        try:
            if CrashReport.objects.filter(summary=data["summary"]):
                return JsonResponse({
                    'message':
                    'Your crash report has already been submitted.'
                    ' Developers will take care of it as soon as possible.'
                })
            c = CrashReport(summary=data["summary"],
                            trace=data["trace"],
                            version=data["version"],
                            arch=data["arch"],
                            report=data["report"])
            c.save()
            return JsonResponse(
                {'message': 'Your crash report was submitted successfully.'})
        except:
            return JsonResponse(
                {
                    'message':
                    'An unspecified server error occurred and your '
                    'crash report couldn\'t be submitted. Please submit manually '
                    'to the developers!'
                },
                status='500')
    return JsonResponse({})
示例#3
0
def crashreport(request, cr, co):
	try:
		c = CrashReport(report=cr, comments=co)
		c.save()
		get_reqno()
		a = {'status': 200, 'info': 'Your crash report was submitted successfully.'}
	except:
		a = {'status': 500, 'info': 'An unspecified server error occurred and your crash report couldn\'t be submitted. Please submit manually to the developers!'}
	return HttpResponse(json.dumps(a), content_type='application/json')
示例#4
0
def crashreporter_send_log():
	# Only registered users can submit crash reports
	if not session.has_key('betauser'):
		abort(404)

	data = request.stream.read()

	# Add the report to the datastore
	cr = CrashReport(data=data, user=g.betauser)
	cr.put()

	return ''
示例#5
0
def save_report(payload):
    params = payload.get("HQ Parameters")
    # Find the user associated with the API key and the group they belong to.
    # If that group exists, add the report to the group
    api_key = params.get("api_key", None)
    user = User.query.filter(User.api_key == api_key).first()
    if user is not None:
        cr = CrashReport(**payload)
        if user.group:
            user.group.add_report(cr)

        cr.commit()

        return cr, "Success"
    else:
        return None, "Invalid or missing API Key."
示例#6
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):
        reports = CrashReport.for_package(package_name)

        template_values = {
            'reports': reports,
        }
        
        path = os.path.join(os.path.dirname(__file__), 'templates/list.html')
        return self.response.write(template.render(path, template_values))
示例#8
0
    def get(self, report_id):
        report = CrashReport.get_by_id(long(report_id))

        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 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))
示例#10
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')
示例#11
0
文件: views.py 项目: cznweb/arkos-grm
def error(request):
    if request.method == "POST":
        data = json.loads(request.body)
        try:
            if CrashReport.objects.filter(summary=data["summary"]):
                return JsonResponse({
                    'message': 'Your crash report has already been submitted.'
                    ' Developers will take care of it as soon as possible.'})
            c = CrashReport(
                summary=data["summary"], trace=data["trace"],
                version=data["version"], arch=data["arch"],
                report=data["report"])
            c.save()
            return JsonResponse({
                'message': 'Your crash report was submitted successfully.'})
        except:
            return JsonResponse({
                'message': 'An unspecified server error occurred and your '
                'crash report couldn\'t be submitted. Please submit manually '
                'to the developers!'},
                status='500')
    return JsonResponse({})
示例#12
0
def crashreporter_fetch_unsymbolicated():
    query = CrashReport.all()
    query.filter('symbolicated !=', True)
    reports = query.fetch(100)

    if len(reports) == 0:
        return ''

    memzip = cStringIO.StringIO()
    zf = zipfile.ZipFile(memzip, 'w')
    for report in reports:
        zf.writestr(str(report.key()), report.data)
    zf.close()

    return Response(memzip.getvalue(), mimetype='application/zip')
示例#13
0
def crashreporter_push_symbolicated():
    data = request.stream.read()
    buf = cStringIO.StringIO(data)
    zf = zipfile.ZipFile(buf, 'r')
    for i in zf.infolist():
        key, ext = os.path.splitext(i.filename)
        contents = zf.read(i.filename)
        cr = CrashReport.get(key)
        if cr is not None:
            if ext == '' and not cr.symbolicated:
                cr.symbolicated = True
                cr.symbolicated_data = contents
            elif ext == '.plist':
                d = BPlistReader.plistWithString(contents)
                query = BetaRelease.all()
                query.filter('gitrev =', d.get('MumbleGitRevision', None))
                query.filter('build_date =', d.get('MumbleBuildDate', None))
                br = query.get()
                if br is not None:
                    cr.betarelease = br
            cr.save()
    zf.close()

    return ''
示例#14
0
def view_crashreport(key):
    cr = CrashReport.get(key)
    if cr is None:
        abort(404)
    return Response(cr.symbolicated_data, mimetype='text/plain')
示例#15
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
示例#16
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
示例#17
0
def view_crashreport_listing():
    query = CrashReport.all()
    query.filter('symbolicated =', True)
    reports = query.fetch(150)
    return render_template('crashreport-list.html', reports=reports)