mirror of
https://github.com/valitydev/redash.git
synced 2024-11-06 17:15:17 +00:00
Update alert task to use destinations
This commit is contained in:
parent
e069374232
commit
9b6f555d76
@ -1,9 +1,8 @@
|
||||
import logging
|
||||
import hipchat
|
||||
|
||||
from redash import models
|
||||
from redash import settings
|
||||
from redash.destinations import *
|
||||
from redash.utils import json_dumps
|
||||
|
||||
|
||||
class Hipchat(BaseDestination):
|
||||
|
@ -1,12 +1,7 @@
|
||||
from celery.utils.log import get_task_logger
|
||||
import datetime
|
||||
from flask.ext.mail import Message
|
||||
import hipchat
|
||||
import requests
|
||||
from redash.utils import json_dumps
|
||||
from requests.auth import HTTPBasicAuth
|
||||
from redash.worker import celery
|
||||
from redash import utils, mail
|
||||
from redash import utils
|
||||
from redash import models, settings
|
||||
from .base import BaseTask
|
||||
|
||||
@ -21,8 +16,8 @@ def base_url(org):
|
||||
return settings.HOST
|
||||
|
||||
|
||||
@celery.task(name="redash.tasks.check_alerts_for_query", bind=True, base=BaseTask)
|
||||
def check_alerts_for_query(self, query_id):
|
||||
@celery.task(name="redash.tasks.check_alerts_for_query", base=BaseTask)
|
||||
def check_alerts_for_query(query_id):
|
||||
from redash.wsgi import app
|
||||
|
||||
logger.debug("Checking query %d for alerts", query_id)
|
||||
@ -42,56 +37,10 @@ def check_alerts_for_query(self, query_id):
|
||||
logger.debug("Skipping notification (previous state was unknown and now it's ok).")
|
||||
continue
|
||||
|
||||
# message = Message
|
||||
html = """
|
||||
Check <a href="{host}/alerts/{alert_id}">alert</a> / check <a href="{host}/queries/{query_id}">query</a>.
|
||||
""".format(host=base_url(alert.query.org), alert_id=alert.id, query_id=query.id)
|
||||
host = base_url(alert.query.org)
|
||||
for subscription in alert.subscriptions:
|
||||
try:
|
||||
subscription.notify(alert, query, subscription.user, new_state, app, host)
|
||||
except Exception as e:
|
||||
logger.warn("Exception: {}".format(e))
|
||||
|
||||
notify_mail(alert, html, new_state, app)
|
||||
|
||||
if settings.HIPCHAT_API_TOKEN:
|
||||
notify_hipchat(alert, html, new_state)
|
||||
|
||||
if settings.WEBHOOK_ENDPOINT:
|
||||
notify_webhook(alert, query, html, new_state)
|
||||
|
||||
|
||||
def notify_hipchat(alert, html, new_state):
|
||||
try:
|
||||
if settings.HIPCHAT_API_URL:
|
||||
hipchat_client = hipchat.HipChat(token=settings.HIPCHAT_API_TOKEN, url=settings.HIPCHAT_API_URL)
|
||||
else:
|
||||
hipchat_client = hipchat.HipChat(token=settings.HIPCHAT_API_TOKEN)
|
||||
message = '[' + new_state.upper() + '] ' + alert.name + '<br />' + html
|
||||
hipchat_client.message_room(settings.HIPCHAT_ROOM_ID, settings.NAME, message.encode('utf-8', 'ignore'), message_format='html')
|
||||
except Exception:
|
||||
logger.exception("hipchat send ERROR.")
|
||||
|
||||
|
||||
def notify_mail(alert, html, new_state, app):
|
||||
recipients = [s.email for s in alert.subscribers()]
|
||||
logger.debug("Notifying: %s", recipients)
|
||||
try:
|
||||
with app.app_context():
|
||||
message = Message(recipients=recipients,
|
||||
subject="[{1}] {0}".format(alert.name.encode('utf-8', 'ignore'), new_state.upper()),
|
||||
html=html)
|
||||
mail.send(message)
|
||||
except Exception:
|
||||
logger.exception("mail send ERROR.")
|
||||
|
||||
|
||||
def notify_webhook(alert, query, html, new_state):
|
||||
try:
|
||||
data = {
|
||||
'event': 'alert_state_change',
|
||||
'alert': alert.to_dict(full=False),
|
||||
'url_base': base_url(query.org)
|
||||
}
|
||||
headers = {'Content-Type': 'application/json'}
|
||||
auth = HTTPBasicAuth(settings.WEBHOOK_USERNAME, settings.WEBHOOK_PASSWORD) if settings.WEBHOOK_USERNAME else None
|
||||
resp = requests.post(settings.WEBHOOK_ENDPOINT, data=json_dumps(data), auth=auth, headers=headers)
|
||||
if resp.status_code != 200:
|
||||
logger.error("webhook send ERROR. status_code => {status}".format(status=resp.status_code))
|
||||
except Exception:
|
||||
logger.exception("webhook send ERROR.")
|
||||
|
Loading…
Reference in New Issue
Block a user