From 32c1fa561cb46408222bfc8e219276afa301de1c Mon Sep 17 00:00:00 2001 From: trick77 Date: Sun, 19 Jul 2015 19:21:09 +0200 Subject: [PATCH] Added support for Boxcar.io push notifications for alerts --- includes/alerts/transport.boxcar.php | 90 ++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 includes/alerts/transport.boxcar.php diff --git a/includes/alerts/transport.boxcar.php b/includes/alerts/transport.boxcar.php new file mode 100644 index 0000000000..9f26b2bcc7 --- /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;