def post(self, request, content_type, object_id): form = self.get_form() # Set an instance of our service here so that we can pass it # along for promtool to render form.instance.set_object(content_type, object_id) if form.is_valid(): form.instance.save() form.instance.add_label(form.instance.content_type.model, form.instance.content_object.name) return HttpResponseRedirect(form.instance.get_absolute_url()) if 'rules' not in request.POST: return self.form_invalid(form) importform = forms.ImportRuleForm(request.POST) ct = ContentType.objects.get_by_natural_key( 'promgen', content_type).model_class() obj = ct.objects.get(pk=object_id) if importform.is_valid(): data = importform.clean() counters = prometheus.import_rules_v2(data['rules'], obj) messages.info(request, 'Imported %s' % counters) return HttpResponseRedirect(obj.get_absolute_url()) return self.form_invalid(form)
def post(self, request, content_type, object_id): form = self.get_form() if form.is_valid(): form.instance.set_object(content_type, object_id) prometheus.check_rules([form.instance]) try: # Set an instance of our service here so that we can pass it # along for promtool to render form.instance.set_object(content_type, object_id) prometheus.check_rules([form.instance]) except Exception as e: form._update_errors(e) return self.form_invalid(form) form.instance.save() return HttpResponseRedirect(form.instance.get_absolute_url()) if 'rules' not in request.POST: return self.form_invalid(form) importform = forms.ImportRuleForm(request.POST) service = get_object_or_404(models.Service, id=self.kwargs['pk']) if importform.is_valid(): data = importform.clean() counters = prometheus.import_rules(data['rules'], service) messages.info(request, 'Imported %s' % counters) return HttpResponseRedirect(service.get_absolute_url()) return self.form_invalid(form)
def post(self, request, *args, **kwargs): form_class = self.get_form_class() form = form_class(request.POST, request.FILES) if 'rules' in request.POST: form = forms.ImportRuleForm(request.POST) if form.is_valid(): data = form.clean() counters = prometheus.import_rules(data['rules']) messages.info(request, 'Imported %s' % counters) return self.form_valid(form) else: return self.form_invalid(form) if form.is_valid(): data = form.clean() if data.get('file_field'): messages.info(request, 'Importing config from file') config = data['file_field'].read().decode('utf8') elif data.get('url'): messages.info(request, 'Importing config from url') response = util.get(data['url']) response.raise_for_status() config = response.text else: messages.info(request, 'Importing config') config = data['config'] kwargs = {} # This also lets us catch passing an empty string to signal using # the shard value from the post request if data.get('shard'): kwargs['replace_shard'] = data.get('shard') imported, skipped = prometheus.import_config(json.loads(config), **kwargs) if imported: counters = {key: len(imported[key]) for key in imported} messages.info(request, 'Imported %s' % counters) if skipped: counters = {key: len(skipped[key]) for key in skipped} messages.info(request, 'Skipped %s' % counters) # If we only have a single object in a category, automatically # redirect to that category to make things easier to understand if len(imported['Project']) == 1: return HttpResponseRedirect(imported['Project'][0].get_absolute_url()) if len(imported['Service']) == 1: return HttpResponseRedirect(imported['Service'][0].get_absolute_url()) if len(imported['Shard']) == 1: return HttpResponseRedirect(imported['Shard'][0].get_absolute_url()) # otherwise we can just use the default behavior return self.form_valid(form) else: return self.form_invalid(form)