374 lines
9.4 KiB
PHP
374 lines
9.4 KiB
PHP
|
<?php
|
||
|
|
||
|
$tool_graph_menu = array(array('title' => 'CCU',
|
||
|
'key' => 'ccu',
|
||
|
'uri' => 'tool_graphs.php?toolmode=ccu',
|
||
|
'tpl' => 'tool_graphs_ccu.tpl',
|
||
|
'access' => '',
|
||
|
),
|
||
|
array('title' => 'Tech Shard',
|
||
|
'key' => 'tech',
|
||
|
'uri' => 'tool_graphs.php?toolmode=tech',
|
||
|
'tpl' => 'tool_graphs_tech.tpl',
|
||
|
'access' => '',
|
||
|
),
|
||
|
array('title' => 'Hi-Res Shard',
|
||
|
'key' => 'hires',
|
||
|
'uri' => 'tool_graphs.php?toolmode=hires',
|
||
|
'tpl' => 'tool_graphs_hires.tpl',
|
||
|
'access' => '',
|
||
|
),
|
||
|
array('title' => 'Old',
|
||
|
'key' => 'old',
|
||
|
'uri' => 'tool_graphs.php?toolmode=old',
|
||
|
'tpl' => 'tool_graphs.tpl',
|
||
|
'access' => '',
|
||
|
),
|
||
|
);
|
||
|
|
||
|
$tool_hires_frames = array(array('title' => '10 seconds',
|
||
|
'value' => 10000,
|
||
|
'step' => 0,
|
||
|
'default' => false,
|
||
|
),
|
||
|
array('title' => '30 seconds',
|
||
|
'value' => 30000,
|
||
|
'step' => 0,
|
||
|
'default' => true,
|
||
|
),
|
||
|
array('title' => '90 seconds',
|
||
|
'value' => 90000,
|
||
|
'step' => 0,
|
||
|
'default' => false,
|
||
|
),
|
||
|
);
|
||
|
|
||
|
$tool_lowres_frames = array(array('title' => '20 minutes',
|
||
|
'value' => 1200,
|
||
|
'default' => false,
|
||
|
),
|
||
|
array('title' => '3 hours',
|
||
|
'value' => 10800,
|
||
|
'default' => false,
|
||
|
),
|
||
|
array('title' => '24 hours',
|
||
|
'value' => 86400,
|
||
|
'default' => true,
|
||
|
),
|
||
|
array('title' => '7 days',
|
||
|
'value' => 604800,
|
||
|
'default' => false,
|
||
|
),
|
||
|
array('title' => '30 days',
|
||
|
'value' => 2592000,
|
||
|
'default' => false,
|
||
|
),
|
||
|
array('title' => '90 days',
|
||
|
'value' => 7776000,
|
||
|
'default' => false,
|
||
|
),
|
||
|
);
|
||
|
|
||
|
function tool_graphs_time_frame_get_default($list)
|
||
|
{
|
||
|
reset($list);
|
||
|
foreach($list as $frame)
|
||
|
{
|
||
|
if ($frame['default'] == true) return $frame['value'];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function tool_graphs_menu_get_list()
|
||
|
{
|
||
|
global $tool_graph_menu;
|
||
|
global $nel_user;
|
||
|
|
||
|
$new_menu = array();
|
||
|
|
||
|
reset($tool_graph_menu);
|
||
|
foreach($tool_graph_menu as $menu_item)
|
||
|
{
|
||
|
if (($menu_item['access'] == '') || tool_admin_applications_check($menu_item['access']))
|
||
|
{
|
||
|
$new_menu[] = $menu_item;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $new_menu;
|
||
|
}
|
||
|
|
||
|
function tool_graphs_menu_get_item_from_key($key)
|
||
|
{
|
||
|
global $tool_graph_menu;
|
||
|
|
||
|
reset($tool_graph_menu);
|
||
|
foreach($tool_graph_menu as $tool_menu)
|
||
|
{
|
||
|
if ($tool_menu['key'] == $key) return $tool_menu;
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
function tool_graphs_find($needles, $list)
|
||
|
{
|
||
|
$result = array();
|
||
|
|
||
|
reset($needles);
|
||
|
foreach($needles as $needle)
|
||
|
{
|
||
|
if (isset($list[$needle['variable']]))
|
||
|
{
|
||
|
nt_common_add_debug("variable found ". $needle['variable']);
|
||
|
reset($list[$needle['variable']]);
|
||
|
foreach($list[$needle['variable']] as $var)
|
||
|
{
|
||
|
nt_common_add_debug("checking '". $needle['service'] ."' in '". $var['service'] ."'");
|
||
|
if (ereg("^". $needle['service'] .".*$",$var['service']))
|
||
|
{
|
||
|
nt_common_add_debug("adding ". $var['service']);
|
||
|
$result[] = $var;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
function tool_graphs_get_list_v2($dir, $shard_match, $high=false, $domain=false)
|
||
|
{
|
||
|
$data = array();
|
||
|
|
||
|
if (!ereg("^[a-zA-Z0-9_]+$",$shard_match) && !$domain) return $data;
|
||
|
|
||
|
if (substr($dir, -1) != '/') $dir .= '/';
|
||
|
|
||
|
if (is_dir($dir))
|
||
|
{
|
||
|
if ($handle = opendir($dir))
|
||
|
{
|
||
|
while (($file = readdir($handle)) !== false)
|
||
|
{
|
||
|
if (($file != '.') && ($file != '..'))
|
||
|
{
|
||
|
$filelist[] = $file;
|
||
|
}
|
||
|
}
|
||
|
closedir($handle);
|
||
|
|
||
|
sort($filelist);
|
||
|
nt_common_add_debug($filelist);
|
||
|
|
||
|
//fes_arispotle_01.NetSpeedLoop.hrd
|
||
|
//egs_arispotle.TickSpeedLoop.hrd
|
||
|
//$my_ereg = "^([^_]+_(". $shard_match .")(_[^\ \.])?)\.([^\ ]+)\.([hr])rd$";
|
||
|
//$my_ereg = "^([^_]+_(". $shard_match .")(_[^\ \.])?)\.([^\ ]+)\.rrd$";
|
||
|
$my_ereg = "^([^_]+(_[^_]+)?_(". $shard_match .")(_[^\ \.])?)\.([^.]+)\.". ($high === true ? 'h':'r') ."rd$";
|
||
|
nt_common_add_debug("using regexp: ".$my_ereg);
|
||
|
|
||
|
// 0: complete file name
|
||
|
// 1: service alias (eg. fes_arispotle_01)
|
||
|
// 2: n/a
|
||
|
// 3: shard (eg. arispotle)
|
||
|
// 4: n/a
|
||
|
// 5: variable (eg. NetSpeedLoop)
|
||
|
|
||
|
// this is special, mainly to catch domain wide variables, such as su.* which don't have a shard
|
||
|
$my_ereg2 = "^([^_]+(_[^_]+)?(_[^\ \.])?)\.([^.]+)\.". ($high === true ? 'h':'r') ."rd$";
|
||
|
nt_common_add_debug("using regexp2: ".$my_ereg2);
|
||
|
|
||
|
// 0: complete file name
|
||
|
// 1: service alias (eg. fes_arispotle_01)
|
||
|
// 2: n/a
|
||
|
// 3: n/a
|
||
|
// 4: variable (eg. NetSpeedLoop)
|
||
|
|
||
|
|
||
|
reset($filelist);
|
||
|
foreach($filelist as $file)
|
||
|
//while (($file = readdir($handle)) !== false)
|
||
|
{
|
||
|
//nt_common_add_debug("checking : ". $file);
|
||
|
if (ereg($my_ereg, $file, $params))
|
||
|
{
|
||
|
nt_common_add_debug("ok".$file);
|
||
|
//nt_common_add_debug($params);
|
||
|
$tmp = array( 'rd_file' => $params[0],
|
||
|
'service' => $params[1],
|
||
|
'shard' => $params[3],
|
||
|
'variable' => $params[5]);
|
||
|
|
||
|
$data[$params[5]][] = $tmp;
|
||
|
}
|
||
|
elseif (ereg($my_ereg2, $file, $params))
|
||
|
{
|
||
|
nt_common_add_debug("ok2".$file);
|
||
|
$tmp = array( 'rd_file' => $params[0],
|
||
|
'service' => $params[1],
|
||
|
'shard' => 'open',
|
||
|
'variable' => $params[4]);
|
||
|
|
||
|
$data[$params[4]][] = $tmp;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nt_common_add_debug(array(array_keys($data), $data));
|
||
|
|
||
|
return array('variables' => array_keys($data), 'datas' => $data);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function tool_graphs_get_list($dir, $shard_match)
|
||
|
{
|
||
|
$data = array();
|
||
|
|
||
|
if (substr($dir, -1) != '/') $dir .= '/';
|
||
|
|
||
|
if (is_dir($dir))
|
||
|
{
|
||
|
if ($handle = opendir($dir))
|
||
|
{
|
||
|
//fes_arispotle_01.NetSpeedLoop.hrd
|
||
|
//egs_arispotle.TickSpeedLoop.hrd
|
||
|
$my_ereg = "^([^_]+_(". $shard_match .")(_[^\ \.])?)\.([^\ ]+)\.([hr])rd$";
|
||
|
$my_ereg = "^([^_]+_(". $shard_match .")(_[^\ \.])?)\.([^\ ]+)\.rrd$";
|
||
|
$my_ereg = "^([^_]+(_[^_]+)?_(". $shard_match .")(_[^\ \.])?)\.([^.]+)\.rrd$";
|
||
|
//nt_common_add_debug($my_ereg);
|
||
|
|
||
|
// 0: complete file name
|
||
|
// 1: service alias (eg. fes_arispotle_01)
|
||
|
// 2: n/a
|
||
|
// 3: shard (eg. arispotle)
|
||
|
// 4: n/a
|
||
|
// 5: variable (eg. NetSpeedLoop)
|
||
|
// 6: graph type, h/r : high/low (removed)
|
||
|
|
||
|
while (($file = readdir($handle)) !== false)
|
||
|
{
|
||
|
if (($file != '.') && ($file != '..'))
|
||
|
{
|
||
|
//nt_common_add_debug("checking : ". $file);
|
||
|
if (ereg($my_ereg, $file, $params))
|
||
|
{
|
||
|
$high_file = str_replace('.rrd','.hrd',$file);
|
||
|
if (!file_exists($dir . $high_file)) $high_file = '';
|
||
|
|
||
|
//nt_common_add_debug($params);
|
||
|
$tmp = array( 'low_file' => $params[0],
|
||
|
'high_file' => $high_file,
|
||
|
'service' => $params[1],
|
||
|
'shard' => $params[3],
|
||
|
'variable' => $params[5]);
|
||
|
|
||
|
$data[$params[5]][] = $tmp;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
closedir($handle);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
nt_common_add_debug(array(array_keys($data), $data));
|
||
|
|
||
|
return array('variables' => array_keys($data), 'datas' => $data);
|
||
|
}
|
||
|
|
||
|
function tool_graphs_get_data($data, $variable, $service)
|
||
|
{
|
||
|
reset($data);
|
||
|
foreach($data as $svar => $sdata)
|
||
|
{
|
||
|
if ($svar == $variable)
|
||
|
{
|
||
|
reset($sdata);
|
||
|
foreach($sdata as $sidata)
|
||
|
{
|
||
|
if ($sidata['service'] == $service)
|
||
|
{
|
||
|
return $sidata;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
function tool_graphs_extract_mean_values($data)
|
||
|
{
|
||
|
$result = array('ref' => array(), 'val' => array());
|
||
|
|
||
|
$base = null;
|
||
|
|
||
|
reset($data);
|
||
|
foreach($data as $sdata)
|
||
|
{
|
||
|
$tmp_data = explode(':', $sdata);
|
||
|
|
||
|
// get reference as t0
|
||
|
if (!$base) $base = trim($tmp_data[1]);
|
||
|
|
||
|
$val_data = explode(' ', $tmp_data[2]);
|
||
|
|
||
|
$result['ref'][] = $tmp_data[1] - $base;
|
||
|
$result['val'][] = trim($val_data[1]);
|
||
|
}
|
||
|
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
function tool_graphs_xaxis_callback($aVal)
|
||
|
{
|
||
|
return ($aVal / 1000) .'k';
|
||
|
}
|
||
|
|
||
|
// ######################################################################################################################
|
||
|
// ######################################################################################################################
|
||
|
|
||
|
function tool_graphs_rrd_get_list($dir)
|
||
|
{
|
||
|
$dir_list = array();
|
||
|
|
||
|
if ($handle = opendir($dir))
|
||
|
{
|
||
|
while (false !== ($file = readdir($handle)))
|
||
|
{
|
||
|
if (($file != ".") && ($file != "..") && (substr($file, -4) == '.rrd'))
|
||
|
{
|
||
|
$dir_list[] = array('name' => $file, 'code' => base64_encode($file));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
closedir($handle);
|
||
|
}
|
||
|
|
||
|
return $dir_list;
|
||
|
}
|
||
|
|
||
|
function tool_graphs_build_rrd($fname,$period=0)
|
||
|
{
|
||
|
$rrdperiod = '-'. $period;
|
||
|
$rrdfile = RRD_PATH . $fname;
|
||
|
$webimage = GFX_PATH . $fname .'_'. $period .'.gif';
|
||
|
|
||
|
$opts = array( "--start", $rrdperiod, "DEF:val=". $rrdfile .":var:AVERAGE", "LINE2:val#0000FF");
|
||
|
$ret = rrd_graph($webimage, $opts, count($opts));
|
||
|
|
||
|
if ( is_array($ret) )
|
||
|
{
|
||
|
return array('status' => true, 'img' => $webimage);
|
||
|
}
|
||
|
|
||
|
$err = rrd_error();
|
||
|
return array('status' => false, 'error' => "Error: rrd_graph() -- $err");
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
?>
|