def get_context_data(self, **kwargs): context = super(RuleRegister, self).get_context_data(**kwargs) # Set a dummy rule, so that our header/breadcrumbs render correctly context['rule'] = models.Rule() context['rule'].pk = 0 context['rule'].set_object(self.kwargs['content_type'], self.kwargs['object_id']) context['macro'] = macro.EXCLUSION_MACRO return context
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # Set a dummy rule, so that our header/breadcrumbs render correctly context["rule"] = models.Rule() context["rule"].pk = 0 context["rule"].set_object(self.kwargs["content_type"], self.kwargs["object_id"]) context["macro"] = macro.EXCLUSION_MACRO return context
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 post(self, request, pk): if pk == 0: rule = models.Rule() rule.set_object(request.POST['content_type'], request.POST['object_id']) else: rule = get_object_or_404(models.Rule, id=pk) query = macro.rulemacro(rule, request.POST['query']) # Since our rules affect all servers we use Promgen's proxy-query to test our rule # against all the servers at once url = resolve_domain('proxy-query') logger.debug('Querying %s with %s', url, query) start = time.time() result = util.get(url, {'query': query}).json() duration = datetime.timedelta(seconds=(time.time() - start)) context = { 'status': result['status'], 'duration': duration, 'query': query } context['data'] = result.get('data', {}) context['errors'] = {} metrics = context['data'].get('result', []) if metrics: context['collapse'] = len(metrics) > 5 for row in metrics: if 'service' not in row['metric'] and \ 'project' not in row['metric']: context['errors'][ 'routing'] = 'Some metrics are missing service and project labels so Promgen will be unable to route message' context['status'] = 'warning' else: context['status'] = 'info' context['errors'][ 'no_results'] = 'No Results. May need to remove conditional check (> < ==) to verity' # Place this at the bottom to have a query error show up as danger if result['status'] != 'success': context['status'] = 'danger' context['errors']['Query'] = result['error'] return JsonResponse({ request.POST['target']: render_to_string('promgen/ajax_clause_check.html', context) })
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])