app: Add GPSD application (#4754)

This commit is contained in:
Karl Shea
2016-10-08 15:25:50 -05:00
committed by Neil Lathwood
parent 801f8e9084
commit daf2cf7a24
9 changed files with 285 additions and 5 deletions

View File

@@ -8,6 +8,7 @@ Different applications support a variety of ways collect data: by direct connect
1. [Apache](#apache) - SNMP extend 1. [Apache](#apache) - SNMP extend
1. [BIND9/named](#bind9-aka-named) - Agent 1. [BIND9/named](#bind9-aka-named) - Agent
1. [DHCP Stats](#dhcp-stats) - SNMP extend 1. [DHCP Stats](#dhcp-stats) - SNMP extend
1. [GPSD](#gpsd) - Agent
1. [Mailscanner](#mailscanner) - SNMP extend 1. [Mailscanner](#mailscanner) - SNMP extend
1. [Memcached](#memcached) - SNMP extend 1. [Memcached](#memcached) - SNMP extend
1. [MySQL](#mysql) - Agent 1. [MySQL](#mysql) - Agent
@@ -95,6 +96,18 @@ extend dhcpstats /etc/snmp/dhcp-status.sh
### GSPD
A small shell script that reports GPSD status.
##### Agent
[Install the agent](#agent-setup) on this device if it isn't already and copy the `gpsd` script to `/usr/lib/check_mk_agent/local/`
You may need to configure `$server` or `$port`.
Verify it is working by running `/usr/lib/check_mk_agent/local/gpsd`
### Mailscanner ### Mailscanner
##### SNMP Extend ##### SNMP Extend
1. Download the script onto the desired host (the host must be added to LibreNMS devices) 1. Download the script onto the desired host (the host must be added to LibreNMS devices)

View File

@@ -94,6 +94,9 @@ function nicecase($item)
case 'ups-apcups': case 'ups-apcups':
return 'UPS apcups'; return 'UPS apcups';
case 'gpsd':
return 'GPSD';
default: default:
return ucfirst($item); return ucfirst($item);
} }

View File

@@ -0,0 +1,50 @@
<?php
/*
* 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/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2016 Karl Shea, LibreNMS
* @author Karl Shea <karl@karlshea.com>
*
*/
require 'includes/graphs/common.inc.php';
$scale_min = 0;
$colours = 'mixed';
$unit_text = 'DOP';
$nototal = 1;
$rrd_filename = rrd_name($device['hostname'], array('app', 'gpsd', $app['app_id']));
$array = array(
'hdop' => array('descr' => 'Horiontal'),
'vdop' => array('descr' => 'Vertical'),
);
$i = 0;
if (rrdtool_check_rrd_exists($rrd_filename)) {
foreach ($array as $ds => $vars) {
$rrd_list[$i]['filename'] = $rrd_filename;
$rrd_list[$i]['descr'] = $vars['descr'];
$rrd_list[$i]['ds'] = $ds;
$rrd_list[$i]['colour'] = $config['graph_colours'][$colours][$i+2];
$i++;
}
} else {
echo "file missing: $file";
}
require 'includes/graphs/generic_multi_line.inc.php';

View File

@@ -0,0 +1,40 @@
<?php
/*
* 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/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2016 Karl Shea, LibreNMS
* @author Karl Shea <karl@karlshea.com>
*
*/
require 'includes/graphs/common.inc.php';
$scale_min = 0;
$ds = 'mode';
$colour_area = 'FFCECE';
$colour_line = '880000';
$colour_area_max = 'FFCCCC';
$graph_max = 0;
$unit_text = 'Mode';
$gpsd = rrd_name($device['hostname'], array('app', 'gpsd', $app['app_id']));
if (rrdtool_check_rrd_exists($gpsd)) {
$rrd_filename = $gpsd;
} else {
echo "file missing: $rrd_filename";
}
require 'includes/graphs/generic_simplex.inc.php';

View File

@@ -0,0 +1,51 @@
<?php
/*
* 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/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2016 Karl Shea, LibreNMS
* @author Karl Shea <karl@karlshea.com>
*
*/
require 'includes/graphs/common.inc.php';
$scale_min = 0;
$colours = 'mixed';
$unit_text = 'Satellites';
$nototal = 1;
$rrd_filename = rrd_name($device['hostname'], array('app', 'gpsd', $app['app_id']));
$array = array(
'satellites' => array('descr' => 'Visible', 'area' => true),
'satellites_used' => array('descr' => 'Used', 'area' => true),
);
$i = 0;
if (rrdtool_check_rrd_exists($rrd_filename)) {
foreach ($array as $ds => $vars) {
$rrd_list[$i]['filename'] = $rrd_filename;
$rrd_list[$i]['descr'] = $vars['descr'];
$rrd_list[$i]['ds'] = $ds;
$rrd_list[$i]['colour'] = $config['graph_colours'][$colours][$i];
$rrd_list[$i]['area'] = $vars['area'];
$i++;
}
} else {
echo "file missing: $file";
}
require 'includes/graphs/generic_multi_line.inc.php';

View File

@@ -120,6 +120,12 @@ $graphs['ups-apcups'] = array(
'voltage_input', 'voltage_input',
); );
$graphs['gpsd'] = array(
'satellites',
'dop',
'mode',
);
print_optionbar_start(); print_optionbar_start();
echo "<span style='font-weight: bold;'>Apps</span> &#187; "; echo "<span style='font-weight: bold;'>Apps</span> &#187; ";

View File

@@ -0,0 +1,49 @@
<?php
/*
* 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/>.
*
* @package LibreNMS
* @link http://librenms.org
* @copyright 2016 Karl Shea, LibreNMS
* @author Karl Shea <karl@karlshea.com>
*
*/
global $config;
$graphs = array(
'gpsd_satellites' => 'Satellites',
'gpsd_dop' => 'Dilution of Precision',
'gpsd_mode' => 'Fix type',
);
foreach ($graphs as $key => $text) {
$graph_type = $key;
$graph_array['height'] = '100';
$graph_array['width'] = '215';
$graph_array['to'] = $config['time']['now'];
$graph_array['id'] = $app['app_id'];
$graph_array['type'] = 'application_'.$key;
echo '<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">'.$text.'</h3>
</div>
<div class="panel-body">
<div class="row">';
include 'includes/print-graphrow.inc.php';
echo '</div>';
echo '</div>';
echo '</div>';
}

View File

@@ -0,0 +1,66 @@
<?php
/*
* 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/>.
*/
/*
* GPSD Statistics
* @author Karl Shea <karl@karlshea.com>
* @copyright 2016 Karl Shea, LibreNMS
* @license GPL
* @package LibreNMS
* @subpackage Polling
*/
$name = 'gpsd';
$app_id = $app['app_id'];
if (!empty($agent_data['app'][$name]) && $app_id > 0) {
echo ' '.$name;
$gpsd = $agent_data['app'][$name];
$gpsd_parsed = array();
foreach (explode("\n", $gpsd) as $line) {
list ($field, $data) = explode(':', $line);
$gpsd_parsed[$field] = $data;
}
$rrd_name = array('app', $name, $app_id);
$rrd_def = array(
'DS:mode:GAUGE:600:0:4',
'DS:hdop:GAUGE:600:0:100',
'DS:vdop:GAUGE:600:0:100',
'DS:satellites:GAUGE:600:0:40',
'DS:satellites_used:GAUGE:600:0:40',
);
$check_fields = array(
'mode',
'hdop',
'vdop',
'satellites',
'satellites_used',
);
$fields = array();
foreach ($check_fields as $field) {
if (!empty($gpsd_parsed[$field])) {
$fields[$field] = $gpsd_parsed[$field];
}
}
$tags = compact('name', 'app_id', 'rrd_name', 'rrd_def');
data_update($device, 'app', $tags, $fields);
}

View File

@@ -61,7 +61,9 @@ if ($device['os_group'] == 'unix') {
"powerdns-recursor", "powerdns-recursor",
"proxmox", "proxmox",
"rrdcached", "rrdcached",
"tinydns"); "tinydns",
"gpsd",
);
foreach (explode('<<<', $agent_raw) as $section) { foreach (explode('<<<', $agent_raw) as $section) {
list($section, $data) = explode('>>>', $section); list($section, $data) = explode('>>>', $section);