龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

调用飞信接口实现cacti的监控通知

时间:2014-07-22 14:50来源: 作者: 点击:
分享到:
div class=Section0 p Cactispan每间隔一段时间通过/spanspansnmp/spanspan协议监测已添加的主机状态,在/spanspanCacti/spanspan数据库中,/spanspanhost/spanspan表记录着交换机的相关信息,如状态(/spanspan

Cacti每间隔一段时间通过snmp协议监测已添加的主机状态,在Cacti数据库中,host表记录着交换机的相关信息,如状态(status),最近宕机时间(status_fail_date),最近恢复正常时间(status_rec_date)。要实现飞信监控交换机状态,交换机down了就发短信到指定的手机号上,而且宕机的交换机信息不能重复发。思路:判断交换机状态(宕机只发送一次信息),是否发送短信。在host表中添加交换机当前状态(status_now)和默认交换机状态(status_default)两列,其默认值都为1表示正常,用于与上一次交换机状态比对从而不重复发短信。

代码如下:

ALTER TABLE `host`

ADD COLUMN `status_now`  char(2) NOT NULL DEFAULT '1' AFTER `availability`;

ALTER TABLE `host`

ADD COLUMN `status_default`  char(2) NOT NULL DEFAULT '1' AFTER `status_now`;

1.最近宕机时间>最近恢复时间—>交换机宕机—>更改记录status=0;此时status列和status_default列的值分别为01>发送短信—>更改记录status_default=0;此时status列和status_default列的值分别为00>再次检测交换机宕机,不重复发短信;

2.最近宕机时间<=最近恢复时间—>交换机恢复正常—>更改记录status=1;此时status列和status_default列的值分别为10>发送短信—>更改记录status_default=1;此时status列和status_default列的值分别为11>交换机已经,不发送短信。

从上可以看出交换机经历了四个状态的改变:

status_now

status_default

结果

1

1

正常,无短信通知

0

1

宕机,短信通知

0

0

再次检测宕机,无短信通知

1

0

恢复正常,短信通知

我们只要判断四种状态然后从host表中取出交换机描述(description)组合成字符串提交给飞信api即可。


<?php
include_once 'conn.php';
$sql="select id,hostname,status_fail_date,status_rec_date from `cacti`.`host`;";
$query=mysql_query($sql) or die(mysql_error());
$nums=mysql_num_rows($query);
if($nums!=0){
while($rs=mysql_fetch_array($query)){
if(strtotime($rs['status_fail_date'])>strtotime($rs['status_rec_date'])){
$sql1="update `cacti`.`host` set `status_now`='0' where `host`.`id`=".$rs['id'];
$query1=mysql_query($sql1);//判断交换状态宕机更改数据库ststus_now值为0
}
if(strtotime($rs['status_fail_date'])<=strtotime($rs['status_rec_date'])){
$sql2="update `cacti`.`host` set `status_now`='1' where `host`.`id`=".$rs['id'];
$query2=mysql_query($sql2);//判断交换状态正常更改数据库ststus_default值为1
}
}
}
?>

2. [代码]message.php     跳至 [1] [2] [全屏预览]

<?php
include_once "status.php";
$sql="select description,status_fail_date,status_rec_date,status_now,status_default from `cacti`.`host`;";
$query=mysql_query($sql) or die(mysql_error());
$nums=mysql_num_rows($query);
if($nums!=0){
while($rs=mysql_fetch_array($query)){
if($rs['status_fail_date']>$rs['status_rec_date']){
$sql1="update `cacti`.`host` set `status_now`='0' where `host`.`id`=".$rs['id'];
$query1=mysql_query($sql1);
}
else if($rs['status_fail_date']<=$rs['status_rec_date']){
$sql2="update `cacti`.`host` set `status_now`='1' where `host`.`id`=".$rs['id'];
$query2=mysql_query($sql2);
}
//交换机状态不正常,发送短信
 if(($rs['status_now'==0])&&($rs['status_default']==1)){
    $msg=$rs['description'].":down;";//短信内容
    $sql3="update `cacti`.`host` set `status_default`='0' where `host`.`id`=".$rs['id'];
        $query3=mysql_query($sql3);
        }
//再次检测交换机状态不正常或交换机已经恢复正常,不发送短信
else if(($rs['status_now']==1)&($rs['status_default']==1)||($rs['status_now']==0)&&($rs['status_default']==0)){
        $msg='';}//短信内容为空
//交换机状恢复正常,发送短信
else if(($rs['status_now']==1)&&($rs['status_default']==0)){
         $msg=$rs['description'].":recover up;";//短信内容
        $sql4="update `cacti`.`host` set `status_default`='1' where `host`.`id`=".$rs['id'];
        $query4=mysql_query($sql4);
        }
    $info=($info.$msg);//合并交换机状态为一条短信
}
$msg=$info;
//调用飞信接口
if(!empty($msg)){
$username = 18756064346;//发送人手机号
$password = *********;//发送人飞信密码
$sendto = 18756064346;//飞信接收人手机号
$curlPost = 'phone='.urlencode($username).'&pwd='.urlencode($password).'&to='.urlencode($sendto).'&msg='.$msg.'&type=0';
echo $curlPost;
$ch = curl_init();//初始化curl
curl_setopt($ch,CURLOPT_URL,'http://3.ibtf.sinaapp.com/f.php');//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);//设置header
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data = curl_exec($ch);//运行curl
curl_close($ch);
}else{
        echo "正常";
}
}
?>
精彩图集

赞助商链接