forked from GithubBackups/healthchecks
Adds PagerTree Integration
This commit is contained in:
parent
4e04641c38
commit
cb1eac50d9
@ -32,6 +32,7 @@ CHANNEL_KINDS = (("email", "Email"),
|
|||||||
("hipchat", "HipChat"),
|
("hipchat", "HipChat"),
|
||||||
("slack", "Slack"),
|
("slack", "Slack"),
|
||||||
("pd", "PagerDuty"),
|
("pd", "PagerDuty"),
|
||||||
|
("pagertree", "PagerTree"),
|
||||||
("po", "Pushover"),
|
("po", "Pushover"),
|
||||||
("pushbullet", "Pushbullet"),
|
("pushbullet", "Pushbullet"),
|
||||||
("opsgenie", "OpsGenie"),
|
("opsgenie", "OpsGenie"),
|
||||||
@ -260,6 +261,8 @@ class Channel(models.Model):
|
|||||||
return transports.HipChat(self)
|
return transports.HipChat(self)
|
||||||
elif self.kind == "pd":
|
elif self.kind == "pd":
|
||||||
return transports.PagerDuty(self)
|
return transports.PagerDuty(self)
|
||||||
|
elif self.kind == "pagertree":
|
||||||
|
return transports.PagerTree(self)
|
||||||
elif self.kind == "victorops":
|
elif self.kind == "victorops":
|
||||||
return transports.VictorOps(self)
|
return transports.VictorOps(self)
|
||||||
elif self.kind == "pushbullet":
|
elif self.kind == "pushbullet":
|
||||||
|
@ -230,6 +230,24 @@ class PagerDuty(HttpTransport):
|
|||||||
|
|
||||||
return self.post(self.URL, json=payload)
|
return self.post(self.URL, json=payload)
|
||||||
|
|
||||||
|
class PagerTree(HttpTransport):
|
||||||
|
def notify(self, check):
|
||||||
|
url = self.channel.value
|
||||||
|
headers = {
|
||||||
|
"Conent-Type": "application/json"
|
||||||
|
}
|
||||||
|
payload = {
|
||||||
|
"incident_key": str(check.code),
|
||||||
|
"event_type": "trigger" if check.status == "down" else "resolve",
|
||||||
|
"title": tmpl("pagertree_title.html", check=check)
|
||||||
|
"description": tmpl("pagertree_description.html", check=check),
|
||||||
|
"client": settings.SITE_NAME,
|
||||||
|
"client_url": settings.SITE_ROOT,
|
||||||
|
"tags": ",".join(check.tags_list())
|
||||||
|
}
|
||||||
|
|
||||||
|
return self.post(url, json=payload, headers=headers)
|
||||||
|
|
||||||
|
|
||||||
class Pushbullet(HttpTransport):
|
class Pushbullet(HttpTransport):
|
||||||
def notify(self, check):
|
def notify(self, check):
|
||||||
|
@ -17,6 +17,7 @@ channel_urls = [
|
|||||||
url(r'^add_webhook/$', views.add_webhook, name="hc-add-webhook"),
|
url(r'^add_webhook/$', views.add_webhook, name="hc-add-webhook"),
|
||||||
url(r'^add_pd/$', views.add_pd, name="hc-add-pd"),
|
url(r'^add_pd/$', views.add_pd, name="hc-add-pd"),
|
||||||
url(r'^add_pd/([\w]{12})/$', views.add_pd, name="hc-add-pd-state"),
|
url(r'^add_pd/([\w]{12})/$', views.add_pd, name="hc-add-pd-state"),
|
||||||
|
url(r'^add_pagertree/$', views.add_pagertree, name="hc-add-pagertree"),
|
||||||
url(r'^add_slack/$', views.add_slack, name="hc-add-slack"),
|
url(r'^add_slack/$', views.add_slack, name="hc-add-slack"),
|
||||||
url(r'^add_slack_btn/$', views.add_slack_btn, name="hc-add-slack-btn"),
|
url(r'^add_slack_btn/$', views.add_slack_btn, name="hc-add-slack-btn"),
|
||||||
url(r'^add_hipchat/$', views.add_hipchat, name="hc-add-hipchat"),
|
url(r'^add_hipchat/$', views.add_hipchat, name="hc-add-hipchat"),
|
||||||
|
BIN
static/img/integrations/pagertree.png
Normal file
BIN
static/img/integrations/pagertree.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.4 KiB |
@ -50,6 +50,9 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="preposition">service key</span>
|
<span class="preposition">service key</span>
|
||||||
{{ ch.pd_service_key }}
|
{{ ch.pd_service_key }}
|
||||||
|
{% elif ch.kind == "pagertree" %}
|
||||||
|
<span class="preposition">URL</span>
|
||||||
|
{{ ch.value }}
|
||||||
{% elif ch.kind == "opsgenie" %}
|
{% elif ch.kind == "opsgenie" %}
|
||||||
<span class="preposition">API key</span>
|
<span class="preposition">API key</span>
|
||||||
{{ ch.value }}
|
{{ ch.value }}
|
||||||
@ -227,6 +230,15 @@
|
|||||||
<a href="{% url 'hc-add-pd' %}" class="btn btn-primary">Add Integration</a>
|
<a href="{% url 'hc-add-pd' %}" class="btn btn-primary">Add Integration</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<li>
|
||||||
|
<img src="{% static 'img/integrations/pagertree.png' %}"
|
||||||
|
class="icon" alt="PagerTree icon" />
|
||||||
|
|
||||||
|
<h2>PagerTree</h2>
|
||||||
|
<p>On-call. Simplified.</p>
|
||||||
|
|
||||||
|
<a href="{% url 'hc-add-pagertree' %}" class="btn btn-primary">Add Integration</a>
|
||||||
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<img src="{% static 'img/integrations/hipchat.png' %}"
|
<img src="{% static 'img/integrations/hipchat.png' %}"
|
||||||
class="icon" alt="HipChat icon" />
|
class="icon" alt="HipChat icon" />
|
||||||
|
@ -89,6 +89,8 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif event.channel.kind == "pd" %}
|
{% elif event.channel.kind == "pd" %}
|
||||||
Sent alert to PagerDuty
|
Sent alert to PagerDuty
|
||||||
|
{% elif event.channel.kind == "pagertree" %}
|
||||||
|
Sent alert to PagerTree
|
||||||
{% elif event.channel.kind == "opsgenie" %}
|
{% elif event.channel.kind == "opsgenie" %}
|
||||||
Sent alert to OpsGenie
|
Sent alert to OpsGenie
|
||||||
{% elif event.channel.kind == "hipchat" %}
|
{% elif event.channel.kind == "hipchat" %}
|
||||||
|
@ -319,6 +319,13 @@
|
|||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<img width="22" height="22" alt="PagerTree icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAMAAADzapwJAAACW1BMVEVMaXEpr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Uor+Upr+Upr+Upr+Uor+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Uor+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Upr+Uor+Upr+UrsOUor+Upr+Upr+Upr+Upr+Upr+Upr+UssOUpr+Upr+Upr+Upr+Upr+Upr+U4tOcpr+Upr+Uor+UmruV6zO9QveossOVIuulNvOmW1/ElruUoruUuseY0s+Y3tOc7tedBt+hCuOhLu+lVv+pgw+x2y+98ze+Az++Cz++J0vCV1/GY2PKv4fWx4fW65fYqr+UtsOUtseYvseY5tec/tuhHuulKuulKu+lRvepSvupTvupcwetvyO5wye51yu5+zu+H0fCL0/CR1fGU1vGo3vSr3/S+5vYrsOUwsuYzsuYzs+Y1s+Y2tOc6tec7tuc9tuc+tuhCt+hDuOhEuehFuehHuelHuuhMu+lOvOlPvOlPvOpPvepRvupUv+pWv+pZwOtfwutgwuthw+xjxOxkxOxnxextyO1tyO5uyO1vyO1vye1xye5zyu50yu53y+94y+55zO55zO+Bz++D0O+F0O+G0e+H0vCI0vCO1PCO1PGP1PCP1fGS1fGV1vGU1/GX1/Kc2fKd2vKf2/Og2/Oj3POk3fOl3fOm3fSm3vSn3vOn3vSy4vW04/W24/W24/a75fbF6fh3jVHtAAAASXRSTlMAAgMEBQYHCAoLDhkaGy8wMTQ1OjtKWltfaG1tcXqEhYiLjY6Pl5mao6OkqKutubzLzNLT2NnZ3d3q6u/w8vP19/j5+vv8/f3+chuXrQAAAcJJREFUeNpjYAABRj4pXSNTUwN1cR4GBOCRNXb2BANbfTFOmKigHkQwHUTYqfJCRIUMPb2DPT29c6rzvLyCPN00uEGi3HqemTGRXl5ZiUf7vHtmZGQ4KbAChWVdvNrT1nhnrU329fPbkhq+aYGlKAMDn5GnV/ii5LkV1cXHZ5ZUdU2rneelw8Ug5eLpubwuek9t9P7d5YlhEwMLvTzNRRh0Pb28uzfHBSQdO1DpE+YbOD073dNDisEoZOlkL/+K+MVpc7y8fQMLy1NDgzyVGMwaa3YF1MXPmr9qe0tB4ISYlBW++Z66DKae2QmJ61KKPJu2JSWVJaQeXJ1SVa/JYOAZ3OCTsONIaUf8pOKtC31b2/wjPOUY1Dw9vULyp8ZU+vvkLCk7vNHPy8vLUYJBwh4o3r8+d2WeT0RsWk0AKFyM+Rh49IHCRSc2xPn7RCbvDQsGCSszMzCI2QHFc/cdivLpjI0OAomaCADDhEPVFRh8UTsDlkWUFHgDRW0kGUFByKvl5ukVGhfZ21w6BShsLcMOCXBeRSvP0Nhwb7/ZUd4eppJssOhhEdWxcM/09AxxMFbhZ0KKTS5haSVdbXkJPhYIHwDXP44RDT0o3QAAAABJRU5ErkJggg==" />
|
||||||
|
</td>
|
||||||
|
<td>Open and resolve incidents in <a href="https://www.pagertreecom/">PagerTree</a>.</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<img width="22" height="22" alt="HipChat icon" src="data:image/gif;base64,R0lGODdhLAAsAMIIAAQyZSFOez9ljWKEooOetqa2ycvV4P3//CwAAAAALAAsAAAD/ni63P4wykmrNUSIEMQghiUeRiEAaKqiQhGOjzGsNB0ML6ycdU8POkNg1SG4GKXBhpijEFatJqQ0VBUqhdUVllURJl2WbmHgobYx77jxTEXMwHVjhgo8wnF5w/xtpOx6D39sKX2BDWFoB1UAhxBVeQaFjg90gAdhUpSYbgptjZsNkigvbQKhDilbpqh+KH1tl60Hqp6ds6MAL5mia1JhDCl5CgACmhJlsgeWDGZ7rxZtw4sow2GGClUBIFME2oSkDdpNZSodHgNKjMWig+1i4D6T4rUOcA4yZlDTCnTsacKmYCBA0MCxA2aUvYM3RoiKgwvCvII4RUuFXHVwiMgVPYCig3V1uCHB0KTeCG/yaBiiwy9aSiYkbo0xAdKHMR4KgxQoQJDgTgw2PQbyR0NooAwgjR4yyNPIrKetEgAAOw==" />
|
<img width="22" height="22" alt="HipChat icon" src="data:image/gif;base64,R0lGODdhLAAsAMIIAAQyZSFOez9ljWKEooOetqa2ycvV4P3//CwAAAAALAAsAAAD/ni63P4wykmrNUSIEMQghiUeRiEAaKqiQhGOjzGsNB0ML6ycdU8POkNg1SG4GKXBhpijEFatJqQ0VBUqhdUVllURJl2WbmHgobYx77jxTEXMwHVjhgo8wnF5w/xtpOx6D39sKX2BDWFoB1UAhxBVeQaFjg90gAdhUpSYbgptjZsNkigvbQKhDilbpqh+KH1tl60Hqp6ds6MAL5mia1JhDCl5CgACmhJlsgeWDGZ7rxZtw4sow2GGClUBIFME2oSkDdpNZSodHgNKjMWig+1i4D6T4rUOcA4yZlDTCnTsacKmYCBA0MCxA2aUvYM3RoiKgwvCvII4RUuFXHVwiMgVPYCig3V1uCHB0KTeCG/yaBiiwy9aSiYkbo0xAdKHMR4KgxQoQJDgTgw2PQbyR0NooAwgjR4yyNPIrKetEgAAOw==" />
|
||||||
|
46
templates/integrations/add_pagertree.html
Normal file
46
templates/integrations/add_pagertree.html
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% load compress humanize staticfiles hc_extras %}
|
||||||
|
|
||||||
|
{% block title %}Add PagerTree - {% site_name %}{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12">
|
||||||
|
<h1>PagerTree</h1>
|
||||||
|
|
||||||
|
<p>If your team uses <a href="https://pagertree.com">PagerTree</a>,
|
||||||
|
you can set up {% site_name %} to create a PagerTree incident when
|
||||||
|
a check goes down, and resolve it when a check goes back up.</p>
|
||||||
|
|
||||||
|
<h2>Integration Settings</h2>
|
||||||
|
|
||||||
|
<form method="post" class="form-horizontal" action="{% url 'hc-add-pagertree' %}">
|
||||||
|
{% csrf_token %}
|
||||||
|
<div class="form-group {{ form.value.css_classes }}">
|
||||||
|
<label for="post-url" class="col-sm-2 control-label">URL</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input
|
||||||
|
id="post-url"
|
||||||
|
type="text"
|
||||||
|
class="form-control"
|
||||||
|
name="value"
|
||||||
|
placeholder="https://"
|
||||||
|
value="{{ form.value.value|default:"" }}">
|
||||||
|
|
||||||
|
{% if form.value.errors %}
|
||||||
|
<div class="help-block">
|
||||||
|
{{ form.value.errors|join:"" }}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-sm-offset-2 col-sm-10">
|
||||||
|
<button type="submit" class="btn btn-primary">Save Integration</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
5
templates/integrations/pagertree_description.html
Normal file
5
templates/integrations/pagertree_description.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{% load humanize %}
|
||||||
|
{{ check.name_then_code }} is {{ check.status }}.
|
||||||
|
{% if check.status == "down" %}
|
||||||
|
Last ping was {{ check.last_ping|naturaltime }}
|
||||||
|
{% endif %}
|
1
templates/integrations/pagertree_title.html
Normal file
1
templates/integrations/pagertree_title.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
{{ check.name_then_code }} is {{ check.status }}
|
Loading…
x
Reference in New Issue
Block a user