def signature_reports(request): '''Return the results of a search. ''' params = get_validated_params(request) if isinstance(params, http.HttpResponseBadRequest): # There was an error in the form, let's return it. return params signature = params['signature'][0] data = {} data['query'] = {'total': 0, 'total_count': 0, 'total_pages': 0} allowed_fields = get_allowed_fields(request.user) current_query = request.GET.copy() if 'page' in current_query: del current_query['page'] data['params'] = current_query.copy() if '_columns' in data['params']: del data['params']['_columns'] data['columns'] = request.GET.getlist('_columns') or DEFAULT_COLUMNS # Make sure only allowed fields are used data['columns'] = [x for x in data['columns'] if x in allowed_fields] try: current_page = int(request.GET.get('page', 1)) except ValueError: return http.HttpResponseBadRequest('Invalid page') if current_page <= 0: current_page = 1 results_per_page = 50 data['current_page'] = current_page data['results_offset'] = results_per_page * (current_page - 1) params['signature'] = '=' + signature params['_results_number'] = results_per_page params['_results_offset'] = data['results_offset'] params['_facets'] = [] # We don't need no facets. data['current_url'] = '%s?%s' % (reverse('signature:signature_report'), current_query.urlencode()) api = SuperSearchUnredacted() try: search_results = api.get(**params) except models.BadStatusCodeError, e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest('<ul><li>%s</li></ul>' % e)
def signature_aggregation(request, aggregation): '''Return the aggregation of a field. ''' params = get_params(request) if isinstance(params, http.HttpResponseBadRequest): # There was an error in the form, let's return it. return params if len(params['signature']) > 1: return http.HttpResponseBadRequest( 'Invalid value for "signature" parameter, ' 'only one value is accepted' ) signature = params['signature'][0] if not signature: return http.HttpResponseBadRequest( '"signature" parameter is mandatory' ) data = {} data['aggregation'] = aggregation allowed_fields = get_allowed_fields(request.user) # Make sure the field we want to aggregate on is allowed. if aggregation not in allowed_fields: return http.HttpResponseBadRequest( '<ul><li>' 'You are not allowed to aggregate on the "%s" field' '</li></ul>' % aggregation ) current_query = request.GET.copy() data['params'] = current_query.copy() params['signature'] = '=' + signature params['_results_number'] = 0 params['_results_offset'] = 0 params['_facets'] = [aggregation] data['current_url'] = '%s?%s' % ( reverse('signature:signature_report'), current_query.urlencode() ) api = SuperSearchUnredacted() try: search_results = api.get(**params) except models.BadStatusCodeError, e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest('<ul><li>%s</li></ul>' % e)
def signature_aggregation(request, params, aggregation): '''Return the aggregation of a field. ''' signature = params['signature'][0] context = {} context['aggregation'] = aggregation allowed_fields = get_allowed_fields(request.user) # Make sure the field we want to aggregate on is allowed. if aggregation not in allowed_fields: return http.HttpResponseBadRequest( '<ul><li>' 'You are not allowed to aggregate on the "%s" field' '</li></ul>' % aggregation ) current_query = request.GET.copy() context['params'] = current_query.copy() params['signature'] = '=' + signature params['_results_number'] = 0 params['_results_offset'] = 0 params['_facets'] = [aggregation] api = SuperSearchUnredacted() try: search_results = api.get(**params) except BadArgumentError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest(render_exception(e)) context['aggregates'] = [] if aggregation in search_results['facets']: context['aggregates'] = search_results['facets'][aggregation] context['total_count'] = search_results['total'] return render(request, 'signature/signature_aggregation.html', context)
def signature_aggregation(request, params, aggregation): """Return the aggregation of a field. """ signature = params["signature"][0] context = {} context["aggregation"] = aggregation allowed_fields = get_allowed_fields(request.user) # Make sure the field we want to aggregate on is allowed. if aggregation not in allowed_fields: return http.HttpResponseBadRequest( "<ul><li>" 'You are not allowed to aggregate on the "%s" field' "</li></ul>" % aggregation) current_query = request.GET.copy() context["params"] = current_query.copy() params["signature"] = "=" + signature params["_results_number"] = 0 params["_results_offset"] = 0 params["_facets"] = [aggregation] api = SuperSearchUnredacted() try: search_results = api.get(**params) except BadArgumentError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest(render_exception(e)) context["aggregates"] = [] if aggregation in search_results["facets"]: context["aggregates"] = search_results["facets"][aggregation] context["total_count"] = search_results["total"] return render(request, "signature/signature_aggregation.html", context)
def signature_graphs(request, params, field): '''Return a multi-line graph of crashes per day grouped by field. ''' signature = params['signature'][0] context = {} context['aggregation'] = field allowed_fields = get_allowed_fields(request.user) # Make sure the field we want to aggregate on is allowed. if field not in allowed_fields: return http.HttpResponseBadRequest( '<ul><li>' 'You are not allowed to group by the "%s" field' '</li></ul>' % field ) current_query = request.GET.copy() context['params'] = current_query.copy() params['signature'] = '=' + signature params['_results_number'] = 0 params['_results_offset'] = 0 params['_histogram.date'] = [field] params['_facets'] = [field] api = SuperSearchUnredacted() try: search_results = api.get(**params) except BadArgumentError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest(render_exception(e)) context['aggregates'] = search_results['facets'].get('histogram_date', []) context['term_counts'] = search_results['facets'].get(field, []) return context
def signature_graphs(request, params, field): """Return a multi-line graph of crashes per day grouped by field. """ signature = params["signature"][0] context = {} context["aggregation"] = field allowed_fields = get_allowed_fields(request.user) # Make sure the field we want to aggregate on is allowed. if field not in allowed_fields: return http.HttpResponseBadRequest( "<ul><li>" 'You are not allowed to group by the "%s" field' "</li></ul>" % field) current_query = request.GET.copy() context["params"] = current_query.copy() params["signature"] = "=" + signature params["_results_number"] = 0 params["_results_offset"] = 0 params["_histogram.date"] = [field] params["_facets"] = [field] api = SuperSearchUnredacted() try: search_results = api.get(**params) except BadArgumentError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest(render_exception(e)) context["aggregates"] = search_results["facets"].get("histogram_date", []) context["term_counts"] = search_results["facets"].get(field, []) return context
def signature_graphs(request, field): '''Return a multi-line graph of crashes per day grouped by field. ''' params = get_validated_params(request) if isinstance(params, http.HttpResponseBadRequest): # There was an error in the form, let's return it. return params signature = params['signature'][0] data = {} data['aggregation'] = field allowed_fields = get_allowed_fields(request.user) # Make sure the field we want to aggregate on is allowed. if field not in allowed_fields: return http.HttpResponseBadRequest( '<ul><li>' 'You are not allowed to group by the "%s" field' '</li></ul>' % field ) current_query = request.GET.copy() data['params'] = current_query.copy() params['signature'] = '=' + signature params['_results_number'] = 0 params['_results_offset'] = 0 params['_histogram.date'] = [field] params['_facets'] = [field] api = SuperSearchUnredacted() try: search_results = api.get(**params) except models.BadStatusCodeError, e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest('<ul><li>%s</li></ul>' % e)
def signature_graphs(request, field): '''Return a multi-line graph of crashes per day grouped by field. ''' params = get_validated_params(request) if isinstance(params, http.HttpResponseBadRequest): # There was an error in the form, let's return it. return params signature = params['signature'][0] data = {} data['aggregation'] = field allowed_fields = get_allowed_fields(request.user) # Make sure the field we want to aggregate on is allowed. if field not in allowed_fields: return http.HttpResponseBadRequest( '<ul><li>' 'You are not allowed to group by the "%s" field' '</li></ul>' % field ) current_query = request.GET.copy() data['params'] = current_query.copy() params['signature'] = '=' + signature params['_results_number'] = 0 params['_results_offset'] = 0 params['_histogram.date'] = [field] params['_facets'] = [field] api = SuperSearchUnredacted() try: search_results = api.get(**params) except models.BadStatusCodeError, e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest('<ul><li>%s</li></ul>' % e)
def signature_reports(request, params): '''Return the results of a search. ''' signature = params['signature'][0] context = {} context['query'] = {'total': 0, 'total_count': 0, 'total_pages': 0} allowed_fields = get_allowed_fields(request.user) current_query = request.GET.copy() if 'page' in current_query: del current_query['page'] context['params'] = current_query.copy() if '_sort' in context['params']: del context['params']['_sort'] if '_columns' in context['params']: del context['params']['_columns'] context['sort'] = request.GET.getlist('_sort') context['columns'] = request.GET.getlist('_columns') or DEFAULT_COLUMNS # Make sure only allowed fields are used. context['sort'] = [ x for x in context['sort'] if x in allowed_fields or ( x.startswith('-') and x[1:] in allowed_fields) ] context['columns'] = [x for x in context['columns'] if x in allowed_fields] params['_sort'] = context['sort'] # Copy the list of columns so that they can differ. params['_columns'] = list(context['columns']) # The uuid is always displayed in the UI so we need to make sure it is # always returned by the model. if 'uuid' not in params['_columns']: params['_columns'].append('uuid') # We require the cpu_info field to show a special marker on some AMD CPU # related crash reports. if 'cpu_info' not in params['_columns']: params['_columns'].append('cpu_info') # The `uuid` field is a special case, it is always displayed in the first # column of the table. Hence we do not want to show it again in the # auto-generated list of columns, so we its name from the list of # columns to display. if 'uuid' in context['columns']: context['columns'].remove('uuid') try: current_page = int(request.GET.get('page', 1)) except ValueError: return http.HttpResponseBadRequest('Invalid page') if current_page <= 0: current_page = 1 results_per_page = 50 context['current_page'] = current_page context['results_offset'] = results_per_page * (current_page - 1) params['signature'] = '=' + signature params['_results_number'] = results_per_page params['_results_offset'] = context['results_offset'] params['_facets'] = [] # We don't need no facets. context['current_url'] = '%s?%s' % (reverse('signature:signature_report'), urlencode_obj(current_query)) api = SuperSearchUnredacted() try: search_results = api.get(**params) except BadArgumentError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest(render_exception(e)) search_results['total_pages'] = int( math.ceil(search_results['total'] / float(results_per_page))) search_results['total_count'] = search_results['total'] context['query'] = search_results return render(request, 'signature/signature_reports.html', context)
def signature_reports(request): '''Return the results of a search. ''' params = get_validated_params(request) if isinstance(params, http.HttpResponseBadRequest): # There was an error in the form, let's return it. return params signature = params['signature'][0] data = {} data['query'] = { 'total': 0, 'total_count': 0, 'total_pages': 0 } allowed_fields = get_allowed_fields(request.user) current_query = request.GET.copy() if 'page' in current_query: del current_query['page'] data['params'] = current_query.copy() if '_columns' in data['params']: del data['params']['_columns'] data['columns'] = request.GET.getlist('_columns') or DEFAULT_COLUMNS # Make sure only allowed fields are used data['columns'] = [ x for x in data['columns'] if x in allowed_fields ] try: current_page = int(request.GET.get('page', 1)) except ValueError: return http.HttpResponseBadRequest('Invalid page') if current_page <= 0: current_page = 1 results_per_page = 50 data['current_page'] = current_page data['results_offset'] = results_per_page * (current_page - 1) params['signature'] = '=' + signature params['_results_number'] = results_per_page params['_results_offset'] = data['results_offset'] params['_facets'] = [] # We don't need no facets. data['current_url'] = '%s?%s' % ( reverse('signature:signature_report'), current_query.urlencode() ) api = SuperSearchUnredacted() try: search_results = api.get(**params) except models.BadStatusCodeError, e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest('<ul><li>%s</li></ul>' % e)
def signature_reports(request, params): '''Return the results of a search. ''' signature = params['signature'][0] context = {} context['query'] = { 'total': 0, 'total_count': 0, 'total_pages': 0 } allowed_fields = get_allowed_fields(request.user) current_query = request.GET.copy() if 'page' in current_query: del current_query['page'] context['params'] = current_query.copy() if '_sort' in context['params']: del context['params']['_sort'] if '_columns' in context['params']: del context['params']['_columns'] context['sort'] = request.GET.getlist('_sort') context['columns'] = request.GET.getlist('_columns') or DEFAULT_COLUMNS # Make sure only allowed fields are used. context['sort'] = [ x for x in context['sort'] if x in allowed_fields or (x.startswith('-') and x[1:] in allowed_fields) ] context['columns'] = [ x for x in context['columns'] if x in allowed_fields ] params['_sort'] = context['sort'] # Copy the list of columns so that they can differ. params['_columns'] = list(context['columns']) # The uuid is always displayed in the UI so we need to make sure it is # always returned by the model. if 'uuid' not in params['_columns']: params['_columns'].append('uuid') # We require the cpu_info field to show a special marker on some AMD CPU # related crash reports. if 'cpu_info' not in params['_columns']: params['_columns'].append('cpu_info') # The `uuid` field is a special case, it is always displayed in the first # column of the table. Hence we do not want to show it again in the # auto-generated list of columns, so we its name from the list of # columns to display. if 'uuid' in context['columns']: context['columns'].remove('uuid') try: current_page = int(request.GET.get('page', 1)) except ValueError: return http.HttpResponseBadRequest('Invalid page') if current_page <= 0: current_page = 1 results_per_page = 50 context['current_page'] = current_page context['results_offset'] = results_per_page * (current_page - 1) params['signature'] = '=' + signature params['_results_number'] = results_per_page params['_results_offset'] = context['results_offset'] params['_facets'] = [] # We don't need no facets. context['current_url'] = '%s?%s' % ( reverse('signature:signature_report'), urlencode_obj(current_query) ) api = SuperSearchUnredacted() try: search_results = api.get(**params) except BadArgumentError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest(render_exception(e)) search_results['total_pages'] = int( math.ceil( search_results['total'] / float(results_per_page) ) ) search_results['total_count'] = search_results['total'] context['query'] = search_results return render(request, 'signature/signature_reports.html', context)
def signature_reports(request, params): """Return the results of a search. """ signature = params["signature"][0] context = {} context["query"] = {"total": 0, "total_count": 0, "total_pages": 0} allowed_fields = get_allowed_fields(request.user) current_query = request.GET.copy() if "page" in current_query: del current_query["page"] context["params"] = current_query.copy() if "_sort" in context["params"]: del context["params"]["_sort"] if "_columns" in context["params"]: del context["params"]["_columns"] context["sort"] = request.GET.getlist("_sort") context["columns"] = request.GET.getlist("_columns") or DEFAULT_COLUMNS # Make sure only allowed fields are used. context["sort"] = [ x for x in context["sort"] if x in allowed_fields or ( x.startswith("-") and x[1:] in allowed_fields) ] context["columns"] = [x for x in context["columns"] if x in allowed_fields] params["_sort"] = context["sort"] # Copy the list of columns so that they can differ. params["_columns"] = list(context["columns"]) # The uuid is always displayed in the UI so we need to make sure it is # always returned by the model. if "uuid" not in params["_columns"]: params["_columns"].append("uuid") # We require the cpu_info field to show a special marker on some AMD CPU # related crash reports. if "cpu_info" not in params["_columns"]: params["_columns"].append("cpu_info") # The `uuid` field is a special case, it is always displayed in the first # column of the table. Hence we do not want to show it again in the # auto-generated list of columns, so we its name from the list of # columns to display. if "uuid" in context["columns"]: context["columns"].remove("uuid") try: current_page = int(request.GET.get("page", 1)) except ValueError: return http.HttpResponseBadRequest("Invalid page") if current_page <= 0: current_page = 1 results_per_page = 50 context["current_page"] = current_page context["results_offset"] = results_per_page * (current_page - 1) params["signature"] = "=" + signature params["_results_number"] = results_per_page params["_results_offset"] = context["results_offset"] params["_facets"] = [] # We don't need no facets. context["current_url"] = "%s?%s" % ( reverse("signature:signature_report"), urlencode_obj(current_query), ) api = SuperSearchUnredacted() try: search_results = api.get(**params) except BadArgumentError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest(render_exception(e)) search_results["total_pages"] = int( math.ceil(search_results["total"] / float(results_per_page))) search_results["total_count"] = search_results["total"] context["query"] = search_results return render(request, "signature/signature_reports.html", context)
def signature_reports(request, params): '''Return the results of a search. ''' signature = params['signature'][0] data = {} data['query'] = { 'total': 0, 'total_count': 0, 'total_pages': 0 } allowed_fields = get_allowed_fields(request.user) current_query = request.GET.copy() if 'page' in current_query: del current_query['page'] data['params'] = current_query.copy() if '_columns' in data['params']: del data['params']['_columns'] data['columns'] = request.GET.getlist('_columns') or DEFAULT_COLUMNS # Make sure only allowed fields are used data['columns'] = [ x for x in data['columns'] if x in allowed_fields ] # Copy the list of columns so that they can differ. params['_columns'] = list(data['columns']) # The uuid is always displayed in the UI so we need to make sure it is # always returned by the model. if 'uuid' not in params['_columns']: params['_columns'].append('uuid') # The `uuid` field is a special case, it is always displayed in the first # column of the table. Hence we do not want to show it again in the # auto-generated list of columns, so we its name from the list of # columns to display. if 'uuid' in data['columns']: data['columns'].remove('uuid') try: current_page = int(request.GET.get('page', 1)) except ValueError: return http.HttpResponseBadRequest('Invalid page') if current_page <= 0: current_page = 1 results_per_page = 50 data['current_page'] = current_page data['results_offset'] = results_per_page * (current_page - 1) params['signature'] = '=' + signature params['_results_number'] = results_per_page params['_results_offset'] = data['results_offset'] params['_facets'] = [] # We don't need no facets. data['current_url'] = '%s?%s' % ( reverse('signature:signature_report'), current_query.urlencode() ) api = SuperSearchUnredacted() try: search_results = api.get(**params) except models.BadStatusCodeError as e: # We need to return the error message in some HTML form for jQuery to # pick it up. return http.HttpResponseBadRequest('<ul><li>%s</li></ul>' % e) search_results['total_pages'] = int( math.ceil( search_results['total'] / float(results_per_page) ) ) search_results['total_count'] = search_results['total'] data['query'] = search_results return render(request, 'signature/signature_reports.html', data)