nagios插件之登錄https頁面監控

vi volkswagen_https_host_2.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#define OK       0
#define WARNING  1
#define CRITICAL 2
#define UNKNOWN  3

#define LEN 1000
#define LEN_SHORT 512

int exitstatus=OK;
char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};

//char *power_status[4]={"active","deactive","not_install","unsupport"};

char status_information[LEN];
char performance_data[LEN];

/*
int sum_conn;
char sum_conn_all[LEN_SHORT];

char sum_conn_170_241[LEN_SHORT];
char sum_conn_170_243[LEN_SHORT];
char sum_conn_171_241[LEN_SHORT];
char sum_conn_171_243[LEN_SHORT];
*/

//line=1,readbuf=http_code:200:size_download:6340:time_total:0.430
char http_code[10]={0};
char size_download[10]={0};
char time_total[10]={0};

char error_code[10]={"0"};
char error_string[100]={0};

/*
void print_usage(char str[32]) {  
        printf("Usage: %s [options]\n",str);  
        printf("  e.g. %s -H 1.1.1.1 -o .1.3.6...\n",str);  
        printf("Options:\n");  
        printf("\t -H ip address\n");  
        printf("\t -o snmp oid\n");  
}  
*/
void print_usage(char str[100]) {
        printf("Usage: %s RESP_PAGE_SIZE URL\n",str);
        printf("  e.g. %s 2300 https://www.baidu.com\n",str);
        exit(-1);
}

/*
int check_argv() {
        while((ch=getopt(argc,argv,"H:o:"))!=-1) {
                switch(ch) {
                        case 'H':
                        //      printf("option H:%s\n",optarg);
                                break;
                        case 'o':
                        //      printf("option o:%s\n",optarg);
                                break;
                        default:
                        //      printf("other option :%c\n",ch);
                                break;
                        }
                }

        return -1;
}
*/

int parse_status(char *sh_cmd) {
        int ret;
        int line=0;
        FILE *fp;
        char readbuf[LEN_SHORT];

//      fp=popen("/usr/bin/snmpwalk -v2c  -c zb.186.nms 114.66.80.55 1.3.6.1.4.1.2011.2.23.1.9.1.2.1.2","r");
//      fp=popen(command,"r");
        fp=popen(sh_cmd,"r");
        if(fp==NULL) {
                fprintf(stderr,"fopen() error.\n");

                exitstatus=CRITICAL;
                return exitstatus;


/*
                sprintf(status_information,"active_status=%s",active_status);
                sprintf(performance_data,"active_status=%s;;;0;100","0");

                sprintf(status_information,"conn_170_245=%s conn_171_245=%s all_conn=%s",sum_conn_170_245,sum_conn_171_245,sum_conn_all);
                sprintf(performance_data,"conn_170_245=%s;;;0;100 conn_171_245=%s;;;0;100 all_conn=%s;;;0;100",sum_conn_170_245,sum_conn_171_245,sum_conn_all);

                printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);

*/
        }

/*
        str=fgets(readbuf,LEN_SHORT,fp); 
        if(str==NULL) {
                perror("fgets() error");
        }

        printf("readbuf=%s",readbuf);

        ret=sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.1.1.1.19.0 = INTEGER: %s",active_status);
        if(ret<0) {
                fprintf(stderr,"sscanf() error.\n");

                exitstatus=UNKNOWN;

                sprintf(status_information,"active_status=%s",active_status);
                sprintf(performance_data,"active_status=%s;;;0;100","0");

                printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);

                return exitstatus;
        }

//SNMPv2-SMI::enterprises.3375.2.1.1.1.1.19.0 = INTEGER:
*/

//      printf("error_code=%s\n",error_code);
        while(fgets(readbuf,LEN_SHORT,fp)!=NULL) {
                line++;
        //      if(line==62 || line==68 || line==212) {
                //      printf("line=%d,readbuf=%s",line,readbuf);

                        if(strstr(readbuf,"SSL read")) {
                                sscanf(readbuf,"%*[^(](%[^)]",error_code);
                                strcpy(error_string,readbuf);
                                error_string[strlen(error_string)-1]='\0';

                //      printf("error_code=%s\n",error_code);
                //      printf("error_string=%s\n",error_string);
                        }

                        if(strstr(readbuf,"http_code")) {
                                sscanf(readbuf,"http_code:%[^,],size_download:%[^,],time_total:%s",http_code,size_download,time_total);
                //      line=1,readbuf=http_code:200:size_download:6340:time_total:0.430
                //      printf("---------------------------------------\n");
                //      printf("http_code=%s,size_download=%s,time_total=%s\n",http_code,size_download,time_total);
                        }
        //      }
        //      printf("%s",readbuf);

        /*      if(line==1) {
                //      sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.1 = INTEGER: %s",power1_value);
                //      sscanf("SNMPv2-SMI::enterprises.3375.2.2.5.4.3.1.9.7.77.81.65.95.73.78.84.1.4.103.4.170.245.8021 = Counter64: 23","%*[^=]%*[^:]: %s",str1);
                        sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_170_241);
                }
                else if (line==2) {
                //      sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.2 = INTEGER: %s",power2_value);
                        sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_170_243);
                }
                else if (line==3) {
                //      sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.2 = INTEGER: %s",power2_value);
                        sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_171_241);
                }
                else if (line==4) {
                //      sscanf(readbuf,"SNMPv2-SMI::enterprises.3375.2.1.3.2.2.2.1.2.2 = INTEGER: %s",power2_value);
                        sscanf(readbuf,"%*[^=]%*[^:]: %s",sum_conn_171_243);
                }
        */
/*
                if(line==2) {
                        break;
                }
*/
        }


//      printf("line=%d\n",line);

        ret=pclose(fp);
        if(ret==-1) {
                perror("pclose");
        }

        return 0;
}

int main(int argc,char *argv[]) {
        int ret;

        int ch;
        int mark=0;

        char *str;


        char command[LEN];

        int response_size=0;

/*
        if(argc==1 || argc!=5) {
                printf("%s -H host -o oid\n",argv[0]);
                print_usage(argv[0]);
                return -1;
        } 
*/
        if(argc!=3) {
        //      printf("%s url\n",argv[0]);
                printf("%s is error, need parameter\n",argv[0]);
                print_usage(argv[0]);
        }

        response_size=atoi(argv[1]);
//      printf("response_size=%d\n",response_size);

/*
        while((ch=getopt(argc,argv,"H:o:"))!=-1) {
                switch(ch) {
                        case 'H':
                        //      printf("option H:%s\n",optarg);
                                break;
                        case 'o':
                        //      printf("option o:%s\n",optarg);
                                break;
                        default:
                        //      printf("other option :%c\n",ch);
                                mark=1;
                                break;
                }
        }

        if(mark==1) {
                return -1;
        }
*/


//      sprintf(command,"/usr/bin/snmpwalk -v2c -c public %s %s | grep 245.6717",argv[2],argv[4]);
//      sprintf(command,"/usr/bin/snmpwalk -v2c -c zb.186.nms %s %s | grep 112.111.111.108.*8080",argv[2],argv[4]);

//      sprintf(command,"/usr/bin/curl -v -s -w '%%%{time_connect%}:%%%{time_starttransfer%}:%%%{time_total%}' %s",argv[1]);
//      sprintf(command,"/usr/bin/curl -v -s -w \'%%\{time_connect\}:%%\{time_starttransfer\}:%%\{time_total\}\' %s 2>&1",argv[1]);
//      sprintf(command,"/usr/bin/curl --silent --write-out \'%%\{time_connect\}:%%\{time_starttransfer\}:%%\{time_total\}\' --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s 2>&1",argv[1]);

//      sprintf(command,"/usr/bin/curl --silent -o /dev/null --write-out http_code:%%\{http_code\}:size_download:%%\{size_download\}:time_total:%%\{time_total\} --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s 2>&1",argv[1]);
//      sprintf(command,"/usr/bin/curl --connect-timeout 10 --max-time 20 --silent -o /dev/null --write-out http_code:%%\{http_code\},size_download:%%\{size_download\},time_total:%%\{time_total\}\"\\n\" --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s",argv[1]);
//      sprintf(command,"/usr/bin/curl --connect-timeout 10 --max-time 20 --silent -o /dev/null --write-out http_code:%%{http_code},size_download:%%{size_download},time_total:%%{time_total}\"\\n\" --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 %s",argv[1]);
        sprintf(command,"/usr/bin/curl --connect-timeout 10 --max-time 20 -o /dev/null --write-out \"\\n\"http_code:%%{http_code},size_download:%%{size_download},time_total:%%{time_total}\"\\n\" --insecure --digest --user 42737c97d5f61ba3a2d23404c48b2137*xxxx*CN:a694224a209d97785cb60e1554ba9528 \"%s\" 2>&1",argv[2]);

//size_download:%{size_download}:http_code:%{http_code}:time_connect:%{time_connect}:time_starttransfer:%{time_starttransfer}:time_total:%{time_total}"\n"

///usr/bin/curl -v --insecure -w ‘%{time_connect}:%{time_starttransfer}:%{time_total}’ --digest --user 42737c97d5f61ba3a2d23404c48b2137*Audi*CN:a694224a209d97785cb60e1554ba9528 'https://env09-mbbservices03.audi-connect.cn/mbb/applist/v2/zh_CN'

//      snmpwalk -v 2c -c zb.186.nms 114.66.80.53 1.3.6.1.4.1.3375.2.2.5.4.3.1.11 | grep "50.52.53.6717"

//      printf("command=%s\n",command);

        ret=parse_status(command);
        if(ret!=0) {
                fprintf(stderr,"parse_status() error.\n");
        }

//      sum_conn=atoi(sum_conn_170_241)+atoi(sum_conn_170_243)+atoi(sum_conn_171_241)+atoi(sum_conn_171_243);
//      sprintf(sum_conn_all,"%d",sum_conn);

/*
        printf("sum_conn_170_245=%s\n",sum_conn_170_245);
        printf("sum_conn_171_245=%s\n",sum_conn_171_245);

        printf("sum_conn_all=%s\n",sum_conn_all);
*/

        //status_information && performance_data
        if(atoi(error_code)==0) {
                if(!strcmp(http_code,"200") && atoi(size_download)>=response_size && atof(time_total)<2) {
                        exitstatus=OK;

                        sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
                        sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
                }
                else if(!strcmp(http_code,"200") && atoi(size_download)<response_size && atof(time_total)<2 ) {
                        exitstatus=WARNING;

                        sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
                        sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
                }
                else if(!strcmp(http_code,"200") && atoi(size_download)>=response_size && atof(time_total)>=2 && atof(time_total)<=6) {
                        exitstatus=WARNING;

                        sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
                        sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
                }
                else if(strcmp(http_code,"200") || atoi(size_download)<=response_size && atof(time_total)>6) {
                        exitstatus=CRITICAL;

                        sprintf(status_information,"http_code=%s, response_size=%s, response_time=%s", http_code,size_download,time_total);
                        sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
                }
        }
        else {
                exitstatus=CRITICAL;

                sprintf(status_information,"%s", error_string);
                sprintf(performance_data,"http_code=%s;;;0; response_size=%s;;;0; response_time=%s;;;0;", http_code,size_download,time_total);
        }

//char http_code[10]={0};
//char size_download[10]={0};
//char time_total[10]={0};
//http_code=200,size_download=6340,time_total=0.382

        printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);

        return exitstatus;
}


發佈了109 篇原創文章 · 獲贊 6 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章