diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md
index 99ac39556..5c170cf10 100644
--- a/doc/Extensions/Alerting.md
+++ b/doc/Extensions/Alerting.md
@@ -14,6 +14,7 @@ Table of Content:
- [IRC](#transports-irc)
- [Slack](#transports-slack)
- [HipChat](#transports-hipchat)
+ - [PagerDuty](#transports-pagerduty)
- [Entities](#entities)
- [Devices](#entity-devices)
- [BGP Peers](#entity-bgppeers)
@@ -242,6 +243,22 @@ $config['alert']['transports']['hipchat'][] = array("url" => "https://api.hipcha
> results, such as HipChat attempting to interpret angled brackets (`<` and
> `>`).
+## PagerDuty
+
+Enabling PagerDuty transports is almost as easy as enabling email-transports.
+
+All you need is to create a Service with type Generic API on your PagerDuty dashboard.
+
+Now copy your API-Key from the newly created Service and setup the transport like:
+
+```php
+$config['alert']['transports']['pagerduty'] = 'MYAPIKEYGOESHERE';
+```
+
+That's it!
+
+__Note__: Currently ACK notifications are not transported to PagerDuty, This is going to be fixed within the next major version (version by date of writing: 2015.05)
+
# Entities
Entities as described earlier are based on the table and column names within the database, if you are ensure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc `.
diff --git a/includes/alerts/transport.pagerduty.php b/includes/alerts/transport.pagerduty.php
new file mode 100644
index 000000000..0ccd0ee32
--- /dev/null
+++ b/includes/alerts/transport.pagerduty.php
@@ -0,0 +1,51 @@
+/* Copyright (C) 2015 Daniel Preussker
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see . */
+
+/**
+ * PagerDuty Generic-API Transport
+ * @author f0o
+ * @copyright 2015 f0o, LibreNMS
+ * @license GPL
+ * @package LibreNMS
+ * @subpackage Alerts
+ */
+
+$protocol = array(
+ 'service_key' => $opts,
+ 'incident_key' => ($obj['id'] ? $obj['id'] : $obj['uid']),
+ 'description' => ($obj['name'] ? $obj['name'].' on '.$obj['hostname'] : $obj['title']),
+ 'client' => 'LibreNMS',
+);
+if( $obj['state'] == 0 ) {
+ $protocol['event_type'] = 'resolve';
+} elseif( $obj['state'] == 2 ) {
+ $protocol['event_type'] = 'acknowledge';
+} else {
+ $protocol['event_type'] = 'trigger';
+}
+foreach( $obj['faults'] as $fault=>$data ) {
+ $protocol['details'][] = $data['string'];
+}
+$curl = curl_init();
+curl_setopt($curl, CURLOPT_URL, 'https://events.pagerduty.com/generic/2010-04-15/create_event.json' );
+curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type'=> 'application/json'));
+curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($protocol));
+$ret = curl_exec($curl);
+$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
+if( $code != 200 ) {
+ var_dump("PagerDuty returnd Error, retry later"); //FIXME: propper debuging
+ return false;
+}
+return true;