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

[经验分享] 用php实现引用cacti中的流量图表

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-11-22 12:56:54 | 显示全部楼层 |阅读模式
最近,手头上的项目有一个需求。背景是这样的:
在管理系统中,已经实现了设备上下架功能,可以按机柜来查看机柜中的设备,但有一个缺憾就是设备的流量图设置在cacti系统中,要想看设备流量图还要切换到cacti中查看。若是能直接在管理系统中,选中设备就能查看该设备的cacti流量图就更好了,并且可以按时间查询,就象使用cacti一样。出于这个目的,我使用PHP的curl扩展实现了此功能。
可行性分析:
要实现引用cacti的流量图表,先要分析cacti图表的链接。仔细观察cacti图表,发现流量图链接有个特点。
http://xxx.xxx.xxx.xxx/cacti_cnc/graph_image.php?local_graph_id=2068&rra_id=0&graph_start=1282207985&graph_end=1282553585
可以发现,cacit图的链接有两个关键的参数,一个是graph_id,一个是rra_id,graph_id不必说,是设备流量图的标识码,rra_id是什么呢?其实是流量图的类型。
当rra_id=all时,查看该设备的所有流量图
当rra_id=0时,可以按任意时间段查看流量图均值。
当rra_id=1时,查看最近一天的流量图均值
当rra_id=2时,查看最近一周流量图均值。
当rra_id=3时,查看最近一月流量图均值。
当rra_id=4时,查看最近一年流量图均值。
注意到,当rra_id=0时,只要给出时间段参数,就可以得到任意范围的流量图。于是,查看设备流量图,就可以从rra_id=0下手。
要查看设备流量图,必须有个地方保存流量图的url。经过考虑,我把URL保存在设备IP表中(在设备IP表上添加一个字段)。保存的url不包含最后&graph_start及graph_end这两个参数,这两个参数值我在界面上传入。
另外要查看cacti的图表,必须先登录。
经过分析后,思路就变得简单了:
处理思路:
(1)登录cacti
(2) 传入url,返回结果
(3)用个<img src=''>来指向这个结果就可以显示了。
难点:
由于cacti是要验证session的,而且登录成功后,会写一串cookie,所以要拿到流量图URL,先得保存cookie.
解决:
php的curl扩展允许保存cookie,并且允许用保存下来的cookie再次请求。这是解决问题的关键。
核心代码如下:

getChart.php
$graph_start = $_REQUEST['graph_start'];
$graph_end = $_REQUEST['graph_end'];
$url= $_REQUEST['chart_url'];
$url = url_decode($url);
$username= &quot;xxxxxx&quot;;
$password = &quot;xxxxxx&quot;;
$data = &quot;&action=login&login_username=&quot; . $username . &quot;&login_password=&quot; . $password;
$cookie_file = tempnam ( './tmp', 'cookie' );     
$curl = curl_init (); // 启动一个CURL会话
curl_setopt ( $curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt ( $curl, CURLOPT_USERAGENT, $_SERVER ['HTTP_USER_AGENT'] ); // 模拟用户使用的浏览器
curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自动跳转
curl_setopt ( $curl, CURLOPT_AUTOREFERER, true ); // 自动设置Referer
curl_setopt ( $curl, CURLOPT_POST, true ); // 发送一个常规的Post请求
curl_setopt ( $curl, CURLOPT_COOKIEJAR, $cookie_file ); //保存cookie
curl_setopt ( $curl, CURLOPT_COOKIEFILE, $cookie_file ); //发送cookie
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); // Post提交的数据包
curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 设置超时限制防止死循环
curl_setopt ( $curl, CURLOPT_HEADER, 0 ); // 显示返回的Header区域内容
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 获取的信息以文件流的形式返回
curl_exec ( $curl ); // 执行操作
if (curl_errno ( $curl )) {
echo &quot;error&quot;;
} else {
if(!empty($graph_start)) $url .= &quot;&graph_start=&quot;.$graph_start;//附上起始时间
if(!empty($graph_end)) $url .= &quot;&graph_end=&quot;.$graph_end;//附上结束时间
curl_close ( $curl ); // 关闭CURL会话  
$ch2 = curl_init ();
curl_setopt ( $ch2, CURLOPT_URL, $url );
curl_setopt ( $ch2, CURLOPT_HEADER, false );
curl_setopt ( $ch2, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch2, CURLOPT_COOKIEFILE, $cookie_file );
$img = curl_exec ( $ch2 );
curl_close ( $ch2 );
echo $img;//输出流量图
}
unlink ( $cookie_file );

showchart.php
$url = url_encode(&quot;http://xxx.xxx.xxx.xxx/cacti_cnc/graph_image.php?local_graph_id=2068&rra_id=0&quot;);
echo  '<table><tr><td ><img src=&quot;getchart.php?chart_url='.$url.'&quot;></td></tr></table>';

运维网声明 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-142144-1-1.html 上篇帖子: cacti 自定义 模板 下篇帖子: cacti实现短信报警v1.1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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