def post(self, request): body = json.loads(request.body.decode("utf-8")) body.setdefault("comment", "Silenced from Promgen") body.setdefault("createdBy", request.user.email) form = forms.SilenceForm(body) if not form.is_valid(): return JsonResponse( { "messages": [{ "class": "alert alert-warning", "message": m, "label": k } for k in form.errors for m in form.errors[k]] }, status=422, ) try: response = prometheus.silence(body.pop("labels"), **form.cleaned_data) except Exception as e: return JsonResponse( { "messages": [{ "class": "alert alert-danger", "message": str(e) }] }, status=400, ) return HttpResponse(response.text, status=response.status_code, content_type="application/json")
def post(self, request): form = forms.SilenceForm(request.POST) if form.is_valid(): # Since it's a little annoying to submit forms with an array, we # cheat a bit and just use a simple prefix which we can split on # to build our array of labels labels = {} for key in request.POST: if key.startswith('label.'): target = key.split('.', 1)[1] labels[target] = request.POST[key] kwargs = { 'comment': form.cleaned_data['comment'], 'createdBy': form.cleaned_data['created_by'] } try: if form.cleaned_data['duration']: kwargs['duration'] = form.cleaned_data['duration'].lower() prometheus.silence(labels, **kwargs) messages.success(request, 'Setting silence for %s' % form.cleaned_data['duration']) else: kwargs['startsAt'] = form.cleaned_data['start'] kwargs['endsAt'] = form.cleaned_data['stop'] prometheus.silence(labels, **kwargs) messages.success(request, 'Setting silence for %s - %s' % (form.cleaned_data['start'], form.cleaned_data['stop'])) except Exception as e: messages.warning(request, e) else: messages.warning(request, 'Error setting silence') return HttpResponseRedirect(request.POST.get('next', '/'))