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