From 477a857a770343e163010b23bcf0dfd1b865dff2 Mon Sep 17 00:00:00 2001 From: f0o Date: Tue, 12 May 2015 11:38:46 +0000 Subject: [PATCH 1/3] PagerDuty transport draft --- includes/alerts/transport.pagerduty.php | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 includes/alerts/transport.pagerduty.php 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; From 2c04e001a577ffde35be35bdb38480b418116ee9 Mon Sep 17 00:00:00 2001 From: f0o Date: Thu, 14 May 2015 13:56:09 +0000 Subject: [PATCH 2/3] PagerDuty transport docs --- doc/Extensions/Alerting.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index 99ac39556..a18156587 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,20 @@ $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! + # 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 `. From 1f4e14ea743b64b530ad675b143dc758c7158b96 Mon Sep 17 00:00:00 2001 From: f0o Date: Thu, 14 May 2015 14:04:26 +0000 Subject: [PATCH 3/3] Added missing-ACK note --- doc/Extensions/Alerting.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index a18156587..5c170cf10 100644 --- a/doc/Extensions/Alerting.md +++ b/doc/Extensions/Alerting.md @@ -257,6 +257,8 @@ $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 `.