diff --git a/doc/Extensions/Alerting.md b/doc/Extensions/Alerting.md index 253c90cc0..8b0f25675 100644 --- a/doc/Extensions/Alerting.md +++ b/doc/Extensions/Alerting.md @@ -16,6 +16,7 @@ Table of Content: - [HipChat](#transports-hipchat) - [PagerDuty](#transports-pagerduty) - [Pushover](#transports-pushover) + - [Boxcar](#transports-boxcar) - [Entities](#entities) - [Devices](#entity-devices) - [BGP Peers](#entity-bgppeers) @@ -309,6 +310,26 @@ $config['alert']['transports']['pushover'][] = array( ); ``` +## Boxcar + +Enabling Boxcar support is super easy. +Copy your access token from the Boxcar app or from the Boxcar.io website and setup the transport in your config.php like: + +```php +$config['alert']['transports']['boxcar'][] = array( + "access_token" => 'ACCESSTOKENGOESHERE', + ); +``` + +To modify the Critical alert sound, add the 'sound_critical' parameter, example: + +```php +$config['alert']['transports']['boxcar'][] = array( + "access_token" => 'ACCESSTOKENGOESHERE', + "sound_critical" => 'detonator-charge', + ); +``` + # 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.boxcar.php b/includes/alerts/transport.boxcar.php new file mode 100644 index 000000000..9f26b2bcc --- /dev/null +++ b/includes/alerts/transport.boxcar.php @@ -0,0 +1,90 @@ +/* Copyright (C) 2015 James Campbell + * 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 . */ + +/* 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 . */ + +/** + * Boxcar API Transport + * @author trick77 + * @copyright 2015 trick77, neokjames, f0o, LibreNMS + * @license GPL + * @package LibreNMS + * @subpackage Alerts + */ + +foreach( $opts as $api ) { + $data = array(); + $data['user_credentials'] = $api['access_token']; + $data['notification[source_name]'] = $config['project_id']; + switch( $obj['severity'] ) { + case "critical": + $severity = "Critical"; + if( !empty( $api['sound_critical'] ) ) { + $data['notification[sound]'] = $api['sound_critical']; + } + break; + case "warning": + $severity = "Warning"; + if( !empty( $api['sound_warning'] ) ) { + $data['notification[sound]'] = $api['sound_warning']; + } + break; + } + switch( $obj['state'] ) { + case 0: + $title_text = "OK"; + if( !empty( $api['sound_ok'] ) ) { + $data['notification[sound]'] = $api['sound_ok']; + } + break; + case 1: + $title_text = $severity; + break; + case 2: + $title_text = "Acknowledged"; + break; + } + $data['notification[title]'] = $title_text." - ".$obj['hostname']." - ".$obj['name']; + $message_text = "Timestamp: ".$obj['timestamp']; + if( !empty( $obj['faults'] ) ) { + $message_text .= "\n\nFaults:\n"; + foreach($obj['faults'] as $k => $faults) { + $message_text .= "#".$k." ".$faults['string']."\n"; + } + } + $data['notification[long_message]'] = $message_text; + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, 'https://new.boxcar.io/api/notifications'); + curl_setopt($curl, CURLOPT_SAFE_UPLOAD, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, $data); + $ret = curl_exec($curl); + $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); + if( $code != 201 ) { + var_dump("Boxcar returned error"); //FIXME: proper debugging + return false; + } +} +return true;