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