Cacti每日流量及图形导出以前做过一个VBS脚本,大概300多行,使用的是浏览器模拟打开Cacti网站用VBS模拟鼠标键盘操作进行自动导出及保存的。但是效率非常低,而且会因为浏览器升级及其他原因导致自动导出失败。

最近重新整理了一个思路,使用VBS 的download函数进行下载。参考了 煮酒品茶的文章Cacti 自动报表实现 使用VBS定义download函数,然后下载需要的报表到临时目录,然后使用VBS脚本移动到按日期命名的文件夹中。

最后实现的效果图如图:

 

wKioL1Svkx-CYG1SAAIj0vD-AE4178.jpgwKiom1SvkvXwnVxOAAK3hb7sH_4327.jpgwKioL1Svk7mCc15qAAJGdVV-jJI152.jpg

首先:编辑VBS脚本:

            1.使用本脚本前需要修改cacti中的graph_xport.php文件,具体修改方法为

file:/cacti/graph_image.php

//include("./include/auth.php"); 
include("./include/global.php");

注释掉原来的include("./include/auth.php");

使用include("./include/global.php");验证来免密码下载。

           2.使用本脚本必须按照脚本内指定的目录结构创建目录。否则运行VBS时会出现错误。

            结构如图:

           wKioL1SvmRawx2E0AAFWi-RM1v0777.jpg                                 

                            

           3.自动导出的VBS脚本为

 '本脚本使用前必须创建一下文件夹 D:\cacti\cacti图形\月流量\CA-双线\ 及D:\temps\图形\月\
'其中D:\cacti\cacti图形\月流量\CA-双线\ 为脚本最后拷贝目的文件夹,根据需求可以更改
'
'By:Fenei 
'mail:fengf@xipunet.com
'
'使用此脚本文件时,需要将CACTI中:/cacti/graph_xport.php文件修改如下
' //include("./include/auth.php");
' include("./include/global.php");
'注释掉autp.php 使用global.php验证
'这样才能免登录下载文件
'定义下载脚本文件
Sub download(url,target)
 Const adTypeBinary = 1
 Const adSaveCreateOverWrite = 2
 Dim http,ado
 Set http = CreateObject("Msxml2.XMLHTTP")
 http.open "GET",url,False
 http.send
 Set ado = createobject("Adodb.Stream")
 ado.Type = adTypeBinary
 ado.Open
 ado.Write http.responseBody
 ado.SaveToFile target
 ado.Close
End Sub
'下载列表,可根据list.xls修改
download "http://192.168.10.11/cacti/graph_image.php?local_graph_id=1156&rra_id=3","D:\temps\图形\月\总带宽.png"
download "http://192.168.10.11/cacti/graph_image.php?local_graph_id=1137&rra_id=3","D:\temps\图形\月\大客户.png"
download "http://192.168.10.11/cacti/graph_image.php?local_graph_id=1191&rra_id=3","D:\temps\图形\月\一米科技.png"
download "http://192.168.10.11/cacti/graph_image.php?local_graph_id=1192&rra_id=3","D:\temps\图形\月\科创网络.png"
 
'拷贝文件并以月期命名,清空temp文件夹
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFolder "D:\temps\数据\月","D:\cacti\cacti数据\月流量\CA-双线\"&FormatDateTime(Date, 1),true 
fso.DeleteFile "D:\temps\数据\月\* "

 脚本最上面定义了download函数,然后使用download函数下载对应的图形报表,然后使用CopyFolder函数将已经下载到临时目录的报表文件移动到以日期命名的文件夹中