简介:这是改cacti源代码的一些经历的详细页面,介绍了和php,有关的知识、技巧、经验,和一些php源码等。
class='pingjiaF' frameborder='0' src='http://biancheng.dnbcw.info/pingjia.php?id=322417' scrolling='no'>
因为NetTeam面对大量的cacti图感到头疼,提了一些需求。早先提的需求是,将每台设备所有的流量图按端口流量大小来排序。方法蛮简单的。我在lib/html_tree.
php中写了两个函数,
traffic_sort和
get_rra_max,前一个函数用于将$graphs_array数组元素按一定的规则进行排序后返回一个新数组,
get_rra_max函数以graph_id为参数从rra中获取最大值。
function traffic_sort($graphs_array) {
$graphid_title_array = array();
$new_graphs_array = array();
foreach ($graphs_array as $key=>$value) {
$rra_max = get_rra_max($value['local_graph_id']);
$gid = $value['local_graph_id'];
$graphid_title_array["$gid"] = $value['title_cache'];
$graphid_maxvalue_array["$gid"] = $rra_max;
}
arsort($graphid_maxvalue_array,SORT_NUMERIC);
foreach ($graphid_maxvalue_array as $m=>$n){
$title = $graphid_title_array["$m"];
$t = array('title_cache'=>"$title",'local_graph_id'=>"$m");
array_push($new_graphs_array,$t);
}
return $new_graphs_array;
}
function get_rra_max($local_graph_id) {
$sql = "SELECT
rra_max_order.rra_value
FROM
data_template_data,graph_templates_item,data_template_rrd,rra_max_order
WHERE
data_template_data.local_data_id=data_template_rrd.local_data_id
AND graph_templates_item.task_item_id=data_template_rrd.id
AND rra_max_order.id=data_template_data.local_data_id
AND graph_templates_item.local_graph_id=".$local_graph_id." limit 1";
$result = mysql_query($sql);
$line = mysql_fetch_array($result, MYSQL_ASSOC);
if (!$line['rra_value']){
$line['rra_value'] = 0;
}
$rets = $line['rra_value'];
return $rets;
}
|
在html_tree.
php文件中生成graphs数组后,对其使用的图形模板进行了一个判断,如果是使用流量模板,就使用traffic_sort函数对graphs数组元素进行重排序,而不是采用原先的usort函数进行排序。
if ($graph_template["id"] ==2) {
$graphs = traffic_sort($graphs);
}
//usort($graphs, 'naturally_sort_graphs');
|
之后,需求变了,悲催的,需求方打了个比方,说比如想挑选出某个设备下所有端口中最大流量超过其最大能承受流量的50%的端口的图形。我只好前了个前端选择项,如下图:

这时可由Traffic Search对搜索条件进行设置,这里其实传递了两个参数作为变量,judge和traffic_perc。
html_tree.php中这么修改的:
if (sizeof($graph_templates) > 0) {
foreach ($graph_templates as $graph_template) {
if (strlen(get_request_var_request("filter"))) {
$sql_where = (empty($sql_where) ? "" : "AND (title_cache LIKE '%" . get_request_var_request("filter") . "%')");
}
if (strlen(get_request_var_request("traffic_perc")) && strlen(get_request_var_request("judge")) ) {
//echo "yes";
$traffic_perc = get_request_var_request("traffic_perc");
$judge = get_request_var_request("judge");
// insert judge here
$graphs_sql = "SELECT
distinct(graph_templates_graph.title_cache),graph_templates_graph.local_graph_id
FROM (graph_local,graph_templates_graph,data_template_data,graph_templates_item,data_template_rrd,rra_max_order)
$sql_join
WHERE
graph_local.id=graph_templates_graph.local_graph_id
AND graph_templates_graph.local_graph_id=graph_templates_item.local_graph_id
AND rra_max_order.id=data_template_data.local_data_id
AND graph_templates_item.task_item_id=data_template_rrd.id
AND data_template_data.local_data_id=data_template_rrd.local_data_id
AND graph_local.graph_template_id=" . $graph_template["id"] . "
AND graph_local.host_id=" . $leaf["host_id"] . "
AND rra_max_order.rra_value ".$judge.$traffic_perc."
$sql_where
ORDER BY graph_templates_graph.title_cache";
//echo $graphs_sql;
}
else
{
$graphs_sql = "SELECT
graph_templates_graph.title_cache,
graph_templates_graph.local_graph_id
FROM (graph_local,graph_templates_graph)
$sql_join
WHERE graph_local.id=graph_templates_graph.local_graph_id
AND graph_local.graph_template_id=" . $graph_template["id"] . "
AND graph_local.host_id=" . $leaf["host_id"] . "
$sql_where
ORDER BY graph_templates_graph.title_cache";
}
$graphs = db_fetch_assoc($graphs_sql);
|
html代码如下。
<tr width='200'>
<td width=200>
<strong> Traffic Search:</strong>
<select name='judge'>
<option value=">=">>=</option>
<option value="<="><=</option>
</select>
<select name='traffic_perc'>
<option value="90">90%</option>
<option value="80">80%</option>
<option value="70">70%</option>
<option value="60">60%</option>
<option value="50">50%</option>
<option value="40">40%</option>
<option value="30">30%</option>
<option value="20">20%</option>
<option value="10">10%</option>
</select>
</td>
</tr>
|
“改cacti源代码的一些经历”的更多相关文章 》
爱J2EE关注Java迈克尔杰克逊视频站JSON在线工具
http://biancheng.dnbcw.info/php/322417.html pageNo:17