ホームページ  >  記事  >  バックエンド開発  >  Fetion インターフェースを呼び出してサボテン監視通知を実装する

Fetion インターフェースを呼び出してサボテン監視通知を実装する

WBOY
WBOYオリジナル
2016-07-25 09:01:53996ブラウズ

Cacti は、snmp プロトコルを通じて追加されたホストのステータスを定期的に監視します。Cacti データベースでは、host テーブルにステータス () などのスイッチの関連情報が記録されます。 status )、最新のダウンタイム時間(status_fail_date)、最新の復旧時間(status_rec_date)。 Fetion がスイッチのステータスを監視できるようにするため、スイッチがダウンすると、指定された携帯電話番号にテキスト メッセージが送信されますが、ダウンしたスイッチに関する情報は繰り返し送信できません。アイデア: スイッチのステータス (ダウン時に情報を 1 回だけ送信) とテキスト メッセージを送信するかどうかを決定します。スイッチの現在のステータス (status_now) とデフォルトのスイッチのステータス (status_default)host テーブルに追加します。デフォルト値は両方とも 1 です。通常。テキスト メッセージの繰り返しを避けるために、上記の 1 つのスイッチのステータス比較とともに使用されます。

コードは次のとおりです:

ALTER TABLE `ホスト`

`availability` の後に列 `status_now` char(2) NOT NULL デフォルト '1' を追加します

ALTER TABLE `ホスト`

`status_now` の後に列 `status_default` char(2) NOT NULL DEFAULT '1' を追加します

;

1. 最近のダウンタイム > 最新の復旧時間 — > スイッチダウン — > 変更記録status=0; 現時点でのstatus 列と 価値観status_default 列の値は 01>SMS の送信—>レコードの変更status_default=0;今回 ステータス 列と status_default 列の値はそれぞれ 00> スイッチが再びダウンしていることを検出し、繰り返しテキスト メッセージを送信しません;

2. 最新のダウンタイム時間 最新の回復時間—>スイッチは通常に戻りました—>変更記録status=1;現時点で status列と status_default列の値は10>SMSの送信—> 変更記録status_default= 1; 現時点でのstatus 列とstatus_default列の値はそれぞれ11> スイッチはまだありませんSMSを送信しました。

上記から、スイッチは 4 つのステータス変化を経験したことがわかります:

status_now

status_default

結果

1

1

通常、SMS 通知なし

0

1

ダウンタイム、SMS 通知

0

0

ダウンタイムが再び検出されました。SMS 通知はありません

1

0

通常のSMS通知に戻ります

4 つの状態を決定し、host テーブルからスイッチの説明 (description) を取り出し、それを文字列に結合して Fetionapi に送信するだけです。

  1. include_once 'conn.php';
  2. $sql="select id,hostname,status_fail_date,status_rec_date from `cacti`.`host`;";
  3. $query=mysql_query($sql) または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="更新 `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'])<=strtotime ( $rs['status_rec_date'])){
  12. $sql2="更新 `cacti`.`host` set `status_now`='1' where `host`.`id`=".$rs['id'] ;
  13. $query2=mysql_query($sql2);//交換ステータスを判断し、データベースの ststus_default 値を 1 に変更します
  14. }
  15. }
  16. }
  17. ?>
コードをコピー
  1. include_once "status.php";
  2. $sql="`cacti`.`host` から description,status_fail_date,status_rec_date,status_now,status_default を選択;";
  3. $query=mysql_query($sql ) または 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="更新 `cacti`.`host` set `status_now`='0' where `host`.`id`=".$rs['id '];
  9. $query1=mysql_query($sql1);
  10. }
  11. else if($rs['status_fail_date']<=$rs['status_rec_date']){
  12. $sql2="`cacti`.`host を更新します` set `status_now`='1' where `host`.`id`=".$rs['id'];
  13. $query2=mysql_query($sql2);
  14. }
  15. //スイッチのステータスが異常なので、SMSを送信
  16. if(($rs['status_now'==0])&&($rs['status_default']==1)){
  17. $msg=$rs['description'].":down;";// SMS コンテンツ
  18. $sql3="update `cacti`.`host` set `status_default`='0' where `host`.`id`=".$rs['id'];
  19. $query3=mysql_query($sql3 );
  20. }
  21. //スイッチのステータスが異常であるか、スイッチが正常に戻ったことを再度検出し、SMS メッセージを送信しません
  22. else if(($rs['status_now']==1)&($rs[ 'status_default']==1 )||($rs['status_now']==0)&&($rs['status_default']==0)){
  23. $msg='';}// テキスト メッセージコンテンツは空です
  24. //スイッチのような回復 通常、SMS を送信します
  25. else if(($rs['status_now']==1)&&($rs['status_default']==0)){
  26. $msg=$ rs['description'].":recover up;";//SMS コンテンツ
  27. $sql4="update `cacti`.`host` set `status_default`='1' where `host`.`id`=。 $rs['id'];
  28. $ query4=mysql_query($sql4);
  29. }
  30. $info=($info.$msg);// スイッチのステータスをテキスト メッセージにマージします
  31. }
  32. $msg=$info ;
  33. //Fetion インターフェースを呼び出します
  34. if(!empty ($msg)){
  35. $username = 18756064346;//送信者の携帯電話番号
  36. $password = *********;//送信者の Fetion パスワード
  37. $sendto = 18756064346;//Fetion 受信者の携帯電話番号
  38. $curlPost = 'phone='.urlencode($username).'&pwd='.urlencode($password).'&to='.urlencode($sendto) .'&msg='.$msg.'&type=0 ';
  39. echo $curlPost;
  40. $ch =curl_init();//curlを初期化
  41. curl_setopt($ch,CURLOPT_URL,'http://3.ibtf.sinaapp) .com/f.php');//キャッチ Web ページを指定します
  42. curl_setopt($ch, CURLOPT_HEADER, 0);//ヘッダーを設定します
  43. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//結果が文字列を取得して画面に出力します
  44. curl_setopt($ch, CURLOPT_POST, 1) ;//投稿メソッド
  45. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  46. $data =curl_exec($ch);//curlを実行します
  47. curl_close($ch);
  48. }else{
  49. echo "normal";
  50. }
  51. }
  52. ?>
コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。