>  기사  >  백엔드 개발  >  선인장 모니터링 알림을 구현하기 위해 Fetion 인터페이스를 호출합니다.

선인장 모니터링 알림을 구현하기 위해 Fetion 인터페이스를 호출합니다.

WBOY
WBOY원래의
2016-07-25 09:01:53996검색

Cactisnmp 프로토콜을 통해 주기적으로 추가된 호스트의 상태를 모니터링합니다. Cacti 데이터베이스에는 호스트 테이블에는 상태(상태), 최신 다운타임 ( status_fail_date),최근 정상 복귀(status_rec_date). Fetion이 스위치 상태를 모니터링할 수 있도록 스위치가 다운되면 지정된 휴대폰 번호로 문자 메시지가 전송되며, 다운된 스위치에 대한 정보는 반복해서 보낼 수 없습니다. . 아이디어: 스위치 상태(다운될 때 한 번만 정보 전송)와 문자 메시지 전송 여부를 결정합니다. 호스트status_now)와 기본 스위치 상태(status_default) table >두 열의 기본값은 1은 정상을 의미하며 문자 메시지를 반복해서 보내지 않도록 마지막 스위치 상태와 비교하는 데 사용됩니다. 코드는 다음과 같습니다.

ALTER TABLE `호스트`

`status_now` 열 추가 char(2) `availability` 뒤에 NULL 기본값 '1';

ALTER TABLE `호스트`

`status_default` 열 추가 char(2) `status_now` 뒤에 NULL이 아닌 기본값 '1';

1. 최근 다운타임

>

최근 복구 시간—

>스위치 다운—> 기록 변경status=0;이때 status 열과 status_default열의 값은 0, 1>입니다. SMS 보내기— >기록 변경status_default=0;현재상태 열 및 status_default 열 값은 0, 0 >스위치가 다시 내려진 것을 감지하고 문자 메시지를 반복해서 보내지 마세요; 2. 최근 다운타임

최근 복구 시간—

>스위치가 정상으로 돌아옴—>기록 변경status=1;현재status 열과 status_default 열의 값은 1, 0>SMS 보내기 —>기록 변경status_default=1;현재상태열과status_default 열의 값은 1, 1>스위치가 닫혀 있고 문자 메시지가 전송되지 않습니다. 위에서 보면 스위치의 상태가 4번 변경되었음을 알 수 있습니다. :

상태_현재

상태_기본값

결과

1

1

정상, SMS 알림 없음

0

1

다운타임, SMS 알림

0

0

다운타임이 다시 감지되고 SMS 알림이 전송되지 않습니다

1

0

정상 복귀, SMS 알림

네 가지 상태를 결정한 다음 host 테이블에서 스위치 설명(설명)을 꺼내서 다음과 같이 결합하면 됩니다. 문자열을 문자열로 만들어 Fetionapi에 제출하면 됩니다.

  1. include_once 'conn.php';
  2. $sql="`cacti`.`host`에서 id,hostname,status_fail_date,status_rec_date를 선택하세요. ";
  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="`선인장` 업데이트 .`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="update ` 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`에서 설명,status_fail_date,status_rec_date,status_now,status_default를 선택하세요.`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($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="update `cacti`.`host` set `status_now`='1' 여기서 `host`.`id`= ".$rs['id'];
  13. $query2=mysql_query($sql2);
  14. }
  15. //스위치 상태가 비정상입니다. 문자 메시지를 보내주세요
  16. if(($rs[ 'status_now' ==0])&&($rs['status_default']==1)){
  17. $msg=$rs['description'].":down;";//SMS 콘텐츠
  18. $sql3= "`cacti`.`host` 업데이트 `status_default`='0' 설정, 여기서 `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. //스위치가 정상으로 돌아가고 문자 메시지를 보냅니다
  25. else if(($rs['status_now']==1)&&($rs['status_default'] ==0)){
  26. $msg=$ rs['description'].":복구;";//SMS 콘텐츠
  27. $sql4="update `cacti`.`host` set `status_default` ='1' 여기서 `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. $ 비밀번호 = *********;//발송자 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'); //지정된 웹페이지 캐치
  42. curl_setopt($ch, CURLOPT_HEADER, 0);//헤더 설정
  43. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//결과가 문자열이어야 하고 다음으로 출력합니다. 화면
  44. curl_setopt($ch, CURLOPT_POST, 1);//post 제출 방법
  45. curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
  46. $data = cur_exec($ch);//curl 실행
  47. curl_close($ch);
  48. }else{
  49. echo "normal";
  50. }
  51. }
  52. ?>
코드 복사


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.