This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Deon George 130a87aa9a Major work to domain and hosting
Minor updates for ADSL services
Updates to Sort::MAsort()
Move core OSB items under application/
Moved ACCOUNT functions under application
Minor updates to task
2012-01-12 19:53:55 +11:00

185 lines
6.5 KiB
PHP

<?php defined('SYSPATH') or die('No direct access allowed.');
/**
* This class is able to collect traffic information for Exetel HSPA
*
* Traffic information is collected by each service, and cached,
* returning just the date in question.
*
* @package OSB
* @subpackage Service
* @category Helpers
* @author Deon George
* @copyright (c) 2010 Open Source Billing
* @license http://dev.osbill.net/license.html
*/
class Service_Traffic_ADSL_ExetelHSPA extends Service_Traffic_ADSL {
private $login_user_field = 'login_name';
private $login_pass_field = 'password';
private $date_field = 'date';
static $return = array();
/**
* Get the data for Exetel HSPA services
*
* @return array
*/
protected function getdata($date) {
// Assume we have a good fetch, unless otherwise specified.
$this->fetchresult = TRUE;
// If we have already collected the date data, return it.
if (! empty(Service_Traffic_ADSL_ExetelHSPA::$return[$date]))
return Service_Traffic_ADSL_ExetelHSPA::$return[$date];
include_once 'includes/kohana/modules/simplehtmldom/classes/simple_html_dom.php';
// Find our services that need to be collected this way.
$update = array();
foreach ($this->so->services() as $so) {
if ($so->plugin()->service_stats_collect AND $so->plugin()->service_stats_lastupdate < $date) {
// Start Session
$request = Request::factory($this->so->stats_url)
->method('POST')
->post($this->login_user_field,$so->plugin()->service_username)
->post($this->login_pass_field,$so->plugin()->service_password)
->post('doLogin',1)
->post('submit','Login');
$request->get_client()->options($this->curlopts+array(
CURLOPT_COOKIEJAR=>sprintf('/tmp/usage.cookies.%s.txt',$so->plugin()->service_number),
));
$response = $request->execute();
$data = $response->body();
if (! $data) {
// @todo Log into a log file
printf('Bad fetch for %s [%s]',$so->plugin()->service_number,$this->so->stats_lastupdate);
#$html = new simple_html_dom();
#$html->load($data);
#$html->save(sprintf('/afs/local/tmp/usage.%s.%s.login.html',$so->plugin()->service_number,'login'));
continue;
}
for ($servicedate=date('Y-m-d',strtotime($this->so->stats_lastupdate.'+1 day'));
$servicedate <= $this->today;
$servicedate=date('Y-m-d',strtotime('+1 month',strtotime(date('Y-m',strtotime($servicedate)).'-01')))) {
#print_r(array('sn'=>$so->plugin()->service_number,'sd'=>$servicedate));
$lastday = date('Y-m-d',strtotime('-1 second',strtotime('+1 month',strtotime(date('Y-m',strtotime($servicedate)).'-01'))));
if (strtotime($lastday) > time())
$lastday = date('Y-m-d',strtotime('yesterday'));
$html = new simple_html_dom();
$notdebug = TRUE;
if ($notdebug) {
$request = Request::factory($this->so->stats_url.'usage_customize_query.php')
->method('POST')
->post('year_search_key',date('Y',strtotime($servicedate)))
->post('month_search_key',date('m',strtotime($servicedate)))
->post('start_day_search_key',date('d',strtotime($servicedate)))
->post('end_day_search_key',date('d',strtotime($lastday)))
->post('do_usage_search',1);
$request->get_client()->options($this->curlopts+array(
CURLOPT_COOKIEFILE=>sprintf('/tmp/usage.cookies.%s.txt',$so->plugin()->service_number),
));
$response = $request->execute();
$result = $response->body();
$html->load($result);
#$html->save(sprintf('/afs/local/tmp/usage.%s.%s.html',$so->plugin()->service_number,$servicedate)); die();
} else {
$html->load_file(sprintf('/afs/local/tmp/usage.%s.%s.html',$so->plugin()->service_number,$servicedate));
}
$header = array();
$data = array();
foreach ($html->find('fieldset') as $index => $fieldset) {
if (! preg_match('/^Usage Detail/',$fieldset->find('legend',0)->plaintext))
continue;
#echo "X:";print_r($fieldset->find('table',0)->find('tr')->plaintext); echo "\n";
foreach ($fieldset->find('table',0)->find('tr') as $key => $values) {
foreach ($values->children() as $a => $b) {
#print_r(array('a'=>$a,'b'=>$b));
# Header
if ($key == 0) {
switch ($b->plaintext) {
case 'Date': $header[$a] = 'date'; break;
case 'OffPeak Upload': $header[$a] = 'up_offpeak'; break;
case 'Peak Upload': $header[$a] = 'up_peak'; break;
case 'Upload': $header[$a] = 'up_peak'; break;
case 'OffPeak Download': $header[$a] = 'down_offpeak'; break;
case 'Peak Download': $header[$a] = 'down_peak'; break;
case 'Download': $header[$a] = 'down_peak'; break;
case 'Duration': break;
case 'Total': break;
default:
printf('Unkown header :%s',$b->plaintext);
$this->fetchresult = FALSE;
continue;
}
#echo "INDEX: $key:$a\n";
#echo "TAG: ".$b->tag."\n";
#echo "HEADER: ".$b->plaintext."\n";
# Data
} else {
if (isset($header[$a]))
$data[$header[$a]] = $b->plaintext;
#echo "INDEX: $key:$a\n";
#echo "TAG: ".$b->tag."\n";
#echo "VALUES: ".$b->plaintext."\n";
}
}
#print_r($data);
if (isset($data['date']) && preg_match('/^[0-9]{4}/',$data['date'])) {
$sdate = date('Y-m-d',strtotime($data['date']));
unset($data['date']);
if (isset($update[$so->plugin()->service_number][$sdate]))
foreach ($data as $key => $value)
$update[$so->plugin()->service_number][$sdate][$key] += $value;
else
$update[$so->plugin()->service_number][$sdate] = $data;
$update[$so->plugin()->service_number][$sdate]['service'] = $so->plugin()->service_number;
$update[$so->plugin()->service_number][$sdate]['date'] = $sdate;
}
}
}
}
// If we got here and have data, we had a good fetch, update the stats date
$so->plugin()->service_stats_lastupdate = $lastday;
$so->plugin()->save();
}
}
// If there are no updates, return an empty array
if (! $update)
return array();
// Reformat the data into date order.
foreach ($update as $service => $sdata)
foreach ($sdata as $sdate => $details)
Service_Traffic_ADSL_ExetelHSPA::$return[$sdate][$service] = $details;
// If the date we want is empty, return an array
if (empty(Service_Traffic_ADSL_ExetelHSPA::$return[$date]))
return array();
// Return the date we asked for
return Service_Traffic_ADSL_ExetelHSPA::$return[$date];
}
}
?>