This commit is contained in:
laf
2015-07-19 18:52:53 +01:00
6 changed files with 300 additions and 0 deletions

View File

@@ -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(
);
```
## <a name="transports-boxcar">Boxcar</a>
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',
);
```
# <a name="entities">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 <tablename>`.

BIN
html/images/os/netonix.png Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 912 B

View File

@@ -0,0 +1,90 @@
/* Copyright (C) 2015 James Campbell <neokjames@gmail.com>
* 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/>. */
/* 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/>. */
/**
* Boxcar API Transport
* @author trick77 <jan@trick77.com>
* @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;

View File

@@ -466,6 +466,17 @@ $config['os'][$os]['bad_if'][] = 'cpu';
$config['os'][$os]['over'][0]['graph'] = 'device_bits';
$config['os'][$os]['over'][0]['text'] = 'Device Traffic';
$os = 'netonix';
$config['os'][$os]['text'] = 'Netonix';
$config['os'][$os]['type'] = 'network';
$config['os'][$os]['icon'] = 'netonix';
$config['os'][$os]['over'][0]['graph'] = 'device_bits';
$config['os'][$os]['over'][0]['text'] = 'Device Traffic';
$config['os'][$os]['over'][1]['graph'] = 'device_processor';
$config['os'][$os]['over'][1]['text'] = 'CPU Usage';
$config['os'][$os]['over'][2]['graph'] = 'device_mempool';
$config['os'][$os]['over'][2]['text'] = 'Memory Usage';
// Juniper
$os = 'junos';
$config['os'][$os]['text'] = 'Juniper JunOS';

View File

@@ -0,0 +1,7 @@
<?php
$version = snmp_get($device, 'firmwareVersion.0', '-Osqnv', 'NETONIX-SWITCH-MIB', 'mibs:mibs/netonix/');
list(,$version) = explode(': ', $version);
if (is_numeric($version)) {
$os = 'netonix';
}

View File

@@ -0,0 +1,171 @@
NETONIX-SWITCH-MIB DEFINITIONS ::= BEGIN
IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Integer32, enterprises FROM SNMPv2-SMI
OBJECT-GROUP, MODULE-COMPLIANCE FROM SNMPv2-CONF
snmpMIBGroups FROM SNMPv2-MIB
DisplayString,TEXTUAL-CONVENTION FROM SNMPv2-TC;
netonixSwitch MODULE-IDENTITY
LAST-UPDATED "9803231700Z"
ORGANIZATION "Netonix"
CONTACT-INFO "eric@netonix.com"
DESCRIPTION "The MIB Module for Netonix Switches."
REVISION "9803231700Z"
DESCRIPTION "The MIB Module for Netonix Switches."
::= { enterprises 99999 }
netonixSwitchGroup OBJECT-GROUP
OBJECTS { firmwareVersion,
fanSpeed,
tempDescription,
temp,
voltageDescription,
voltage
}
STATUS current
DESCRIPTION "A collection of objects providing basic instrumentation and control of an SNMPv2 entity."
::= { snmpMIBGroups 8 }
netonixSwitchConformance OBJECT IDENTIFIER ::= { netonixSwitch 99 }
netonixSwitchGroups OBJECT IDENTIFIER ::= { netonixSwitchConformance 1 }
netonixSwitchCompliances OBJECT IDENTIFIER ::= { netonixSwitchConformance 2 }
netonixSwitchCompliance MODULE-COMPLIANCE
STATUS current
DESCRIPTION "The compliance statement for switches which implement the Netonix Switch MIB."
MODULE MANDATORY-GROUPS { netonixSwitchGroup }
::= { netonixSwitchCompliances 1 }
VoltageTC ::= TEXTUAL-CONVENTION
DISPLAY-HINT "d-2"
STATUS current
DESCRIPTION "A voltage with 2 decimal places"
SYNTAX Integer32
firmwareVersion OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The version of the firmware running on the switch"
::= { netonixSwitch 1 }
fanTable OBJECT-TYPE
SYNTAX SEQUENCE OF FanEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Fan watching information."
::= { netonixSwitch 2 }
fanEntry OBJECT-TYPE
SYNTAX FanEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "An entry containing a disk and its statistics."
INDEX { fanIndex }
::= { fanTable 1 }
FanEntry ::= SEQUENCE {
fanIndex Integer32,
fanSpeed Integer32
}
fanIndex OBJECT-TYPE
SYNTAX Integer32 (0..65535)
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Integer reference number (row number) for the fan mib."
::= { fanEntry 1 }
fanSpeed OBJECT-TYPE
SYNTAX Integer32 (0..65535)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Integer reference number (row number) for the fan mib."
::= { fanEntry 2 }
tempTable OBJECT-TYPE
SYNTAX SEQUENCE OF TempEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Temperature watching information."
::= { netonixSwitch 3 }
tempEntry OBJECT-TYPE
SYNTAX TempEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "An entry containing a temperature sensor."
INDEX { tempIndex }
::= { tempTable 1 }
TempEntry ::= SEQUENCE {
tempIndex Integer32,
tempDescription DisplayString,
temp Integer32
}
tempIndex OBJECT-TYPE
SYNTAX Integer32 (0..65535)
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Integer reference number (row number) for the temp mib."
::= { tempEntry 1 }
tempDescription OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Description of this temperature sensor"
::= { tempEntry 2 }
temp OBJECT-TYPE
SYNTAX Integer32 (0..65535)
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The current temperature for this sensor"
::= { tempEntry 3 }
voltageTable OBJECT-TYPE
SYNTAX SEQUENCE OF VoltageEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Voltage watching information."
::= { netonixSwitch 4 }
voltageEntry OBJECT-TYPE
SYNTAX VoltageEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "An entry containing a voltage sensor."
INDEX { voltageIndex }
::= { voltageTable 1 }
VoltageEntry ::= SEQUENCE {
voltageIndex Integer32,
voltageDescription DisplayString,
voltage VoltageTC
}
voltageIndex OBJECT-TYPE
SYNTAX Integer32 (0..65535)
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION "Integer reference number (row number) for the voltage mib."
::= { voltageEntry 1 }
voltageDescription OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION "Description of this voltage sensor"
::= { voltageEntry 2 }
voltage OBJECT-TYPE
SYNTAX VoltageTC
MAX-ACCESS read-only
STATUS current
DESCRIPTION "The current voltage for this sensor"
::= { voltageEntry 3 }
END