forked from GithubBackups/healthchecks
Add the VICTOROPS_ENABLED setting
This commit is contained in:
parent
205f1ccce6
commit
e2c90c05b8
@ -22,6 +22,7 @@ All notable changes to this project will be documented in this file.
|
|||||||
- Add the PAGERTREE_ENABLED setting (#471)
|
- Add the PAGERTREE_ENABLED setting (#471)
|
||||||
- Add the PROMETHEUS_ENABLED setting (#471)
|
- Add the PROMETHEUS_ENABLED setting (#471)
|
||||||
- Add the SPIKE_ENABLED setting (#471)
|
- Add the SPIKE_ENABLED setting (#471)
|
||||||
|
- Add the VICTOROPS_ENABLED setting (#471)
|
||||||
|
|
||||||
## Bug Fixes
|
## Bug Fixes
|
||||||
- Fix unwanted HTML escaping in SMS and WhatsApp notifications
|
- Fix unwanted HTML escaping in SMS and WhatsApp notifications
|
||||||
|
@ -61,4 +61,5 @@ TWILIO_AUTH=
|
|||||||
TWILIO_FROM=
|
TWILIO_FROM=
|
||||||
TWILIO_USE_WHATSAPP=False
|
TWILIO_USE_WHATSAPP=False
|
||||||
USE_PAYMENTS=False
|
USE_PAYMENTS=False
|
||||||
|
VICTOROPS_ENABLED=True
|
||||||
WEBHOOKS_ENABLED=True
|
WEBHOOKS_ENABLED=True
|
@ -41,18 +41,6 @@ class NotifyTestCase(BaseTestCase):
|
|||||||
self.assertFalse(mock_post.called)
|
self.assertFalse(mock_post.called)
|
||||||
self.assertEqual(Notification.objects.count(), 0)
|
self.assertEqual(Notification.objects.count(), 0)
|
||||||
|
|
||||||
@patch("hc.api.transports.requests.request")
|
|
||||||
def test_victorops(self, mock_post):
|
|
||||||
self._setup_data("victorops", "123")
|
|
||||||
mock_post.return_value.status_code = 200
|
|
||||||
|
|
||||||
self.channel.notify(self.check)
|
|
||||||
assert Notification.objects.count() == 1
|
|
||||||
|
|
||||||
args, kwargs = mock_post.call_args
|
|
||||||
payload = kwargs["json"]
|
|
||||||
self.assertEqual(payload["message_type"], "CRITICAL")
|
|
||||||
|
|
||||||
@patch("hc.api.transports.requests.request")
|
@patch("hc.api.transports.requests.request")
|
||||||
def test_discord(self, mock_post):
|
def test_discord(self, mock_post):
|
||||||
v = json.dumps({"webhook": {"url": "123"}})
|
v = json.dumps({"webhook": {"url": "123"}})
|
||||||
|
44
hc/api/tests/test_notify_victorops.py
Normal file
44
hc/api/tests/test_notify_victorops.py
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# coding: utf-8
|
||||||
|
|
||||||
|
from datetime import timedelta as td
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from django.utils.timezone import now
|
||||||
|
from hc.api.models import Channel, Check, Notification
|
||||||
|
from hc.test import BaseTestCase
|
||||||
|
from django.test.utils import override_settings
|
||||||
|
|
||||||
|
|
||||||
|
class NotifyTestCase(BaseTestCase):
|
||||||
|
def _setup_data(self, value, status="down", email_verified=True):
|
||||||
|
self.check = Check(project=self.project)
|
||||||
|
self.check.status = status
|
||||||
|
self.check.last_ping = now() - td(minutes=61)
|
||||||
|
self.check.save()
|
||||||
|
|
||||||
|
self.channel = Channel(project=self.project)
|
||||||
|
self.channel.kind = "victorops"
|
||||||
|
self.channel.value = value
|
||||||
|
self.channel.email_verified = email_verified
|
||||||
|
self.channel.save()
|
||||||
|
self.channel.checks.add(self.check)
|
||||||
|
|
||||||
|
@patch("hc.api.transports.requests.request")
|
||||||
|
def test_victorops(self, mock_post):
|
||||||
|
self._setup_data("123")
|
||||||
|
mock_post.return_value.status_code = 200
|
||||||
|
|
||||||
|
self.channel.notify(self.check)
|
||||||
|
assert Notification.objects.count() == 1
|
||||||
|
|
||||||
|
args, kwargs = mock_post.call_args
|
||||||
|
payload = kwargs["json"]
|
||||||
|
self.assertEqual(payload["message_type"], "CRITICAL")
|
||||||
|
|
||||||
|
@override_settings(VICTOROPS_ENABLED=False)
|
||||||
|
def test_it_requires_victorops_enabled(self):
|
||||||
|
self._setup_data("123")
|
||||||
|
self.channel.notify(self.check)
|
||||||
|
|
||||||
|
n = Notification.objects.get()
|
||||||
|
self.assertEqual(n.error, "VictorOps notifications are not enabled.")
|
@ -413,6 +413,9 @@ class Pushover(HttpTransport):
|
|||||||
|
|
||||||
class VictorOps(HttpTransport):
|
class VictorOps(HttpTransport):
|
||||||
def notify(self, check):
|
def notify(self, check):
|
||||||
|
if not settings.VICTOROPS_ENABLED:
|
||||||
|
return "VictorOps notifications are not enabled."
|
||||||
|
|
||||||
description = tmpl("victorops_description.html", check=check)
|
description = tmpl("victorops_description.html", check=check)
|
||||||
mtype = "CRITICAL" if check.status == "down" else "RECOVERY"
|
mtype = "CRITICAL" if check.status == "down" else "RECOVERY"
|
||||||
payload = {
|
payload = {
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
from django.test.utils import override_settings
|
||||||
from hc.api.models import Channel
|
from hc.api.models import Channel
|
||||||
from hc.test import BaseTestCase
|
from hc.test import BaseTestCase
|
||||||
|
|
||||||
@ -38,3 +39,9 @@ class AddVictorOpsTestCase(BaseTestCase):
|
|||||||
self.client.login(username="bob@example.org", password="password")
|
self.client.login(username="bob@example.org", password="password")
|
||||||
r = self.client.get(self.url)
|
r = self.client.get(self.url)
|
||||||
self.assertEqual(r.status_code, 403)
|
self.assertEqual(r.status_code, 403)
|
||||||
|
|
||||||
|
@override_settings(VICTOROPS_ENABLED=False)
|
||||||
|
def test_it_handles_disabled_integration(self):
|
||||||
|
self.client.login(username="alice@example.org", password="password")
|
||||||
|
r = self.client.get(self.url)
|
||||||
|
self.assertEqual(r.status_code, 404)
|
||||||
|
@ -312,6 +312,7 @@ def index(request):
|
|||||||
"enable_spike": settings.SPIKE_ENABLED is True,
|
"enable_spike": settings.SPIKE_ENABLED is True,
|
||||||
"enable_telegram": settings.TELEGRAM_TOKEN is not None,
|
"enable_telegram": settings.TELEGRAM_TOKEN is not None,
|
||||||
"enable_trello": settings.TRELLO_APP_KEY is not None,
|
"enable_trello": settings.TRELLO_APP_KEY is not None,
|
||||||
|
"enable_victorops": settings.VICTOROPS_ENABLED is True,
|
||||||
"enable_webhooks": settings.WEBHOOKS_ENABLED is True,
|
"enable_webhooks": settings.WEBHOOKS_ENABLED is True,
|
||||||
"enable_whatsapp": settings.TWILIO_USE_WHATSAPP,
|
"enable_whatsapp": settings.TWILIO_USE_WHATSAPP,
|
||||||
"registration_open": settings.REGISTRATION_OPEN,
|
"registration_open": settings.REGISTRATION_OPEN,
|
||||||
@ -787,6 +788,7 @@ def channels(request, code):
|
|||||||
"enable_spike": settings.SPIKE_ENABLED is True,
|
"enable_spike": settings.SPIKE_ENABLED is True,
|
||||||
"enable_telegram": settings.TELEGRAM_TOKEN is not None,
|
"enable_telegram": settings.TELEGRAM_TOKEN is not None,
|
||||||
"enable_trello": settings.TRELLO_APP_KEY is not None,
|
"enable_trello": settings.TRELLO_APP_KEY is not None,
|
||||||
|
"enable_victorops": settings.VICTOROPS_ENABLED is True,
|
||||||
"enable_webhooks": settings.WEBHOOKS_ENABLED is True,
|
"enable_webhooks": settings.WEBHOOKS_ENABLED is True,
|
||||||
"enable_whatsapp": settings.TWILIO_USE_WHATSAPP,
|
"enable_whatsapp": settings.TWILIO_USE_WHATSAPP,
|
||||||
"use_payments": settings.USE_PAYMENTS,
|
"use_payments": settings.USE_PAYMENTS,
|
||||||
@ -1469,6 +1471,7 @@ def add_opsgenie(request, code):
|
|||||||
return render(request, "integrations/add_opsgenie.html", ctx)
|
return render(request, "integrations/add_opsgenie.html", ctx)
|
||||||
|
|
||||||
|
|
||||||
|
@require_setting("VICTOROPS_ENABLED")
|
||||||
@login_required
|
@login_required
|
||||||
def add_victorops(request, code):
|
def add_victorops(request, code):
|
||||||
project = _get_rw_project_for_user(request, code)
|
project = _get_rw_project_for_user(request, code)
|
||||||
|
@ -255,6 +255,9 @@ TWILIO_USE_WHATSAPP = envbool("TWILIO_USE_WHATSAPP", "False")
|
|||||||
# Trello
|
# Trello
|
||||||
TRELLO_APP_KEY = os.getenv("TRELLO_APP_KEY")
|
TRELLO_APP_KEY = os.getenv("TRELLO_APP_KEY")
|
||||||
|
|
||||||
|
# VictorOps
|
||||||
|
VICTOROPS_ENABLED = envbool("VICTOROPS_ENABLED", "True")
|
||||||
|
|
||||||
# Webhooks
|
# Webhooks
|
||||||
WEBHOOKS_ENABLED = envbool("WEBHOOKS_ENABLED", "True")
|
WEBHOOKS_ENABLED = envbool("WEBHOOKS_ENABLED", "True")
|
||||||
|
|
||||||
|
@ -349,6 +349,10 @@ scheme.</p>
|
|||||||
<h2 id="USE_PAYMENTS"><code>USE_PAYMENTS</code></h2>
|
<h2 id="USE_PAYMENTS"><code>USE_PAYMENTS</code></h2>
|
||||||
<p>Default: <code>False</code></p>
|
<p>Default: <code>False</code></p>
|
||||||
<p>A boolean that turns on/off billing features.</p>
|
<p>A boolean that turns on/off billing features.</p>
|
||||||
|
<h2 id="VICTOROPS_ENABLED"><code>VICTOROPS_ENABLED</code></h2>
|
||||||
|
<p>Default: <code>True</code></p>
|
||||||
|
<p>A boolean that turns on/off the Splunk On-Call (VictorOps) integration.
|
||||||
|
Enabled by default.</p>
|
||||||
<h2 id="WEBHOOKS_ENABLED"><code>WEBHOOKS_ENABLED</code></h2>
|
<h2 id="WEBHOOKS_ENABLED"><code>WEBHOOKS_ENABLED</code></h2>
|
||||||
<p>Default: <code>True</code></p>
|
<p>Default: <code>True</code></p>
|
||||||
<p>A boolean that turns on/off the Webhooks integration. Enabled by default.</p>
|
<p>A boolean that turns on/off the Webhooks integration. Enabled by default.</p>
|
@ -561,6 +561,13 @@ Default: `False`
|
|||||||
|
|
||||||
A boolean that turns on/off billing features.
|
A boolean that turns on/off billing features.
|
||||||
|
|
||||||
|
## `VICTOROPS_ENABLED` {: #VICTOROPS_ENABLED }
|
||||||
|
|
||||||
|
Default: `True`
|
||||||
|
|
||||||
|
A boolean that turns on/off the Splunk On-Call (VictorOps) integration.
|
||||||
|
Enabled by default.
|
||||||
|
|
||||||
## `WEBHOOKS_ENABLED` {: #WEBHOOKS_ENABLED }
|
## `WEBHOOKS_ENABLED` {: #WEBHOOKS_ENABLED }
|
||||||
|
|
||||||
Default: `True`
|
Default: `True`
|
||||||
|
@ -435,6 +435,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if enable_victorops %}
|
||||||
<li>
|
<li>
|
||||||
<img src="{% static 'img/integrations/victorops.png' %}"
|
<img src="{% static 'img/integrations/victorops.png' %}"
|
||||||
class="icon" alt="VictorOps icon" />
|
class="icon" alt="VictorOps icon" />
|
||||||
@ -443,6 +444,7 @@
|
|||||||
<p>On-call scheduling, alerting, and incident tracking.</p>
|
<p>On-call scheduling, alerting, and incident tracking.</p>
|
||||||
<a href="{% url 'hc-add-victorops' project.code %}" class="btn btn-primary">Add Integration</a>
|
<a href="{% url 'hc-add-victorops' project.code %}" class="btn btn-primary">Add Integration</a>
|
||||||
</li>
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if enable_whatsapp %}
|
{% if enable_whatsapp %}
|
||||||
<li>
|
<li>
|
||||||
|
@ -650,6 +650,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% if enable_victorops %}
|
||||||
<div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
|
<div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
|
||||||
<div class="integration">
|
<div class="integration">
|
||||||
<img src="{% static 'img/integrations/victorops.png' %}" class="icon" alt="" />
|
<img src="{% static 'img/integrations/victorops.png' %}" class="icon" alt="" />
|
||||||
@ -659,6 +660,7 @@
|
|||||||
</h3>
|
</h3>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if enable_whatsapp %}
|
{% if enable_whatsapp %}
|
||||||
<div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
|
<div class="col-lg-2 col-md-3 col-sm-4 col-xs-6">
|
||||||
|
Loading…
x
Reference in New Issue
Block a user