crashclouseau/html.py (121 lines of code) (raw):

# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this file, # You can obtain one at http://mozilla.org/MPL/2.0/. from flask import request, render_template, abort, redirect import json from libmozdata.hgmozilla import Mercurial from . import utils, models, report_bug from .logger import logger from .pushlog import pushlog_for_buildid_url, pushlog_for_rev_url def crashstack(): uuid = request.args.get("uuid", "") stack, uuid_info = models.CrashStack.get_by_uuid(uuid) if uuid_info: channel = uuid_info["channel"] repo_url = Mercurial.get_repo_url(channel) sgn_url = utils.make_url_for_signature( uuid_info["signature"], uuid_info["buildid"], utils.get_buildid(uuid_info["buildid"]), channel, uuid_info["product"], ) return render_template( "crashstack.html", uuid_info=uuid_info, stack=stack, colors=utils.get_colors(), enumerate=enumerate, repo_url=repo_url, channel=channel, sgn_url=sgn_url, ) abort(404) def reports(): try: prod = request.args.get("product", "Firefox") channel = request.args.get("channel", "nightly") buildid = request.args.get("buildid", "") products = models.UUID.get_buildids() if not buildid: buildid = products[prod][channel][0][0] signatures = models.UUID.get_uuids_from_buildid(buildid, prod, channel) return render_template( "reports.html", buildids=json.dumps(products), products=products, selected_product=prod, selected_channel=channel, selected_bid=buildid, signatures=signatures, colors=utils.get_colors(), ) except Exception: logger.error("Invalid URL: {}".format(request.url), exc_info=True) abort(404) def reports_no_score(): try: prod = request.args.get("product", "Firefox") channel = request.args.get("channel", "nightly") buildid = request.args.get("buildid", "") products = models.UUID.get_buildids(no_score=True) if not buildid: buildid = products[prod][channel][0][0] signatures = models.UUID.get_uuids_from_buildid_no_score(buildid, prod, channel) return render_template( "reports_no_score.html", buildids=json.dumps(products), products=products, selected_product=prod, selected_channel=channel, selected_bid=buildid, signatures=signatures, ) except Exception: logger.error("Invalid URL: {}".format(request.url), exc_info=True) abort(404) def diff(): filename = request.args.get("filename", "") line = request.args.get("line", "") style = request.args.get("style", "file") node = request.args.get("node", "") changeset = request.args.get("changeset", "") channel = request.args.get("channel", "") repo_url = Mercurial.get_repo_url(channel) annotate_url = "{}/{}/{}/{}#l{}".format(repo_url, style, node, filename, line) diff_url = "{}/diff/{}/{}".format(repo_url, changeset, filename) return render_template( "diff.html", changeset=changeset, filename=filename, annotate_url=annotate_url, diff_url=diff_url, ) def bug(): uuid = request.args.get("uuid", "") changeset = request.args.get("changeset", "") if uuid and changeset: url, ni, signature, bugdata = report_bug.get_info(uuid, changeset) bugdata = sorted(bugdata.items()) return render_template( "bug.html", uuid=uuid, url=url, needinfo=ni, bugdata=bugdata, signature=signature, ) abort(404) def pushlog(): url = "" buildid = request.args.get("buildid", "") if buildid: channel = request.args.get("channel", "nightly") product = request.args.get("product", "Firefox") url = pushlog_for_buildid_url(buildid, channel, product) else: rev = request.args.get("rev", "") if rev: channel = request.args.get("channel", "nightly") product = request.args.get("product", "Firefox") url = pushlog_for_rev_url(rev, channel, product) if url: return redirect(url) abort(404)