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