1<?php 2 3/** 4 * Observium 5 * 6 * This file is part of Observium. 7 * 8 * @package observium 9 * @subpackage poller 10 * @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited 11 * 12 */ 13 14$table_rows = array(); 15$query = 'SELECT * FROM `lsp` WHERE `device_id` = ?'; 16 17foreach (dbFetchRows($query, array($device['device_id'])) as $lsp) 18{ 19 // save some previous values 20 $lsp_octets = $lsp['lsp_octets']; 21 $lsp_packets = $lsp['lsp_packets']; 22 $lsp_bandwidth = $lsp['lsp_bandwidth']; 23 $lsp_polled = $lsp['lsp_polled']; 24 $lsp_transitions = $lsp['lsp_transitions']; 25 $lsp_path_changes = $lsp['lsp_path_changes']; 26 27 $file = $config['install_dir'] . "/includes/polling/lsp/" . $lsp['lsp_mib'] . ".inc.php"; 28 if (is_file($file)) 29 { 30 include($file); 31 } 32 else 33 { 34 continue; 35 } 36 37 if (OBS_DEBUG && count($lsp)) 38 { 39 print_r($lsp); 40 } 41 42 $polled_period = $polled - $lsp_polled; 43 $octets_diff = $lsp['lsp_octets'] - $lsp_octets; 44 $packets_diff = $lsp['lsp_packets'] - $lsp_packets; 45 $octets_rate = 0; 46 $packets_rate = 0; 47 if ($octets_diff > 0) 48 { 49 $octets_rate = $octets_diff / $polled_period; 50 } 51 if ($packets_diff > 0) 52 { 53 $packets_rate = $packets_diff / $polled_period; 54 } 55 56 // rrd naming 57 $rrd_filename = "lsp-" . $lsp['lsp_mib'] . '-' . $lsp['lsp_id'] . ".rrd"; 58 $rrd_uptime = "lsp-" . $lsp['lsp_mib'] . '-uptime-' . $lsp['lsp_id'] . ".rrd"; 59 $rrd_stats = "lsp-" . $lsp['lsp_mib'] . '-stats-' . $lsp['lsp_id'] . ".rrd"; 60 61 // uptime graph 62 $rrd_ds = ""; 63 $uptime_values = array(); 64 foreach (array('uptime', 'total_uptime', 'primary_uptime') as $ds) 65 { 66 $rrd_ds .= "DS:" . $ds . ":GAUGE:600:0:U "; 67 $uptime_values[] = $lsp["lsp_${ds}"]; 68 } 69 if (count($uptime_values)) 70 { 71 rrdtool_create($device, $rrd_uptime, $rrd_ds); 72 rrdtool_update($device, $rrd_uptime, $uptime_values); 73 $graphs['lsp_uptime'] = TRUE; 74 } 75 unset($uptime_values); 76 77 // stats graph 78 $rrd_ds = ""; 79 $stats_values = array(); 80 foreach (array('transitions', 'path_changes') as $ds) 81 { 82 $rrd_ds .= "DS:" . $ds . ":COUNTER:600:0:U "; 83 $stats_values[] = $lsp["lsp_${ds}"]; 84 } 85 if (count($stats_values)) 86 { 87 rrdtool_create($device, $rrd_stats, $rrd_ds); 88 rrdtool_update($device, $rrd_stats, $stats_values); 89 $graphs['lsp_stats'] = TRUE; 90 } 91 unset($stats_values); 92 93 // octets/packets/bandwidth graph 94 $lsp_values = array(); 95 $rrd_ds = "DS:bandwidth:GAUGE:600:0:U "; 96 $lsp_values[] = $lsp['lsp_bandwidth']; // should always get here in bps 97 foreach (array('octets', 'packets') as $ds) 98 { 99 $rrd_ds .= "DS:" . $ds . ":COUNTER:600:0:" . $config['max_port_speed'] . ' '; 100 $lsp_values[] = $lsp["lsp_${ds}"]; 101 } 102 if (count($lsp_values)) 103 { 104 rrdtool_create($device, $rrd_filename, $rrd_ds); 105 rrdtool_update($device, $rrd_filename, $lsp_values); 106 $graphs['lsp_bits'] = TRUE; 107 $graphs['lsp_pkts'] = TRUE; 108 } 109 unset($lsp_values); 110 111 $update = dbUpdate(array('lsp_polled' => $polled, 112 'lsp_octets' => $lsp['lsp_octets'], 113 'lsp_packets' => $lsp['lsp_packets'], 114 'lsp_bandwidth' => $lsp['lsp_bandwidth'], 115 'lsp_transitions' => $lsp['lsp_transitions'], 116 'lsp_path_changes' => $lsp['lsp_path_changes'], 117 'lsp_uptime' => $lsp['lsp_uptime'], 118 'lsp_total_uptime' => $lsp['lsp_total_uptime'], 119 'lsp_primary_uptime' => $lsp['lsp_primary_uptime'], 120 'lsp_octets_rate' => $octets_rate, 121 'lsp_packets_rate' => $packets_rate), 'lsp', '`lsp_id` = ?', array($lsp['lsp_id'])); 122 123 // event logs 124 if ($lsp_bandwidth != $lsp['lsp_bandwidth']) 125 { 126 log_event($lsp['lsp_proto'] . ' LSP bandwidth changed: ' . formatRates($lsp_bandwidth) . ' -> ' . formatRates($lsp['lsp_bandwidth']) . ' (' . $lsp['lsp_name'] . ')', $device, 'lsp', $lsp['lsp_id']); 127 } 128 if ($lsp_transitions < $lsp['lsp_transitions']) 129 { 130 log_event($lsp['lsp_proto'] . ' LSP transitioned (' . $lsp['lsp_name'] . ')', $device, 'lsp', $lsp['lsp_id']); 131 } 132 if ($lsp_path_changes < $lsp['lsp_path_changes']) 133 { 134 log_event($lsp['lsp_proto'] . ' LSP changed path (' . $lsp['lsp_name'] . ')', $device, 'lsp', $lsp['lsp_id']); 135 } 136 137 // Check alerts 138 check_entity('lsp', $lsp, array('lsp_octets_rate' => $octets_rate, 'lsp_packets_rate' => $packets_rate, 'lsp_bandwidth' => $lsp['lsp_bandwidth'])); 139 140 $table_row = array(); 141 $table_row[] = $lsp['lsp_name']; 142 $table_row[] = strtoupper($lsp['lsp_mib']); 143 $table_row[] = $lsp['lsp_proto']; 144 $table_row[] = $lsp['lsp_index']; 145 $table_rows[] = $table_row; 146 unset($table_row); 147} 148 149$headers = array('%WName%n', '%WMIB%n', '%WProto%n', '%WIndex%n'); 150print_cli_table($table_rows, $headers); 151 152unset($lsps_cache, $lsp, $table, $table_row, $table_rows); 153 154// EOF 155