138 lines
5.1 KiB
PHP
138 lines
5.1 KiB
PHP
<?php
|
|
/**
|
|
* Observium
|
|
*
|
|
* This file is part of Observium.
|
|
*
|
|
* @package observium
|
|
* @subpackage poller
|
|
* @copyright (C) Adam Armstrong
|
|
*
|
|
*/
|
|
|
|
$table_rows = [];
|
|
$query = 'SELECT * FROM `lsp` WHERE `device_id` = ?';
|
|
|
|
foreach (dbFetchRows($query, [$device['device_id']]) as $lsp) {
|
|
// save some previous values
|
|
$lsp_octets = $lsp['lsp_octets'];
|
|
$lsp_packets = $lsp['lsp_packets'];
|
|
$lsp_bandwidth = $lsp['lsp_bandwidth'];
|
|
$lsp_polled = $lsp['lsp_polled'];
|
|
$lsp_transitions = $lsp['lsp_transitions'];
|
|
$lsp_path_changes = $lsp['lsp_path_changes'];
|
|
|
|
$file = $config['install_dir'] . "/includes/polling/lsp/" . $lsp['lsp_mib'] . ".inc.php";
|
|
if (is_file($file)) {
|
|
include($file);
|
|
} else {
|
|
continue;
|
|
}
|
|
|
|
if (OBS_DEBUG && count($lsp)) {
|
|
print_r($lsp);
|
|
}
|
|
|
|
$polled_period = $polled - $lsp_polled;
|
|
$octets_diff = $lsp['lsp_octets'] - $lsp_octets;
|
|
$packets_diff = $lsp['lsp_packets'] - $lsp_packets;
|
|
$octets_rate = 0;
|
|
$packets_rate = 0;
|
|
if ($octets_diff > 0) {
|
|
$octets_rate = $octets_diff / $polled_period;
|
|
}
|
|
if ($packets_diff > 0) {
|
|
$packets_rate = $packets_diff / $polled_period;
|
|
}
|
|
|
|
// rrd naming
|
|
$rrd_filename = "lsp-" . $lsp['lsp_mib'] . '-' . $lsp['lsp_id'] . ".rrd";
|
|
$rrd_uptime = "lsp-" . $lsp['lsp_mib'] . '-uptime-' . $lsp['lsp_id'] . ".rrd";
|
|
$rrd_stats = "lsp-" . $lsp['lsp_mib'] . '-stats-' . $lsp['lsp_id'] . ".rrd";
|
|
|
|
// uptime graph
|
|
$rrd_ds = "";
|
|
$uptime_values = [];
|
|
foreach (['uptime', 'total_uptime', 'primary_uptime'] as $ds) {
|
|
$rrd_ds .= "DS:" . $ds . ":GAUGE:600:0:U ";
|
|
$uptime_values[] = $lsp["lsp_{$ds}"];
|
|
}
|
|
if (count($uptime_values)) {
|
|
rrdtool_create($device, $rrd_uptime, $rrd_ds);
|
|
rrdtool_update($device, $rrd_uptime, $uptime_values);
|
|
$graphs['lsp_uptime'] = TRUE;
|
|
}
|
|
unset($uptime_values);
|
|
|
|
// stats graph
|
|
$rrd_ds = "";
|
|
$stats_values = [];
|
|
foreach (['transitions', 'path_changes'] as $ds) {
|
|
$rrd_ds .= "DS:" . $ds . ":COUNTER:600:0:U ";
|
|
$stats_values[] = $lsp["lsp_{$ds}"];
|
|
}
|
|
if (count($stats_values)) {
|
|
rrdtool_create($device, $rrd_stats, $rrd_ds);
|
|
rrdtool_update($device, $rrd_stats, $stats_values);
|
|
$graphs['lsp_stats'] = TRUE;
|
|
}
|
|
unset($stats_values);
|
|
|
|
// octets/packets/bandwidth graph
|
|
$lsp_values = [];
|
|
$rrd_ds = "DS:bandwidth:GAUGE:600:0:U ";
|
|
$lsp_values[] = $lsp['lsp_bandwidth']; // should always get here in bps
|
|
foreach (['octets', 'packets'] as $ds) {
|
|
$rrd_ds .= "DS:" . $ds . ":COUNTER:600:0:" . $config['max_port_speed'] . ' ';
|
|
$lsp_values[] = $lsp["lsp_{$ds}"];
|
|
}
|
|
if (count($lsp_values)) {
|
|
rrdtool_create($device, $rrd_filename, $rrd_ds);
|
|
rrdtool_update($device, $rrd_filename, $lsp_values);
|
|
$graphs['lsp_bits'] = TRUE;
|
|
$graphs['lsp_pkts'] = TRUE;
|
|
}
|
|
unset($lsp_values);
|
|
|
|
$update = dbUpdate(['lsp_polled' => $polled,
|
|
'lsp_octets' => $lsp['lsp_octets'],
|
|
'lsp_packets' => $lsp['lsp_packets'],
|
|
'lsp_bandwidth' => $lsp['lsp_bandwidth'],
|
|
'lsp_transitions' => $lsp['lsp_transitions'],
|
|
'lsp_path_changes' => $lsp['lsp_path_changes'],
|
|
'lsp_uptime' => $lsp['lsp_uptime'],
|
|
'lsp_total_uptime' => $lsp['lsp_total_uptime'],
|
|
'lsp_primary_uptime' => $lsp['lsp_primary_uptime'],
|
|
'lsp_octets_rate' => $octets_rate,
|
|
'lsp_packets_rate' => $packets_rate], 'lsp', '`lsp_id` = ?', [$lsp['lsp_id']]);
|
|
|
|
// event logs
|
|
if ($lsp_bandwidth != $lsp['lsp_bandwidth']) {
|
|
log_event($lsp['lsp_proto'] . ' LSP bandwidth changed: ' . format_bps($lsp_bandwidth) . ' -> ' . format_bps($lsp['lsp_bandwidth']) . ' (' . $lsp['lsp_name'] . ')', $device, 'lsp', $lsp['lsp_id']);
|
|
}
|
|
if ($lsp_transitions < $lsp['lsp_transitions']) {
|
|
log_event($lsp['lsp_proto'] . ' LSP transitioned (' . $lsp['lsp_name'] . ')', $device, 'lsp', $lsp['lsp_id']);
|
|
}
|
|
if ($lsp_path_changes < $lsp['lsp_path_changes']) {
|
|
log_event($lsp['lsp_proto'] . ' LSP changed path (' . $lsp['lsp_name'] . ')', $device, 'lsp', $lsp['lsp_id']);
|
|
}
|
|
|
|
// Check alerts
|
|
check_entity('lsp', $lsp, ['lsp_octets_rate' => $octets_rate, 'lsp_packets_rate' => $packets_rate, 'lsp_bandwidth' => $lsp['lsp_bandwidth']]);
|
|
|
|
$table_row = [];
|
|
$table_row[] = $lsp['lsp_name'];
|
|
$table_row[] = strtoupper($lsp['lsp_mib']);
|
|
$table_row[] = $lsp['lsp_proto'];
|
|
$table_row[] = $lsp['lsp_index'];
|
|
$table_rows[] = $table_row;
|
|
unset($table_row);
|
|
}
|
|
|
|
$headers = ['%WName%n', '%WMIB%n', '%WProto%n', '%WIndex%n'];
|
|
print_cli_table($table_rows, $headers);
|
|
|
|
unset($lsps_cache, $lsp, $table, $table_row, $table_rows);
|
|
|
|
// EOF
|