设为首页 收藏本站
查看: 1938|回复: 0

[经验分享] 改cacti源代码的一些经历

[复制链接]

尚未签到

发表于 2015-9-7 14:08:55 | 显示全部楼层 |阅读模式
  

简介:这是改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%的端口的图形。我只好前了个前端选择项,如下图:
DSC0000.jpg

这时可由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>&nbsp;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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110646-1-1.html 上篇帖子: mysql5.5.x 安装cacti报语法错误 下篇帖子: [Linux 流量管理] Cacti的插件安装和使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表