diff --git a/README.md b/README.md
index 99acc02e7..6d91859ef 100644
--- a/README.md
+++ b/README.md
@@ -43,7 +43,6 @@ Currently, we have built-in support for the following alert types:
- JIRA
- OpsGenie
- Commands
-- HipChat
- MS Teams
- Slack
- Telegram
diff --git a/docs/source/elastalert.rst b/docs/source/elastalert.rst
index b1008c3c4..418cef3b2 100755
--- a/docs/source/elastalert.rst
+++ b/docs/source/elastalert.rst
@@ -36,7 +36,6 @@ Currently, we have support built in for these alert types:
- JIRA
- OpsGenie
- SNS
-- HipChat
- Slack
- Telegram
- GoogleChat
diff --git a/docs/source/ruletypes.rst b/docs/source/ruletypes.rst
index a947a77b7..ee5fc0f9f 100644
--- a/docs/source/ruletypes.rst
+++ b/docs/source/ruletypes.rst
@@ -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
~~~~~~~
diff --git a/elastalert/alerts.py b/elastalert/alerts.py
index d3fa7518f..f8c5a9531 100644
--- a/elastalert/alerts.py
+++ b/elastalert/alerts.py
@@ -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 = '
'
- body = body.replace('\n', br)
-
- truncated_message = '
...(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'])
diff --git a/elastalert/loaders.py b/elastalert/loaders.py
index 771194768..022e707fd 100644
--- a/elastalert/loaders.py
+++ b/elastalert/loaders.py
@@ -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,
@@ -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())))))
diff --git a/elastalert/schema.yaml b/elastalert/schema.yaml
index cc5d52395..8b8d23d9a 100644
--- a/elastalert/schema.yaml
+++ b/elastalert/schema.yaml
@@ -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}
diff --git a/tests/alerts_test.py b/tests/alerts_test.py
index 5cd61ae75..933800de2 100644
--- a/tests/alerts_test.py
+++ b/tests/alerts_test.py
@@ -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
@@ -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!',