def test_invalid_annotation(self, mock_post): # $label.foo is invalid (should be $labels) so make sure we raise an exception models.RuleAnnotation.objects.create(name='summary', value='{{$label.foo}}', rule=self.rule) with self.assertRaises(ValidationError): prometheus.check_rules([self.rule])
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): self.object = self.get_object() form = self.get_form() if not form.is_valid(): return self.form_invalid(form) labels = self.LabelForm(request.POST, request.FILES, instance=self.object) if labels.is_valid(): for instance in labels.save(): messages.info(request, 'Added {} to {}'.format(instance.name, self.object)) else: logger.warning('Error saving labels %s', labels.errors) return self.form_invalid(form) annotations = self.AnnotationForm(request.POST, request.FILES, instance=self.object) if annotations.is_valid(): for instance in annotations.save(): messages.info(request, 'Added {} to {}'.format(instance.name, self.object)) else: logger.warning('Error saving annotations %s', annotations.errors) return self.form_invalid(form) try: prometheus.check_rules([form.instance]) except Exception as e: form._update_errors(e) return self.form_invalid(form) return self.form_valid(form)
def clean(self): # Check our cleaned data then let Prometheus check our rule super().clean() rule = models.Rule(**self.cleaned_data) # Make sure we pull in our labels and annotations for # testing if needed # See django docs on cached_property rule.labels = self.instance.labels rule.annotations = self.instance.annotations prometheus.check_rules([rule])
def save_rule(sender, instance, **kwargs): prometheus.check_rules([instance]) trigger_write_rules.send(instance)
def handle(self, **kwargs): prometheus.check_rules(models.Rule.objects.all()) if kwargs['out']: prometheus.write_rules(kwargs['out'], kwargs['reload']) else: self.stdout.write(prometheus.render_rules())
def clean(self): # Check our cleaned data then let Prometheus check our rule super().clean() rule = models.Rule(**self.cleaned_data) prometheus.check_rules([rule])