多数VPS提供的是SolusVM面板,该面板提供有API,可以监控VPS的运行信息以及进行重启、关机、开机等操作。
而一般我们需要对vps进行流量监控,跑超了玩意扣费或者进行准备工作
平时想看一下VPS信息的时候,要找一下开通邮件,然后点开面板地址,再把用户名和密码复制进去,好麻烦。
原本我是想自己写一个php的程序,刚开始写就发现有现成的,就直接拿来用了。不是我不尊重版权,我只记得这个程序是开源的,而悲剧的是文件里面没有写版权信息,所以我根本找不到是哪来的……
使用方法,分两步:
1,在SolusVM面板启用API,并且生成鉴权信息:
2,在监控PHP程序里填写这些信息就好了:
怎么填写我就不罗嗦了,我在里面写了注释的,足够简单了。
注意,信息可能显示的有问题,有时候呢,某些服务商或者间歇性的可能看不到内存和硬盘使用情况,主要是看个带宽使用情况,以及有时候重启一下比较方便。有兴趣的也可以自己根据api进行功能扩展。
下载地址:
怎么填写我就不罗嗦了,我在里面写了注释的,足够简单了。
注意,信息可能显示的有问题,有时候呢,某些服务商或者间歇性的可能看不到内存和硬盘使用情况,主要是看个带宽使用情况,以及有时候重启一下比较方便。有兴趣的也可以自己根据api进行功能扩展。
本程序对上个主题进行修改,只展示流量,并且可以对对个vps进行设置,只要使用solusvm生成API的都可以,并且将流量超过70%的进行黑色展示,防止流量超了,这样可以比较方便的监控VPS的流量情况,如果需要进行利用API进行多个管理,可以查看solusVMmanager
代码比较简单,如果需要多个功能可以自己写,例如超过发邮件什么的,但是定时执行下就可以
<?php
$lists = array(
array("替换为API Key","替换为API Hash","替换为你的主机供应商SoluSVM地址", "备注1")
//多个可以拷贝上面,最后一个不加逗号,其他加即可
);
foreach($lists as $key ){
$result[] = post($key[0] , $key[1] , $key[2], $key[3]);
}
function humanFileSize($size, $unit="") {
if( (!$unit && $size >= 1<<30) || $unit == "GB")
return number_format($size/(1<<30),2)." GB";
if( (!$unit && $size >= 1<<20) || $unit == "MB")
return number_format($size/(1<<20),2)." MB";
if( (!$unit && $size >= 1<<10) || $unit == "KB")
return number_format($size/(1<<10),2)." KB";
return number_format($size)." bytes";
}
function post($keys , $hashs, $naserurls ,$beizhu) {
$postfields["key"] = $keys;
$postfields["hash"] = $hashs;
$postfields["action"] = "info";
$masterurl = $naserurls;
$postfields["status"] = "true";
$postfields["hdd"] = "true";
$postfields["mem"] = "true";
$postfields["bw"] = "true";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "{$masterurl}/api/client/command.php");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Expect: "));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
// Execute the request
$data = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if($code != 200) {
$return['error'] = 1;
if($code == 405) {
$return['message'] = "Incorrect API credentials.";
return $return;
}
$return['message'] = "Invalid status code.";
return $return;
}
// Close the Curl handle
curl_close($ch);
if(!$data) {
$return['error'] = 1;
$return['message'] = "Error connecting to API.";
return $return;
}
// Extract the data
preg_match_all('/<(.*?)>([^<]+)<\/\\1>/i', $data, $match);
$result = array();
$result['bz'] = $beizhu;
foreach ($match[1] as $x => $y) {
$result[$y] = $match[2][$x];
}
//获取出错
if($result['status'] == "error") {
$result['error'] = 1;
$result['message'] = $result['statusmsg'];
return $result;
}
//获取正常
$result['error'] = 0;
$result['hdd'] = explode(",", $result['hdd']);
$result['mem'] = explode(",", $result['mem']);
$result['bw'] = explode(",", $result['bw']);
return $result;
}
?>
<?php foreach($result as $key ){
//var_dump($key);
?>
<div <?php if($key['bw'][3] >60){ ?>style="background:#000; color:#FFF"> <?php }?>
<h3>备注:<?php echo $key['bz']; ?> 带宽 <small> 已用 <?php echo humanFileSize($key['bw'][1]); ?> , 总量 <?php echo humanFileSize($key['bw'][0]); ?> ,比例 :<?php echo $key['bw'][3]; ?>%</small></h3>
<div>
<?php } ?>