mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
223 lines
8.0 KiB
PHP
223 lines
8.0 KiB
PHP
<?php
|
|
|
|
|
|
function format_bytes_billing($value)
|
|
{
|
|
global $config;
|
|
|
|
return format_number($value, $config['billing']['base']).'B';
|
|
}//end format_bytes_billing()
|
|
|
|
|
|
function format_bytes_billing_short($value)
|
|
{
|
|
global $config;
|
|
|
|
return format_number($value, $config['billing']['base'], 2, 3);
|
|
}//end format_bytes_billing_short()
|
|
|
|
|
|
function getDates($dayofmonth, $months = 0)
|
|
{
|
|
$dayofmonth = zeropad($dayofmonth);
|
|
$year = date('Y');
|
|
$month = date('m');
|
|
|
|
if (date('d') > $dayofmonth) {
|
|
// Billing day is past, so it is next month
|
|
$date_end = date_create($year.'-'.$month.'-'.$dayofmonth);
|
|
$date_start = date_create($year.'-'.$month.'-'.$dayofmonth);
|
|
date_add($date_end, date_interval_create_from_date_string('1 month'));
|
|
} else {
|
|
// Billing day will happen this month, therefore started last month
|
|
$date_end = date_create($year.'-'.$month.'-'.$dayofmonth);
|
|
$date_start = date_create($year.'-'.$month.'-'.$dayofmonth);
|
|
date_sub($date_start, date_interval_create_from_date_string('1 month'));
|
|
}
|
|
|
|
if ($months > 0) {
|
|
date_sub($date_start, date_interval_create_from_date_string($months.' month'));
|
|
date_sub($date_end, date_interval_create_from_date_string($months.' month'));
|
|
}
|
|
|
|
// date_sub($date_start, date_interval_create_from_date_string('1 month'));
|
|
date_sub($date_end, date_interval_create_from_date_string('1 day'));
|
|
|
|
$date_from = date_format($date_start, 'Ymd').'000000';
|
|
$date_to = date_format($date_end, 'Ymd').'235959';
|
|
|
|
date_sub($date_start, date_interval_create_from_date_string('1 month'));
|
|
date_sub($date_end, date_interval_create_from_date_string('1 month'));
|
|
|
|
$last_from = date_format($date_start, 'Ymd').'000000';
|
|
$last_to = date_format($date_end, 'Ymd').'235959';
|
|
|
|
$return = array();
|
|
$return['0'] = $date_from;
|
|
$return['1'] = $date_to;
|
|
$return['2'] = $last_from;
|
|
$return['3'] = $last_to;
|
|
|
|
return ($return);
|
|
}//end getDates()
|
|
|
|
function getPredictedUsage($bill_day, $cur_used)
|
|
{
|
|
|
|
$tmp = getDates($bill_day, 0);
|
|
$start = new DateTime($tmp[0], new DateTimeZone(date_default_timezone_get()));
|
|
$end = new DateTime($tmp[1], new DateTimeZone(date_default_timezone_get()));
|
|
$now = new DateTime(date("Y-m-d"), new DateTimeZone(date_default_timezone_get()));
|
|
$total = $end->diff($start)->format("%a");
|
|
$since = $now->diff($start)->format("%a");
|
|
return($cur_used/$since*$total);
|
|
}
|
|
|
|
function getValue($host, $port, $id, $inout)
|
|
{
|
|
global $config;
|
|
|
|
$oid = 'IF-MIB::ifHC'.$inout.'Octets.'.$id;
|
|
$device = dbFetchRow("SELECT * from `devices` WHERE `hostname` = '".mres($host)."' LIMIT 1");
|
|
$value = snmp_get($device, $oid, '-O qv');
|
|
|
|
if (!is_numeric($value)) {
|
|
$oid = 'IF-MIB::if'.$inout.'Octets.'.$id;
|
|
$value = snmp_get($device, $oid, '-Oqv');
|
|
}
|
|
|
|
return $value;
|
|
}//end getValue()
|
|
|
|
function getLastPortCounter($port_id, $bill_id)
|
|
{
|
|
$return = array();
|
|
$row = dbFetchRow("SELECT timestamp, in_counter, in_delta, out_counter, out_delta FROM bill_port_counters WHERE `port_id` = ? AND `bill_id` = ?", array($port_id, $bill_id));
|
|
if (!is_null($row)) {
|
|
$return[timestamp] = $row['timestamp'];
|
|
$return[in_counter] = $row['in_counter'];
|
|
$return[in_delta] = $row['in_delta'];
|
|
$return[out_counter] = $row['out_counter'];
|
|
$return[out_delta] = $row['out_delta'];
|
|
$return[state] = 'ok';
|
|
} else {
|
|
$return[state] = 'failed';
|
|
}
|
|
return $return;
|
|
}//end getLastPortCounter()
|
|
|
|
|
|
function getLastMeasurement($bill_id)
|
|
{
|
|
$return = array();
|
|
$row = dbFetchRow("SELECT timestamp,delta,in_delta,out_delta FROM bill_data WHERE bill_id = ? ORDER BY timestamp DESC LIMIT 1", array($bill_id));
|
|
if (!is_null($row)) {
|
|
$return[delta] = $row['delta'];
|
|
$return[delta_in] = $row['delta_in'];
|
|
$return[delta_out] = $row['delta_out'];
|
|
$return[timestamp] = $row['timestamp'];
|
|
$return[state] = 'ok';
|
|
} else {
|
|
$return[state] = 'failed';
|
|
}
|
|
return ($return);
|
|
}//end getLastMeasurement()
|
|
|
|
|
|
function get95thin($bill_id, $datefrom, $dateto)
|
|
{
|
|
$mq_sql = "SELECT count(delta) FROM bill_data WHERE bill_id = '".mres($bill_id)."'";
|
|
$mq_sql .= " AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."'";
|
|
$measurements = dbFetchCell($mq_sql);
|
|
$measurement_95th = (round(($measurements / 100 * 95)) - 1);
|
|
|
|
$q_95_sql = "SELECT (in_delta / period * 8) AS rate FROM bill_data WHERE bill_id = '".mres($bill_id)."'";
|
|
$q_95_sql .= " AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."' ORDER BY rate ASC";
|
|
$a_95th = dbFetchColumn($q_95_sql);
|
|
$m_95th = $a_95th[$measurement_95th];
|
|
|
|
return (round($m_95th, 2));
|
|
}//end get95thin()
|
|
|
|
|
|
function get95thout($bill_id, $datefrom, $dateto)
|
|
{
|
|
$mq_sql = "SELECT count(delta) FROM bill_data WHERE bill_id = '".mres($bill_id)."'";
|
|
$mq_sql .= " AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."'";
|
|
$measurements = dbFetchCell($mq_sql);
|
|
$measurement_95th = (round(($measurements / 100 * 95)) - 1);
|
|
|
|
$q_95_sql = "SELECT (out_delta / period * 8) AS rate FROM bill_data WHERE bill_id = '".mres($bill_id)."'";
|
|
$q_95_sql .= " AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."' ORDER BY rate ASC";
|
|
|
|
$a_95th = dbFetchColumn($q_95_sql);
|
|
$m_95th = $a_95th[$measurement_95th];
|
|
|
|
return (round($m_95th, 2));
|
|
}//end get95thout()
|
|
|
|
|
|
function getRates($bill_id, $datefrom, $dateto)
|
|
{
|
|
$data = array();
|
|
$mq_text = 'SELECT count(delta) FROM bill_data ';
|
|
$mq_text .= " WHERE bill_id = '".mres($bill_id)."'";
|
|
$mq_text .= " AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."'";
|
|
$measurements = dbFetchCell($mq_sql);
|
|
$measurement_95th = (round(($measurements / 100 * 95)) - 1);
|
|
|
|
$q_95_sql = "SELECT delta FROM bill_data WHERE bill_id = '".mres($bill_id)."'";
|
|
$q_95_sql .= " AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."' ORDER BY delta ASC";
|
|
|
|
$a_95th = dbFetchColumn($q_95_sql);
|
|
$m_95th = $a_95th[$measurement_95th];
|
|
|
|
$sum_data = getSum($bill_id, $datefrom, $dateto);
|
|
$mtot = $sum_data['total'];
|
|
$mtot_in = $sum_data['inbound'];
|
|
$mtot_out = $sum_data['outbound'];
|
|
$ptot = $sum_data['period'];
|
|
|
|
$data['rate_95th_in'] = get95thIn($bill_id, $datefrom, $dateto);
|
|
$data['rate_95th_out'] = get95thOut($bill_id, $datefrom, $dateto);
|
|
|
|
if ($data['rate_95th_out'] > $data['rate_95th_in']) {
|
|
$data['rate_95th'] = $data['rate_95th_out'];
|
|
$data['dir_95th'] = 'out';
|
|
} else {
|
|
$data['rate_95th'] = $data['rate_95th_in'];
|
|
$data['dir_95th'] = 'in';
|
|
}
|
|
|
|
$data['total_data'] = $mtot;
|
|
$data['total_data_in'] = $mtot_in;
|
|
$data['total_data_out'] = $mtot_out;
|
|
$data['rate_average'] = ($mtot / $ptot * 8);
|
|
$data['rate_average_in'] = ($mtot_in / $ptot * 8);
|
|
$data['rate_average_out'] = ($mtot_out / $ptot * 8);
|
|
|
|
// print_r($data);
|
|
return ($data);
|
|
}//end getRates()
|
|
|
|
|
|
function getTotal($bill_id, $datefrom, $dateto)
|
|
{
|
|
$mtot = dbFetchCell("SELECT SUM(delta) FROM bill_data WHERE bill_id = '".mres($bill_id)."' AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."'");
|
|
return ($mtot);
|
|
}//end getTotal()
|
|
|
|
|
|
function getSum($bill_id, $datefrom, $dateto)
|
|
{
|
|
$sum = dbFetchRow("SELECT SUM(period) as period, SUM(delta) as total, SUM(in_delta) as inbound, SUM(out_delta) as outbound FROM bill_data WHERE bill_id = '".mres($bill_id)."' AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."'");
|
|
return ($sum);
|
|
}//end getSum()
|
|
|
|
|
|
function getPeriod($bill_id, $datefrom, $dateto)
|
|
{
|
|
$ptot = dbFetchCell("SELECT SUM(period) FROM bill_data WHERE bill_id = '".mres($bill_id)."' AND timestamp > '".mres($datefrom)."' AND timestamp <= '".mres($dateto)."'");
|
|
return ($ptot);
|
|
}//end getPeriod()
|