Merge pull request #2104 from f0o/issue-2089

Added Clickatell and PlaySMS Transports
This commit is contained in:
Daniel Preussker
2015-11-21 16:39:52 +00:00
4 changed files with 192 additions and 0 deletions

View File

@@ -18,6 +18,9 @@ Table of Content:
- [Pushover](#transports-pushover)
- [Boxcar](#transports-boxcar)
- [Pushbullet](#transports-pushbullet)
- [Clickatell](#transports-clickatell)
- [PlaySMS](#transports-playsms)
- [VictorOps](#transports-victorops)
- [Entities](#entities)
- [Devices](#entity-devices)
- [BGP Peers](#entity-bgppeers)
@@ -372,6 +375,54 @@ $config['alert']['transports']['pushbullet'] = 'MYFANCYACCESSTOKEN';
```
~~
## <a name="transports-clickatell">Clickatell</a>
Clickatell provides a REST-API requiring an Authorization-Token and at least one Cellphone number.
Please consult Clickatell's documentation regarding number formating.
Here an example using 3 numbers, any amount of numbers is supported:
~~
```php
$config['alert']['transports']['clickatell']['token'] = 'MYFANCYACCESSTOKEN';
$config['alert']['transports']['clickatell']['to'][] = '+1234567890';
$config['alert']['transports']['clickatell']['to'][] = '+1234567891';
$config['alert']['transports']['clickatell']['to'][] = '+1234567892';
```
~~
## <a name="transports-playsms">PlaySMS</a>
PlaySMS is an OpenSource SMS-Gateway that can be used via their HTTP-API using a Username and WebService-Token.
Please consult PlaySMS's documentation regarding number formating.
Here an example using 3 numbers, any amount of numbers is supported:
~~
```php
$config['alert']['transports']['playsms']['url'] = 'https://localhost/index.php?app=ws';
$config['alert']['transports']['playsms']['user'] = 'user1';
$config['alert']['transports']['playsms']['token'] = 'MYFANCYACCESSTOKEN';
$config['alert']['transports']['playsms']['from'] = '+1234567892'; //Optional
$config['alert']['transports']['playsms']['to'][] = '+1234567890';
$config['alert']['transports']['playsms']['to'][] = '+1234567891';
```
~~
## <a name="transports-victorops">VictorOps</a>
VictorOps provide a webHook url to make integration extremely simple. To get the URL required login to your VictorOps account and go to:
Settings -> Integrations -> REST Endpoint -> Enable Integration.
The URL provided will have $routing_key at the end, you need to change this to something that is unique to the system sending the alerts such as librenms. I.e:
`https://alert.victorops.com/integrations/generic/20132414/alert/2f974ce1-08fc-4dg8-a4f4-9aee6cf35c98/librenms`
~~
```php
$config['alert']['transports']['victorops']['url'] = 'https://alert.victorops.com/integrations/generic/20132414/alert/2f974ce1-08fc-4dg8-a4f4-9aee6cf35c98/librenms';
```
~~
# <a name="entities">Entities
Entities as described earlier are based on the table and column names within the database, if you are unsure of what the entity is you want then have a browse around inside MySQL using `show tables` and `desc <tablename>`.

View File

@@ -0,0 +1,42 @@
/* Copyright (C) 2015 Daniel Preussker <f0o@librenms.org>
* 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 <http://www.gnu.org/licenses/>. */
/**
* Clickatell REST-API Transport
* @author f0o <f0o@librenms.org>
* @copyright 2015 f0o, LibreNMS
* @license GPL
* @package LibreNMS
* @subpackage Alerts
*/
$data = array("api_id" => $opts['api_id'], "user" => $opts['user'], "password" => $opts['password'], "to" => implode(',',$opts['to']), "text" => $obj['title']);
if (!empty($opts['from'])) {
$data['from'] = $opts['from'];
}
$url = 'https://api.clickatell.com/http/sendmsg?'.http_build_query($data);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if( $code > 200 ) {
if( $debug ) {
var_dump($ret);
}
return false;
}
return true;

View File

@@ -0,0 +1,42 @@
/* Copyright (C) 2015 Daniel Preussker <f0o@librenms.org>
* 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 <http://www.gnu.org/licenses/>. */
/**
* PlaySMS API Transport
* @author f0o <f0o@librenms.org>
* @copyright 2015 f0o, LibreNMS
* @license GPL
* @package LibreNMS
* @subpackage Alerts
*/
$data = array("u" => $opts['user'], "h" => $opts['token'], "to" => implode(',',$opts['to']), "msg" => $obj['title']);
if (!empty($opts['from'])) {
$data["from"] = $opts['from'];
}
$url = $opts['url'].'&op=pv&'.http_build_query($data);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$ret = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if( $code > 202 ) {
if( $debug ) {
var_dump($ret);
}
return false;
}
return true;

View File

@@ -0,0 +1,57 @@
/* Copyright (C) 2015 Daniel Preussker <f0o@devilcode.org>
* 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 <http://www.gnu.org/licenses/>. */
/**
* VictorOps Generic-API Transport - Based on PagerDuty transport
* @author f0o <f0o@devilcode.org>
* @author laf <neil@librenms.org>
* @copyright 2015 f0o, laf, LibreNMS
* @license GPL
* @package LibreNMS
* @subpackage Alerts
*/
$url = $opts['url'];
$protocol = array(
'entity_id' => ($obj['id'] ? $obj['id'] : $obj['uid']),
'state_start_time' => strtotime($obj['timestamp']),
'monitoring_tool' => 'librenms',
);
if( $obj['state'] == 0 ) {
$protocol['message_type'] = 'recovery';
}
elseif( $obj['state'] == 2 ) {
$protocol['message_type'] = 'acknowledgement';
}
elseif ($obj['state'] == 1) {
$protocol['message_type'] = 'critical';
}
foreach( $obj['faults'] as $fault=>$data ) {
$protocol['state_message'] .= $data['string'];
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url );
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("VictorOps returned Error, retry later"); //FIXME: propper debuging
return false;
}
return true;