2010-09-03 18:26:59 +00:00
#!/usr/bin/env php
2008-03-09 21:13:27 +00:00
< ? php
2015-07-13 20:10:26 +02:00
/*
2013-10-28 12:01:36 -07:00
* Observium
2012-05-09 10:01:42 +00:00
*
2013-10-28 12:01:36 -07:00
* This file is part of Observium .
2012-05-09 10:01:42 +00:00
*
2013-10-28 12:01:36 -07:00
* @ package observium
* @ subpackage billing
* @ author Adam Armstrong < adama @ memetic . org >
* @ copyright ( C ) 2006 - 2012 Adam Armstrong
2012-05-09 10:01:42 +00:00
*/
2012-04-08 10:44:41 +00:00
chdir ( dirname ( $argv [ 0 ]));
2012-05-29 13:08:01 +00:00
// FIXME - implement cli switches, debugging, etc.
2015-07-13 20:10:26 +02:00
require 'includes/defaults.inc.php' ;
require 'config.php' ;
require 'includes/definitions.inc.php' ;
require 'includes/functions.php' ;
2012-05-29 13:08:01 +00:00
2015-07-13 20:10:26 +02:00
$iter = '0' ;
2008-03-09 21:13:27 +00:00
2011-10-01 14:54:06 +00:00
rrdtool_pipe_open ( $rrd_process , $rrd_pipes );
2015-07-13 20:10:26 +02:00
echo " Starting Polling Session ... \n \n " ;
2008-03-09 21:13:27 +00:00
2015-07-13 20:10:26 +02:00
foreach ( dbFetchRows ( 'SELECT * FROM `bills`' ) as $bill_data ) {
echo 'Bill : ' . $bill_data [ 'bill_name' ] . " \n " ;
2011-12-06 22:17:37 +00:00
2015-07-13 20:10:26 +02:00
// replace old bill_gb with bill_quota (we're now storing bytes, not gigabytes)
if ( $bill_data [ 'bill_type' ] == 'quota' && ! is_numeric ( $bill_data [ 'bill_quota' ])) {
$bill_data [ 'bill_quota' ] = ( $bill_data [ 'bill_gb' ] * $config [ 'billing' ][ 'base' ] * $config [ 'billing' ][ 'base' ]);
dbUpdate ( array ( 'bill_quota' => $bill_data [ 'bill_quota' ]), 'bills' , '`bill_id` = ?' , array ( $bill_data [ 'bill_id' ]));
echo 'Quota -> ' . $bill_data [ 'bill_quota' ];
}
2011-12-06 22:17:37 +00:00
2015-07-13 20:10:26 +02:00
CollectData ( $bill_data [ 'bill_id' ]);
$iter ++ ;
2008-03-09 21:13:27 +00:00
}
2015-07-13 20:10:26 +02:00
function CollectData ( $bill_id ) {
$port_list = dbFetchRows ( 'SELECT * FROM `bill_ports` as P, `ports` as I, `devices` as D WHERE P.bill_id=? AND I.port_id = P.port_id AND D.device_id = I.device_id' , array ( $bill_id ));
print_r ( $port_list );
$now = dbFetchCell ( 'SELECT NOW()' );
foreach ( $port_list as $port_data ) {
$port_id = $port_data [ 'port_id' ];
$host = $port_data [ 'hostname' ];
$port = $port_data [ 'port' ];
echo " \n Polling " . $port_data [ 'ifDescr' ] . ' on ' . $port_data [ 'hostname' ] . " \n " ;
$port_data [ 'in_measurement' ] = getValue ( $port_data [ 'hostname' ], $port_data [ 'port' ], $port_data [ 'ifIndex' ], 'In' );
$port_data [ 'out_measurement' ] = getValue ( $port_data [ 'hostname' ], $port_data [ 'port' ], $port_data [ 'ifIndex' ], 'Out' );
$last_data = getLastPortCounter ( $port_id , in );
if ( $last_data [ 'state' ] == 'ok' ) {
$port_data [ 'last_in_measurement' ] = $last_data [ counter ];
$port_data [ 'last_in_delta' ] = $last_data [ delta ];
2016-03-01 12:41:41 +00:00
if ( $port_data [ 'in_measurement' ] >= $port_data [ 'last_in_measurement' ]) {
2015-07-13 20:10:26 +02:00
$port_data [ 'in_delta' ] = ( $port_data [ 'in_measurement' ] - $port_data [ 'last_in_measurement' ]);
}
else {
$port_data [ 'in_delta' ] = $port_data [ 'last_in_delta' ];
}
}
else {
$port_data [ 'in_delta' ] = '0' ;
}
dbInsert ( array ( 'port_id' => $port_id , 'timestamp' => $now , 'counter' => $port_data [ 'in_measurement' ], 'delta' => $port_data [ 'in_delta' ]), 'port_in_measurements' );
$last_data = getLastPortCounter ( $port_id , out );
if ( $last_data [ state ] == 'ok' ) {
$port_data [ 'last_out_measurement' ] = $last_data [ counter ];
$port_data [ 'last_out_delta' ] = $last_data [ delta ];
2016-03-01 12:41:41 +00:00
if ( $port_data [ 'out_measurement' ] >= $port_data [ 'last_out_measurement' ]) {
2015-07-13 20:10:26 +02:00
$port_data [ 'out_delta' ] = ( $port_data [ 'out_measurement' ] - $port_data [ 'last_out_measurement' ]);
}
else {
$port_data [ 'out_delta' ] = $port_data [ 'last_out_delta' ];
}
}
else {
$port_data [ 'out_delta' ] = '0' ;
}
dbInsert ( array ( 'port_id' => $port_id , 'timestamp' => $now , 'counter' => $port_data [ 'out_measurement' ], 'delta' => $port_data [ 'out_delta' ]), 'port_out_measurements' );
$delta = ( $delta + $port_data [ 'in_delta' ] + $port_data [ 'out_delta' ]);
$in_delta = ( $in_delta + $port_data [ 'in_delta' ]);
$out_delta = ( $out_delta + $port_data [ 'out_delta' ]);
} //end foreach
$last_data = getLastMeasurement ( $bill_id );
if ( $last_data [ state ] == 'ok' ) {
$prev_delta = $last_data [ delta ];
$prev_in_delta = $last_data [ in_delta ];
$prev_out_delta = $last_data [ out_delta ];
$prev_timestamp = $last_data [ timestamp ];
$period = dbFetchCell ( " SELECT UNIX_TIMESTAMP(CURRENT_TIMESTAMP()) - UNIX_TIMESTAMP(' " . mres ( $prev_timestamp ) . " ') " );
2011-03-11 18:03:49 +00:00
}
2015-07-13 20:10:26 +02:00
else {
$prev_delta = '0' ;
$period = '0' ;
$prev_in_delta = '0' ;
$prev_out_delta = '0' ;
2011-03-11 18:03:49 +00:00
}
2008-03-09 21:13:27 +00:00
2015-07-13 20:10:26 +02:00
if ( $delta < '0' ) {
$delta = $prev_delta ;
$in_delta = $prev_in_delta ;
$out_delta = $prev_out_delta ;
}
if ( $period < '0' ) {
logfile ( " BILLING: negative period! id: $bill_id period: $period delta: $delta in_delta: $in_delta out_delta: $out_delta " );
}
else {
dbInsert ( array ( 'bill_id' => $bill_id , 'timestamp' => $now , 'period' => $period , 'delta' => $delta , 'in_delta' => $in_delta , 'out_delta' => $out_delta ), 'bill_data' );
}
} //end CollectData()
2008-03-09 21:13:27 +00:00
2011-10-01 14:54:06 +00:00
2015-07-13 20:10:26 +02:00
if ( $argv [ 1 ]) {
CollectData ( $argv [ 1 ]);
}
rrdtool_pipe_close ( $rrd_process , $rrd_pipes );