Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove hipchat integration #2881

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ Currently, we have built-in support for the following alert types:
- JIRA
- OpsGenie
- Commands
- HipChat
- MS Teams
- Slack
- Telegram
Expand Down
1 change: 0 additions & 1 deletion docs/source/elastalert.rst
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ Currently, we have support built in for these alert types:
- JIRA
- OpsGenie
- SNS
- HipChat
- Slack
- Telegram
- GoogleChat
Expand Down
37 changes: 0 additions & 37 deletions docs/source/ruletypes.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1678,43 +1678,6 @@ Optional:

``profile``: The AWS profile to use. If none specified, the default will be used.

HipChat
~~~~~~~

HipChat alerter will send a notification to a predefined HipChat room. The body of the notification is formatted the same as with other alerters.

The alerter requires the following two options:

``hipchat_auth_token``: The randomly generated notification token created by HipChat. Go to https://XXXXX.hipchat.com/account/api and use
'Create new token' section, choosing 'Send notification' in Scopes list.

``hipchat_room_id``: The id associated with the HipChat room you want to send the alert to. Go to https://XXXXX.hipchat.com/rooms and choose
the room you want to post to. The room ID will be the numeric part of the URL.

``hipchat_msg_color``: The color of the message background that is sent to HipChat. May be set to green, yellow or red. Default is red.

``hipchat_domain``: The custom domain in case you have HipChat own server deployment. Default is api.hipchat.com.

``hipchat_ignore_ssl_errors``: Ignore TLS errors (self-signed certificates, etc.). Default is false.

``hipchat_proxy``: By default ElastAlert will not use a network proxy to send notifications to HipChat. Set this option using ``hostname:port`` if you need to use a proxy.

``hipchat_notify``: When set to true, triggers a hipchat bell as if it were a user. Default is true.

``hipchat_from``: When humans report to hipchat, a timestamp appears next to their name. For bots, the name is the name of the token. The from, instead of a timestamp, defaults to empty unless set, which you can do here. This is optional.

``hipchat_message_format``: Determines how the message is treated by HipChat and rendered inside HipChat applications
html - Message is rendered as HTML and receives no special treatment. Must be valid HTML and entities must be escaped (e.g.: '&' instead of '&'). May contain basic tags: a, b, i, strong, em, br, img, pre, code, lists, tables.
text - Message is treated just like a message sent by a user. Can include @mentions, emoticons, pastes, and auto-detected URLs (Twitter, YouTube, images, etc).
Valid values: html, text.
Defaults to 'html'.

``hipchat_mentions``: When using a ``html`` message format, it's not possible to mentions specific users using the ``@user`` syntax.
In that case, you can set ``hipchat_mentions`` to a list of users which will be first mentioned using a single text message, then the normal ElastAlert message will be sent to Hipchat.
If set, it will mention the users, no matter if the original message format is set to HTML or text.
Valid values: list of strings.
Defaults to ``[]``.


Stride
~~~~~~~
Expand Down
86 changes: 0 additions & 86 deletions elastalert/alerts.py
Original file line number Diff line number Diff line change
Expand Up @@ -963,92 +963,6 @@ def alert(self, matches):
elastalert_logger.info("Sent sns notification to %s" % (self.sns_topic_arn))


class HipChatAlerter(Alerter):
""" Creates a HipChat room notification for each alert """
required_options = frozenset(['hipchat_auth_token', 'hipchat_room_id'])

def __init__(self, rule):
super(HipChatAlerter, self).__init__(rule)
self.hipchat_msg_color = self.rule.get('hipchat_msg_color', 'red')
self.hipchat_message_format = self.rule.get('hipchat_message_format', 'html')
self.hipchat_auth_token = self.rule['hipchat_auth_token']
self.hipchat_room_id = self.rule['hipchat_room_id']
self.hipchat_domain = self.rule.get('hipchat_domain', 'api.hipchat.com')
self.hipchat_ignore_ssl_errors = self.rule.get('hipchat_ignore_ssl_errors', False)
self.hipchat_notify = self.rule.get('hipchat_notify', True)
self.hipchat_from = self.rule.get('hipchat_from', '')
self.url = 'https://%s/v2/room/%s/notification?auth_token=%s' % (
self.hipchat_domain, self.hipchat_room_id, self.hipchat_auth_token)
self.hipchat_proxy = self.rule.get('hipchat_proxy', None)

def create_alert_body(self, matches):
body = super(HipChatAlerter, self).create_alert_body(matches)

# HipChat sends 400 bad request on messages longer than 10000 characters
if self.hipchat_message_format == 'html':
# Use appropriate line ending for text/html
br = '<br/>'
body = body.replace('\n', br)

truncated_message = '<br/> ...(truncated)'
truncate_to = 10000 - len(truncated_message)
else:
truncated_message = '..(truncated)'
truncate_to = 10000 - len(truncated_message)

if (len(body) > 9999):
body = body[:truncate_to] + truncated_message

return body

def alert(self, matches):
body = self.create_alert_body(matches)

# Post to HipChat
headers = {'content-type': 'application/json'}
# set https proxy, if it was provided
proxies = {'https': self.hipchat_proxy} if self.hipchat_proxy else None
payload = {
'color': self.hipchat_msg_color,
'message': body,
'message_format': self.hipchat_message_format,
'notify': self.hipchat_notify,
'from': self.hipchat_from
}

try:
if self.hipchat_ignore_ssl_errors:
requests.packages.urllib3.disable_warnings()

if self.rule.get('hipchat_mentions', []):
ping_users = self.rule.get('hipchat_mentions', [])
ping_msg = payload.copy()
ping_msg['message'] = "ping {}".format(
", ".join("@{}".format(user) for user in ping_users)
)
ping_msg['message_format'] = "text"

response = requests.post(
self.url,
data=json.dumps(ping_msg, cls=DateTimeEncoder),
headers=headers,
verify=not self.hipchat_ignore_ssl_errors,
proxies=proxies)

response = requests.post(self.url, data=json.dumps(payload, cls=DateTimeEncoder), headers=headers,
verify=not self.hipchat_ignore_ssl_errors,
proxies=proxies)
warnings.resetwarnings()
response.raise_for_status()
except RequestException as e:
raise EAException("Error posting to HipChat: %s" % e)
elastalert_logger.info("Alert sent to HipChat room %s" % self.hipchat_room_id)

def get_info(self):
return {'type': 'hipchat',
'hipchat_room_id': self.hipchat_room_id}


class MsTeamsAlerter(Alerter):
""" Creates a Microsoft Teams Conversation Message for each alert """
required_options = frozenset(['ms_teams_webhook_url', 'ms_teams_alert_summary'])
Expand Down
8 changes: 0 additions & 8 deletions elastalert/loaders.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ class RulesLoader(object):
'debug': alerts.DebugAlerter,
'command': alerts.CommandAlerter,
'sns': alerts.SnsAlerter,
'hipchat': alerts.HipChatAlerter,
'stride': alerts.StrideAlerter,
'ms_teams': alerts.MsTeamsAlerter,
'slack': alerts.SlackAlerter,
Expand Down Expand Up @@ -315,13 +314,6 @@ def _dt_to_ts_with_format(dt):
rule.setdefault('client_cert', conf.get('client_cert'))
rule.setdefault('client_key', conf.get('client_key'))

# Set HipChat options from global config
rule.setdefault('hipchat_msg_color', 'red')
rule.setdefault('hipchat_domain', 'api.hipchat.com')
rule.setdefault('hipchat_notify', True)
rule.setdefault('hipchat_from', '')
rule.setdefault('hipchat_ignore_ssl_errors', False)

# Make sure we have required options
if self.required_locals - frozenset(list(rule.keys())):
raise EAException('Missing required option(s): %s' % (', '.join(self.required_locals - frozenset(list(rule.keys())))))
Expand Down
9 changes: 0 additions & 9 deletions elastalert/schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -261,15 +261,6 @@ properties:
jira_max_age: {type: number}
jira_watchers: *arrayOfString

### HipChat
hipchat_auth_token: {type: string}
hipchat_room_id: {type: [string, integer]}
hipchat_domain: {type: string}
hipchat_ignore_ssl_errors: {type: boolean}
hipchat_notify: {type: boolean}
hipchat_from: {type: string}
hipchat_mentions: {type: array, items: {type: string}}

### Stride
stride_access_token: {type: string}
stride_cloud_id: {type: string}
Expand Down
58 changes: 0 additions & 58 deletions tests/alerts_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
from elastalert.alerts import BasicMatchString
from elastalert.alerts import CommandAlerter
from elastalert.alerts import EmailAlerter
from elastalert.alerts import HipChatAlerter
from elastalert.alerts import HTTPPostAlerter
from elastalert.alerts import JiraAlerter
from elastalert.alerts import JiraFormattedMatchString
Expand Down Expand Up @@ -2363,63 +2362,6 @@ def test_stride_html():
mock_post_request.call_args_list[0][1]['data'])


def test_hipchat_body_size_limit_text():
rule = {
'name': 'Test Rule',
'type': 'any',
'hipchat_auth_token': 'token',
'hipchat_room_id': 'room_id',
'hipchat_message_format': 'text',
'alert_subject': 'Cool subject',
'alert_text': 'Alert: we found something.\n\n{message}',
'alert_text_type': 'alert_text_only',
'alert': [],
'alert_text_kw': {
'@timestamp': 'time',
'message': 'message',
},
}
rules_loader = FileRulesLoader({})
rules_loader.load_modules(rule)
alert = HipChatAlerter(rule)
match = {
'@timestamp': '2018-01-01T00:00:00',
'message': 'foo bar\n' * 5000,
}
body = alert.create_alert_body([match])

assert len(body) <= 10000


def test_hipchat_body_size_limit_html():
rule = {
'name': 'Test Rule',
'type': 'any',
'hipchat_auth_token': 'token',
'hipchat_room_id': 'room_id',
'hipchat_message_format': 'html',
'alert_subject': 'Cool subject',
'alert_text': 'Alert: we found something.\n\n{message}',
'alert_text_type': 'alert_text_only',
'alert': [],
'alert_text_kw': {
'@timestamp': 'time',
'message': 'message',
},
}
rules_loader = FileRulesLoader({})
rules_loader.load_modules(rule)
alert = HipChatAlerter(rule)
match = {
'@timestamp': '2018-01-01T00:00:00',
'message': 'foo bar\n' * 5000,
}

body = alert.create_alert_body([match])

assert len(body) <= 10000


def test_alerta_no_auth(ea):
rule = {
'name': 'Test Alerta rule!',
Expand Down