Exemple #1
0
def silence(labels, duration=None, **kwargs):
    '''
    Post a silence message to Alert Manager
    Duration should be sent in a format like 1m 2h 1d etc
    '''
    if duration:
        start = timezone.now()
        if duration.endswith('m'):
            end = start + datetime.timedelta(minutes=int(duration[:-1]))
        elif duration.endswith('h'):
            end = start + datetime.timedelta(hours=int(duration[:-1]))
        elif duration.endswith('d'):
            end = start + datetime.timedelta(days=int(duration[:-1]))
        else:
            raise Exception('Unknown time modifier')
        kwargs['endsAt'] = end.isoformat()
    else:
        local_timezone = pytz.timezone(settings.PROMGEN.get('timezone', 'UTC'))
        for key in ['startsAt', 'endsAt']:
            kwargs[key] = local_timezone.localize(parser.parse(
                kwargs[key])).isoformat()

    kwargs['matchers'] = [{
        'name': name,
        'value': value,
        'isRegex': True if value.endswith("*") else False
    } for name, value in labels.items()]

    logger.debug('Sending silence for %s', kwargs)
    url = urljoin(settings.PROMGEN['alertmanager']['url'], '/api/v1/silences')
    util.post(url, json=kwargs).raise_for_status()
Exemple #2
0
    def _send(task, url, alert, data):
        params = {
            'externalURL': data.get('externalURL'),
            'alert': alert,
        }

        util.post(url, params)
        return True
Exemple #3
0
    def _send(self, url, data):
        if data['status'] == 'resolved':
            message = self.render('promgen/sender/slack.resolved.txt', data)
        else:
            message = self.render('promgen/sender/slack.body.txt', data)

        json = {
            'text': message,
        }

        util.post(url, json=json).raise_for_status()
Exemple #4
0
def silence(labels, duration=None, **kwargs):
    '''
    Post a silence message to Alert Manager
    Duration should be sent in a format like 1m 2h 1d etc
    '''
    if duration:
        start = timezone.now()
        if duration.endswith('m'):
            end = start + datetime.timedelta(minutes=int(duration[:-1]))
        elif duration.endswith('h'):
            end = start + datetime.timedelta(hours=int(duration[:-1]))
        elif duration.endswith('d'):
            end = start + datetime.timedelta(days=int(duration[:-1]))
        else:
            raise ValidationError('Unknown time modifier')
        kwargs['endsAt'] = end.isoformat()
        kwargs.pop('startsAt', False)
    else:
        local_timezone = pytz.timezone(util.setting("timezone", "UTC"))
        for key in ['startsAt', 'endsAt']:
            kwargs[key] = local_timezone.localize(parser.parse(
                kwargs[key])).isoformat()

    kwargs['matchers'] = [{
        'name': name,
        'value': value,
        'isRegex': True if value.endswith("*") else False
    } for name, value in labels.items()]

    logger.debug("Sending silence for %s", kwargs)
    url = urljoin(util.setting("alertmanager:url"), "/api/v1/silences")
    response = util.post(url, json=kwargs)
    response.raise_for_status()
    return response
Exemple #5
0
def reload_prometheus():
    from promgen import signals

    target = urljoin(util.setting("prometheus:url"), "/-/reload")
    response = util.post(target)
    response.raise_for_status()
    signals.post_reload.send(response)
Exemple #6
0
    def _send(self, channel, data):
        url = self.config('server')

        params = {
            'channel': channel,
            'message_format': 'text',
        }

        if data['status'] == 'resolved':
            params['color'] = 'green'
            params['message'] = self.render('promgen/sender/ikasan.resolved.txt', data)
        else:
            params['color'] = 'red'
            params['message'] = self.render('promgen/sender/ikasan.body.txt', data)

        util.post(url, params).raise_for_status()
Exemple #7
0
    def _send(self, token, data):
        url = self.config('server')

        if data['status'] == 'resolved':
            message = self.render('promgen/sender/linenotify.resolved.txt', data)
        else:
            message = self.render('promgen/sender/linenotify.body.txt', data)

        params = {
            'message': message,
        }

        headers = {
            'Authorization': 'Bearer %s' % token
        }

        util.post(url, data=params, headers=headers).raise_for_status()
Exemple #8
0
    def _send(self, url, data):
        kwargs = {}
        proxy = self.config('proxies')
        if proxy is not None and proxy != "":
            kwargs['proxies'] = {
                'http': proxy,
                'https': proxy,
            }

        if data['status'] == 'resolved':
            message = self.render('promgen/sender/slack.resolved.txt', data)
        else:
            message = self.render('promgen/sender/slack.body.txt', data)

        json = {
            'text': message,
        }

        util.post(url, json=json, **kwargs).raise_for_status()
Exemple #9
0
def reload_prometheus():
    from promgen.signals import post_reload
    target = urljoin(settings.PROMGEN['prometheus']['url'], '/-/reload')
    response = util.post(target)
    post_reload.send(response)
Exemple #10
0
 def _send(self, url, data):
     print(data)
     util.post(url, data)
     return True
Exemple #11
0
def reload_prometheus():
    from promgen import signals

    target = urljoin(settings.PROMGEN["prometheus"]["url"], "/-/reload")
    response = util.post(target)
    signals.post_reload.send(response)
Exemple #12
0
 def _send(self, url, data):
     util.post(url, json=data).raise_for_status()
Exemple #13
0
def clear_tombstones():
    target = urljoin(util.setting("prometheus:url"),
                     "/api/v1/admin/tsdb/clean_tombstones")
    response = util.post(target)
    response.raise_for_status()