def post(self, request):
silences = collections.defaultdict(list)
try:
url = urljoin(settings.PROMGEN['alertmanager']['url'], '/api/v1/silences')
response = util.get(url)
except requests.exceptions.ConnectionError:
logger.error('Error connecting to %s', url)
return JsonResponse({})
data = response.json().get('data', [])
if data is None:
# Return an empty silence-all if there are no active silences from AM
return JsonResponse({})
currentAt = datetime.datetime.now(datetime.timezone.utc)
for silence in data:
if 'comment' in silence:
silence['comment'] = defaultfilters.urlize(silence['comment'])
# Since there is no status field, compare endsAt with the current time
if 'endsAt' in silence:
silence['endsAt'] = parser.parse(silence['endsAt'])
if silence['endsAt'] < currentAt:
continue
silences['silence-all'].append(silence)
for matcher in silence.get('matchers'):
if matcher.get('name') in ['service', 'project']:
silences['silence-{}-{}'.format(matcher.get('name'), matcher.get('value'))].append(silence)
context = {'#' + slugify(key): render_to_string('promgen/ajax_silence.html', {'silences': silences[key], 'key': key}, request).strip() for key in silences}
context['#silence-load'] = render_to_string('promgen/ajax_silence_button.html', {'silences': silences['silence-all'], 'key': 'silence-all'}).strip()
return JsonResponse(context)
评论列表
文章目录