nagios插件之监控股票数据对比信息

    xiaoxiao2021-12-14  28

    vi check_bmw_sina_stock.c

    #include <stdio.h> #include <stdlib.h> #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <unistd.h> #include <string.h> #include <time.h> #include <netinet/in.h> #include <netinet/ip.h> /* superset of previous */ #include <sys/select.h> #include <netdb.h> #define OK 0 #define WARNING 1 #define CRITICAL 2 #define UNKNOWN 3 //#define LEN 1023 #define LEN 4000 #define SHORT_LEN 32 #define HIS_PORT 8080 #define HIS_IPADDR "10.199.205.39" //shangzheng char shangzheng[SHORT_LEN]; //shenzheng char shenzheng[SHORT_LEN]; //wan stock shangzheng char sh000001_date[SHORT_LEN]; char sh000001_value[SHORT_LEN]; //wan stock shenzheng char sz399001_date[SHORT_LEN]; char sz399001_value[SHORT_LEN]; //get url use seconds int sec_num=0; //safe sleep void safe_sleep(unsigned int sec) { while(sec=sleep(sec)); } int get_url(char url_request[LEN],char url_response[LEN]) { int ret,i; // char readbuf[40960]; char readbuf[LEN]; int mark=0; char *p,*str; fd_set rfds; struct timeval time; int sd; struct sockaddr_in his_end; struct hostent *gethost; // printf("------------------------------\n"); // printf("get_url() url_request=%s\n",url_request); sd=socket(AF_INET,SOCK_STREAM,0); // printf("------------------------sd=%d\n",sd); if(sd==-1) { fprintf(stderr,"socket error.\n"); return -1; } his_end.sin_family=AF_INET; if(strstr(url_request,"list=")) { // printf("----------------sina------------------\n"); his_end.sin_port=htons(80); // his_end.sin_addr.s_addr=inet_addr("61.147.124.120"); gethost=gethostbyname("hq.sinajs.cn"); memcpy(&(his_end.sin_addr.s_addr),gethost->h_addr,gethost->h_length); } else { his_end.sin_port=htons(HIS_PORT); his_end.sin_addr.s_addr=inet_addr(HIS_IPADDR); } ret=connect(sd,(struct sockaddr *)&his_end,sizeof(his_end)); if(ret==-1) { perror("connect()"); return -1; } //send data ret=write(sd,url_request,strlen(url_request)); if(ret<0) { perror("write() error"); return -1; } else { printf("client write %d bytes .\n",ret); } while(1) { memset(readbuf,0,LEN); FD_ZERO(&rfds); FD_SET(sd,&rfds); time.tv_sec=1; time.tv_usec=0; ret=select(sd+1,&rfds,NULL,NULL,&time); if(ret<0) { fprintf(stderr,"select() error,ret=%d.\n",ret); return -1; // continue; } else if(ret>0) { ret=read(sd,readbuf,1000); printf("read() ret=%d\n",ret); if(ret<0){ fprintf(stderr,"read() error.\n"); return -1; // close(sd); return -1; } else if(ret>0 && ret<1000) { printf("readbuf start--------------------\n"); // printf("%s\n",readbuf); // strcpy(url_response,readbuf); strcat(url_response,readbuf); printf("readbuf end--------------------\n"); break; } else { break; } // printf("------------------test---------------------\n"); /* // for(p=strtok(readbuf,"^M$\r\n");p;p=strtok(NULL,"^M$\r\n")) { for(p=strtok(readbuf,"\r\n");p;p=strtok(NULL,"\r\n")) { str=p; mark++; // if(mark==13) if(mark==7) break; } // printf("%s\n",str); strcpy(url_response,str); */ // break; // } } else { sec_num++; // break; continue; } // sleep(2); } ret=close(sd); if(ret==-1) { fprintf(stderr,"close() error.\n"); return -1; } return 0; } int parse_url_bmw_stock(char get_url_respons[LEN]) { int ret; int mark=0; char *p,*str; char readbuf[LEN]; char readbuf_cookie[LEN]; strcpy(readbuf,get_url_respons); for(p=strtok(readbuf,"|");p;p=strtok(NULL,"|")) { // printf("----------%s\n",get_url_respons); str=p; mark++; if(mark==3) { strcpy(shangzheng,str); } else if(mark==6) { strcpy(shenzheng,str); break; } // printf("-----------------------\n"); } // printf("shangzheng=%s\n",shangzheng); // printf("shenzheng=%s\n",shenzheng); // return 0; } int parse_url_wan_stock(char *buffer,char *token) { int ret; int num=0; char *p; char *str; char tmp_buf[1000]; memset(tmp_buf,0,1000); // printf("aaaaaaaaaaaaaaaaaaaaa\n"); int mark=0; strcpy(tmp_buf,buffer); for(str=strtok(tmp_buf,",");str;str=strtok(NULL,",")) { mark++; // printf("mark=%d,str=%s\n",mark,str); if(mark==4) { if(!strcmp("sh000001",token)) { ret=sscanf(str,"%8s",sh000001_value); if(ret==-1) { fprintf(stderr,"search_token() sscanf error.\n"); return -1; } // printf("sh000001_value=%s\n",sh000001_value); } else if(!strcmp("sz399001",token)) { ret=sscanf(str,"%8s",sz399001_value); if(ret==-1) { fprintf(stderr,"search_token() sscanf error.\n"); return -1; } // printf("sz399001_value=%s\n",sz399001_value); } break; } } /* for(str=strstr(buffer,"<string>"),str[0]='\0';str!=NULL;str[0]='\0',buffer=str+strlen("<string>"),str=strstr(buffer,"<string>")) { // str=strstr(buffer,"<string>"); // while(str!=NULL) { // str[0]='\0'; mark++; printf("mark=%d,str=%s\n",mark,str); // buffer=str+strlen("<string>"); // str=strstr(buffer,"<string>"); if(mark==3) { ret=sscanf(str,"<string>s",sh000001_date); if(ret==-1) { fprintf(stderr,"search_token() sscanf error.\n"); return -1; } } else if(mark==4) { ret=sscanf(str,"<string>%8s",sh000001_value); if(ret==-1) { fprintf(stderr,"search_token() sscanf error.\n"); return -1; } break; } } */ // printf("mark=%d,sh000001_date=%s\n",mark,sh000001_date); // printf("sh000001_value=%s\n",sh000001_value); return 0; } int str_to_float(char *str) { int ret; char str1[30]; double d1,d2; /* ret=sprintf(d1,"%f",str); if(ret<0) { fprintf(stderr,"sprintf() error.\n"); return -1; } */ // printf("#############################\n"); d1=atof(str); // printf("d1=%f\n",d1); if(d1>(double)0) { d2=((int)(d1*100+0.5))/100.0; // d2=(double)((d1*100+0.5)/100); // printf("d2=%f\n",d2); // printf("d2=%.2f\n",d2); sprintf(str,"%.2f",d2); } else if(d1<(double)0) { d2=((int)(d1*100-0.5))/100.0; //整形和浮点运算,若没有强制类型转换,则返回浮点型 // printf("d2=%f\n",d2); // printf("d2=%.2f\n",d2); sprintf(str,"%.2f",d2); } // printf("#############################\n"); return 0; } int main(int argc, char *argv[]) { int ret,i; int exitstatus=OK; char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"}; char status_information[LEN]; char performance_data[LEN]; //------------------------------------------------------------------------------ //bmw get stock char http_url_bmw_stock_request[LEN]; char http_url_bmw_stock_response[LEN]; memset(http_url_bmw_stock_request,0,LEN); memset(http_url_bmw_stock_response,0,LEN); strcat(http_url_bmw_stock_request,"PUT /sdpweb/rest/stock/xml HTTP/1.1\n"); strcat(http_url_bmw_stock_request,"Accept: application/xml\n"); strcat(http_url_bmw_stock_request,"Content-Type: application/xml\n"); strcat(http_url_bmw_stock_request,"Cache-Control: no-cache\n"); strcat(http_url_bmw_stock_request,"Pragma: no-cache\n"); strcat(http_url_bmw_stock_request,"User-Agent: Java/1.6.0_31\n"); strcat(http_url_bmw_stock_request,"Host: 10.199.205.245:8080\n"); strcat(http_url_bmw_stock_request,"Connection: keep-alive\n"); strcat(http_url_bmw_stock_request,"Content-Length: 473\n\r\n"); strcat(http_url_bmw_stock_request,"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><SDPReq><ReqID>BMW</ReqID><SdType>00</SdType><BizVer>1.0</BizVer><ActionCode>A0606</ActionCode><TransContent><?xml version="1.0" encoding="UTF-8"?><getCustomRpt xmlns:wstxns1="http://tempuri.org/"><ColIDs>9|1|6|11</ColIDs><Stocks>0|000001$1|399001</Stocks></getCustomRpt></TransContent><EventId>474f22b7f789484a8f673984926cacfc</EventId></SDPReq>\n"); // printf("bmw stock request=%s",http_url_bmw_stock_request); // printf("\n----------------------------------------------------------\n"); //get_url ret=get_url(http_url_bmw_stock_request,http_url_bmw_stock_response); if(ret!=0) { printf("get_url ret=%d\n",ret); fprintf(stderr,"get_url() error.\n"); } // printf("bmw stock response=%s\n",http_url_bmw_stock_response); // printf("\n----------------------------------------------------------\n"); //parse_url_bmw_stock ret=parse_url_bmw_stock(http_url_bmw_stock_response); if(ret!=0) { fprintf(stderr,"parse_url_bmw_stock() error.\n"); } printf("shangzheng=%s\n",shangzheng); printf("shenzheng=%s\n",shenzheng); // printf("\n----------------------------------------------------------\n"); // printf("\n----------------------------------------------------------\n"); //get sina sh000001 char http_url_sh000001_stock_request[LEN]; char http_url_sh000001_stock_response[LEN]; memset(http_url_sh000001_stock_request,0,LEN); memset(http_url_sh000001_stock_response,0,LEN); strcat(http_url_sh000001_stock_request,"GET /list=sh000001 HTTP/1.0\n"); strcat(http_url_sh000001_stock_request,"User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.12.9.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2\n"); strcat(http_url_sh000001_stock_request,"Host: hq.sinajs.cn\n"); strcat(http_url_sh000001_stock_request,"Accept: */*\r\n\r\n"); // printf("sh000001 stock request=%s",http_url_sh000001_stock_request); // printf("\n----------------------------------------------------------\n"); //get_url ret=get_url(http_url_sh000001_stock_request,http_url_sh000001_stock_response); if(ret!=0) { printf("get_url ret=%d\n",ret); fprintf(stderr,"get_url() error.\n"); } // printf("sh000001 stock response=%s\n",http_url_sh000001_stock_response); // printf("\n----------------------------------------------------------\n"); //parse_url_wan_stock ret=parse_url_wan_stock(http_url_sh000001_stock_response,"sh000001"); if(ret!=0) { fprintf(stderr,"parse_url_wan_stock() error.\n"); } ret=str_to_float(sh000001_value); if(ret==-1) { fprintf(stderr,"str_to_float() error.\n"); } // printf("shangzheng=%s\n",shangzheng); // printf("shenzheng=%s\n",shenzheng); // printf("\n----------------------------------------------------------\n"); // printf("\n----------------------------------------------------------\n"); // sleep(1); //get sina sz399001 char http_url_sz399001_stock_request[LEN]; char http_url_sz399001_stock_response[LEN]; memset(http_url_sz399001_stock_request,0,LEN); memset(http_url_sz399001_stock_response,0,LEN); strcat(http_url_sz399001_stock_request,"GET /list=sz399001 HTTP/1.1\n"); strcat(http_url_sh000001_stock_request,"User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.12.9.0 zlib/1.2.3 libidn/1.18 libssh2/1.2.2\n"); strcat(http_url_sz399001_stock_request,"Host: hq.sinajs.cn\n"); strcat(http_url_sz399001_stock_request,"Accept: */*\r\n\r\n"); // printf("sz399001 stock request=%s",http_url_sz399001_stock_request); // printf("\n----------------------------------------------------------\n"); //get_url ret=get_url(http_url_sz399001_stock_request,http_url_sz399001_stock_response); if(ret!=0) { printf("get_url ret=%d\n",ret); fprintf(stderr,"get_url() error.\n"); } // printf("sz399001 stock response=%s\n",http_url_sz399001_stock_response); // printf("\n----------------------------------------------------------\n"); //parse_url_wan_stock ret=parse_url_wan_stock(http_url_sz399001_stock_response,"sz399001"); if(ret!=0) { fprintf(stderr,"parse_url_wan_stock() error.\n"); } ret=str_to_float(sz399001_value); if(ret==-1) { fprintf(stderr,"str_to_float() error.\n"); } printf("sz399001_date=%s\n",sz399001_date); printf("sz399001_value=%s\n",sz399001_value); if(!strncmp(shangzheng,sh000001_value,3) && !strncmp(shenzheng,sz399001_value,3) && sec_num<=5) { sprintf(status_information,"Stock BMW_shangzheng=%s, BMW_shenzheng=%s, Sina_shangzheng=%s, Sina_shenzheng=%s, Sec_num=%d",shangzheng,shenzheng,sh000001_value,sz399001_value,sec_num); sprintf(performance_data,"BMW_shangzheng=%s, BMW_shenzheng=%s, Sina_shangzheng=%s, Sina_shenzheng=%s, Sec_num=%d",shangzheng,shenzheng,sh000001_value,sz399001_value,sec_num); } else if(!strncmp(shangzheng,sh000001_value,3) && !strncmp(shenzheng,sz399001_value,3) && (sec_num>5 && sec_num<=10)) { exitstatus=WARNING; sprintf(status_information,"Stock BMW_shangzheng=%s, BMW_shenzheng=%s, Sina_shangzheng=%s, Sina_shenzheng=%s, Sec_num=%d",shangzheng,shenzheng,sh000001_value,sz399001_value,sec_num); sprintf(performance_data,"BMW_shangzheng=%s, BMW_shenzheng=%s, Sina_shangzheng=%s, Sina_shenzheng=%s, Sec_num",shangzheng,shenzheng,sh000001_value,sz399001_value,sec_num); } else if(strncmp(shangzheng,sh000001_value,3) || strncmp(shenzheng,sz399001_value,3) || sec_num>10) { exitstatus=CRITICAL; sprintf(status_information,"Stock BMW_shangzheng=%s, BMW_shenzheng=%s, Sina_shangzheng=%s, Sina_shenzheng=%s, Sec_num=%d",shangzheng,shenzheng,sh000001_value,sz399001_value,sec_num); sprintf(performance_data,"BMW_shangzheng=%s, BMW_shenzheng=%s, Sina_shangzheng=%s, Sina_shenzheng=%s, Sec_num",shangzheng,shenzheng,sh000001_value,sz399001_value,sec_num); } printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data); return exitstatus; }

    转载请注明原文地址: https://ju.6miu.com/read-968992.html

    最新回复(0)