首頁 後端開發 php教程 呼叫飛信介面實現cacti的監控通知

呼叫飛信介面實現cacti的監控通知

Jul 25, 2016 am 09:01 AM

Cacti每間隔一段時間透過snmp協定監測已新增的主機狀態,在Cacti資料庫中, host表記錄交換機的相關信息,如狀態(status),最近宕機時間),最近宕機時間( status_fail_date),最近恢復正常時間(status_rec_date)。要實現飛信監控交換器狀態,交換器down了就發短信到指定的手機號上,而且宕機的交換器資訊不能重複發。思路:判斷交換器狀態(宕機只傳送一次訊息),是否發送簡訊。在host表中新增交換器目前狀態(status_now)和預設交換器狀態(status_status_sol >兩列,其預設值皆為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列的值分別為0

0 >再次偵測交換器宕機,不重複發送簡訊; 2.最近宕機時間最近恢復時間—>交換器恢復正常—交換器恢復正常—更改記錄status=1;此時status欄位和status_default列的值分別為10>發送簡訊>發送簡訊—>更改記錄status_default=1;此時

status

此時

status此時1— >>
status

此時status

此時
status

此時status

這列和
status_default

列的值分別為1

1

1

1

1

1

1

交換器已經,不發送簡訊。 從上可以看出交換器經歷了四個狀態的改變:

status_now

status_default

結果

1

1

正常,無簡訊通知 0 1 宕機,簡訊通知 0 0 再次偵測宕機,無簡訊通知

1

0

恢復正常,簡訊通知

我們只要判斷四個狀態然後從host表中取出交換器描述(description)組合成字串提交給飛信api即可。

  1. include_once 'conn.php';
  2. $sql="select id,hostname,status_fail_date,status_rec_date from `cacti`.`host`;" ;
  3. $query=mysql_query($sql) or die(mysql_error());
  4. $nums=mysql_num_rows($query);
  5. if($nums!=0){
  6. while($ rs=mysql_fetch_array($query)){
  7. if(strtotime($rs['status_fail_date'])>strtotime($rs['status_rec_date'])){
  8. $sql1="update `cacti``. host` set `status_now`='0' where `host`.`id`=".$rs['id'];
  9. $query1=mysql_query($sql1);//判斷交換狀態宕機變更資料庫ststus_now值為0
  10. }
  11. if(strtotime($rs['status_fail_date'])$sql2="update `cacti`.``cacti`.` host` set `status_now`='1' where `host`.`id`=".$rs['id'];
  12. $query2=mysql_query($sql2);//判斷交換狀態正常變更資料庫ststus_default值為1
  13. }
  14. }
  15. }
  16. ?>
複製程式碼
  1. include_once "status.php";
  2. $sql="select description,status_fail_date,status_rec_date,status_nowstatcacti from ```cacti​​d. ``cacti fromstatus_nowstatcact.``h. ;";
  3. $query=mysql_query($sql) or die(mysql_error());
  4. $nums=mysql_num_rows($query);
  5. if($nums!=0){
  6. while ($rs=mysql_fetch_array($query)){
  7. if($rs['status_fail_date']>$rs['status_rec_date']){
  8. $sql1="update `cacti`.`host` set ` status_now`='0' where `host`.`id`=".$rs['id'];
  9. $query1=mysql_query($sql1);
  10. }
  11. else if($rs[ 'status_fail_date']$sql2="update `cacti`.`host` set `status_now`='1' where `host`.`id`=".$ rs['id'];
  12. $query2=mysql_query($sql2);
  13. }
  14. //交換器狀態不正常,發送簡訊
  15. if(($rs['status_now'==0 ])&&($rs['status_default']==1)){
  16. $msg=$rs['description'].":down;";//簡訊內容
  17. $sql3="update ` cacti`.`host` set `status_default`='0' where `host`.`id`=".$rs['id'];
  18. $query3=mysql_query($sql3);
  19. }
  20. //再次偵測交換器狀態不正常或交換器已經恢復正常,不發送簡訊
  21. else if(($rs['status_now']==1)&($rs['status_default']==1) ||($rs['status_now']==0)&&($rs['status_default']==0)){
  22. $msg='';}//簡訊內容為空
  23. //交換器狀恢復正常,發送簡訊
  24. else if(($rs['status_now']==1)&&($rs['status_default']==0)){
  25. $msg=$rs[' description'].":recover up;";//簡訊內容
  26. $sql4="update `cacti`.`host` set `status_default`='1' where `host`.`id`=".$ rs['id'];
  27. $query4=mysql_query($sql4);
  28. }
  29. $info=($info.$msg);//合併交換器狀態為一則簡訊
  30. }
  31. $msg=$info;
  32. //呼叫飛信介面
  33. if(!empty($msg)){
  34. $username = 18756064346;//傳送人手機號碼
  35. $password = * ********;//發送人飛信密碼
  36. $sendto = 18756064346;//飛信接收人手機號碼
  37. $curlPost = 'phone='.urlencode($username).'&pwd= '.urlencode($password).'&to='.urlencode($sendto).'&msg='.$msg.'&type=0';
  38. echo $curlPost;
  39. $ch = curl_init(); //初始化curl
  40. curl_setopt($ch,CURLOPT_URL,'http://3.ibtf.sinaapp.com/f.php');//抓取指定網頁
  41. curl_setopt($ch, CURLOPT_HEADER, 0 );//設定header
  42. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果為字串且輸出到螢幕上
  43. curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
  44. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  45. $data = curl_exec($ch);//運行curl
  46. curl_close($ch);
  47. }else{
  48. curl_close($ch);
  49. }else{}
  50. }
?>
複製程式碼


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

解釋PHP中晚期靜態結合的概念。 解釋PHP中晚期靜態結合的概念。 Mar 21, 2025 pm 01:33 PM

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸

框架安全功能:防止漏洞。 框架安全功能:防止漏洞。 Mar 28, 2025 pm 05:11 PM

文章討論了框架中的基本安全功能,以防止漏洞,包括輸入驗證,身份驗證和常規更新。

自定義/擴展框架:如何添加自定義功能。 自定義/擴展框架:如何添加自定義功能。 Mar 28, 2025 pm 05:12 PM

本文討論了將自定義功能添加到框架上,專注於理解體系結構,識別擴展點以及集成和調試的最佳實踐。

如何用PHP的cURL庫發送包含JSON數據的POST請求? 如何用PHP的cURL庫發送包含JSON數據的POST請求? Apr 01, 2025 pm 03:12 PM

使用PHP的cURL庫發送JSON數據在PHP開發中,經常需要與外部API進行交互,其中一種常見的方式是使用cURL庫發送POST�...

描述紮實的原則及其如何應用於PHP的開發。 描述紮實的原則及其如何應用於PHP的開發。 Apr 03, 2025 am 12:04 AM

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? ReactPHP的非阻塞特性究竟是什麼?如何處理其阻塞I/O操作? Apr 01, 2025 pm 03:09 PM

深入解讀ReactPHP的非阻塞特性ReactPHP的一段官方介紹引起了不少開發者的疑問:“ReactPHPisnon-blockingbydefault....

See all articles