📄 send_message_toserver.cxx
字号:
#include <stdio.h>#include <unistd.h>#include "myptop.h"#include "sysmonitor.h"#include <netdb.h>#include <strings.h>#include <stdlib.h>#include <string.h>#include <dcepm.h>#include <sys/sysinfo.h>#include <sys/types.h>#include <errno.h>#include <dstruct.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/ioctl.h>#include <net/if.h>#include <signal.h>#include <fcntl.h>#include <sys/param.h>#include <sys/mount.h>#include <sys/pstat.h>extern int moni_interval;int getprocinfo_status=0;struct netrecord{ long netRx,netTx;}*prev_net_ptr,*cur_net_ptr;int net_num=0; //number of net to be monitoredint proc_num=0; //number of proc to be monitoredint part_num=0; //number of partition to be monitorint getconfig_ok=0;struct NETMESSAGE *net_message_ptr,*net_message_ptr1;struct net_name *net_name_ptr,*net_name_ptr1;struct proc_name *proc_name_ptr,*proc_name_ptr1;struct part_name *part_name_ptr,*part_name_ptr1;struct NODEINFO *nodeinfo_ptr;struct PTHREADMESSAGE *pthread_message_ptr,*pthread_message_ptr1;struct PARTITIONMESSAGE *partition_message_ptr,*partition_message_ptr1;int getnetinfo (struct NETMESSAGE * net_message_ptr);int getmeminfo (int *Mem_size,float *Mem_used);int getcpuinfo (float *cpu_used);int getpartinfo(const char *dri_name,int *total_s,float *dri_use);int getpthreadinfo(char * procname,PTHREADMESSAGE * pthreadmes);int fill_message_toserver(char *ptr,int mestype);void send_allmsg_tosvr(int svr1,int svr2,int *svr1_flag,int *svr2_flag,char *buf_svr);struct pst_processor *psp,*psp_last;size_t nspu;int get_configinfo(int sockfd){ int retcode,j; char config_buf[10]; retcode=Select_socket_status1(sockfd,1); if(retcode<0) { printf("Select_socket_status error second\n"); return -1; } config_buf[0]=0xfc; config_buf[1]=strlen(hostname); strcpy(config_buf+2,hostname); config_buf[strlen(hostname)+2]=0x16; j=ptop_write_message(sockfd,config_buf,strlen(hostname)+3); if(j<=0) { if((j==-2)||(j==-1)) { close(sockfd); return -1; } } sleep(1); while(1) { //printf("zhaiyong test2 %d\n",__LINE__); retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error first---- sockfd=%d \n",sockfd); return -1; } retcode=read(sockfd,config_buf,1); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } //printf("zhaiyong test2 %d\n",__LINE__); if((unsigned char)config_buf[0]==0xfc) { retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error first---- sockfd=%d \n",sockfd); return -1; } //get part_name to be monitored retcode=read(sockfd,config_buf,1); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } part_num=config_buf[0]; //printf("part_num is %d\n",part_num); partition_message_ptr=(PARTITIONMESSAGE *)malloc(sizeof(struct PARTITIONMESSAGE)*part_num); part_name_ptr=(struct part_name *)malloc(sizeof(struct part_name)*part_num); retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error first---- sockfd=%d \n",sockfd); return -1; } retcode=read(sockfd,part_name_ptr,sizeof(struct part_name)*part_num); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } for(int i=0;i<part_num;i++) { //printf("send %s\n",(part_name_ptr+i)->name); strcpy((partition_message_ptr+i)->Id,(part_name_ptr+i)->name); strcat((partition_message_ptr+i)->Id,"_"); strcat((partition_message_ptr+i)->Id,hostname); //printf("send:%s\n",(partition_message_ptr+i)->Id); } //get pthread_name to be monitored retcode=read(sockfd,config_buf,1); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } proc_num=config_buf[0]; //printf("proc_num is %d\n",proc_num); pthread_message_ptr=(PTHREADMESSAGE *)malloc(sizeof(struct PTHREADMESSAGE)*proc_num); proc_name_ptr=(struct proc_name *)malloc(sizeof(struct proc_name)*proc_num); retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error first---- sockfd=%d \n",sockfd); return -1; } retcode=read(sockfd,proc_name_ptr,sizeof(struct proc_name)*proc_num); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } for(i=0;i<proc_num;i++) { //printf("send %s\n",(proc_name_ptr+i)->name); strcpy((pthread_message_ptr+i)->Id,(proc_name_ptr+i)->name); strcat((pthread_message_ptr+i)->Id,"_"); strcat((pthread_message_ptr+i)->Id,hostname); //printf("send:%s\n",(pthread_message_ptr+i)->Id); } //get net_name to be monitored retcode=read(sockfd,config_buf,1); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } net_num=config_buf[0]; //printf("net_num is %d\n",net_num); net_message_ptr=(NETMESSAGE *)malloc(sizeof(struct NETMESSAGE)*net_num); net_name_ptr=(struct net_name *)malloc(sizeof(struct net_name)*net_num); retcode=Select_socket_status1(sockfd,0); if(retcode<0) { printf("Select_socket_status error first---- sockfd=%d \n",sockfd); return -1; } retcode=read(sockfd,net_name_ptr,sizeof(struct net_name)*net_num); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } for(i=0;i<net_num;i++) { //printf("%s\n",(net_name_ptr+i)->name); strcpy((net_message_ptr+i)->Id,(net_name_ptr+i)->name); strcat((net_message_ptr+i)->Id,"_"); strcat((net_message_ptr+i)->Id,hostname); //printf("send:%s\n",(net_message_ptr+i)->Id); } prev_net_ptr=(struct netrecord*)malloc(sizeof(struct netrecord)*net_num); cur_net_ptr=(struct netrecord*)malloc(sizeof(struct netrecord)*net_num); bzero(prev_net_ptr,sizeof(struct netrecord)*net_num); bzero(cur_net_ptr,sizeof(struct netrecord)*net_num); retcode=read(sockfd,config_buf,1); if(retcode<=0) { printf("first recv sockfd = %d, ret_value is %d close SOCKET \n",sockfd,retcode); close(sockfd); break; } if((unsigned char)config_buf[0]==0x16) { getconfig_ok=1; return 1; } } }}void send_message_toserver(){ int j,k; int m,n,ret; hostent *ptr; struct servent *sp; char temp,buf[10000]; int socket_svr1,socket_svr2; char svr1_name[20],svr2_name[20]; char svr1bak_name[20],svr2bak_name[20]; int port,ret_code; char svr1_ip[100],svr2_ip[100],svr1bak_ip[100],svr2bak_ip[100]; int svr1_open_flag=0,svr2_open_flag=0; int dualnet_flag=0; //printf("send_message_toserver ..........\n"); printf("local host is :%s \n",hostname); if((sp=getservbyname("sysmonitor","tcp"))==NULL) { printf("I can't found service in /etc/services file !!!\n"); exit(0); } port=ntohs(sp->s_port); bzero(svr1_name,20); bzero(svr2_name,20); strcpy(svr1_name,"scd1"); strcpy(svr2_name,"scd2"); strcpy(svr1bak_name,"scd1-1"); strcpy(svr2bak_name,"scd2-1"); if(getenv("dualNetFlag")) { dualnet_flag=atoi(getenv("dualNetFlag")); } else { dualnet_flag=0; } ptr=gethostbyname("scd1"); if(!strcmp(ptr->h_name,"")) { perror("get host by name scd1 is error exit:"); } strcpy(svr1_ip,inet_ntoa(*((struct in_addr*)*(ptr->h_addr_list)))); printf("svr1_ip=%s\n",svr1_ip); ptr=gethostbyname("scd2"); if(!strcmp(ptr->h_name,"")) { perror("get host by name scd2 is error exit:"); } strcpy(svr2_ip,inet_ntoa(*((struct in_addr*)*(ptr->h_addr_list)))); printf("svr2_ip=%s \n",svr2_ip); if(dualnet_flag==1) { ptr=gethostbyname("scd1-1"); if(!strcmp(ptr->h_name,"")) { perror("get host by name scd1-1 is error !:"); } else { strcpy(svr1bak_ip,inet_ntoa(*((struct in_addr*)*(ptr->h_addr_list)))); printf("svr1bak_ip=%s\n",svr1_ip); } ptr=gethostbyname("scd2-1"); if(!strcmp(ptr->h_name,"")) { perror("get host by name scd2-1 is error !:"); } else { strcpy(svr2bak_ip,inet_ntoa(*((struct in_addr*)*(ptr->h_addr_list)))); printf("svr2bak_ip=%s \n",svr2_ip); } } ////////get cpu num of computer,prepare for get cpu info////////////////// struct pst_dynamic psd; if (pstat_getdynamic(&psd, sizeof(psd), (size_t)1, 0) == -1) { perror("pstat_getdynamic error!"); } nspu = psd.psd_proc_cnt; //how to free? psp = (struct pst_processor *)malloc(nspu * sizeof(struct pst_processor)); psp_last = (struct pst_processor *)malloc(nspu * sizeof(struct pst_processor)); ////////////////// sleep(2); //wait for server to be ready! while(1==1) { if(svr1_open_flag!=1) { svr1_open_flag=1; if((socket_svr1=ptop_tcp_open(svr1_name,NULL,port)) < 0) { printf("wk_station tcp connect error svr1_ip socket socket_svr1 = %d \n",socket_svr1); if(dualnet_flag==1) { printf("begin to connect to serverbak!\n"); if((socket_svr1=ptop_tcp_open(svr1bak_name,NULL,port)) < 0) { printf("wk_station tcp connect error svr1bak_ip socket socket_svr1 = %d \n",socket_svr1); svr1_open_flag=-1; } else { if(getconfig_ok==0) { get_configinfo(socket_svr1); } } } else { svr1_open_flag=-1; } } else { if(getconfig_ok==0) { get_configinfo(socket_svr1); } } } if(svr2_open_flag!=1) { svr2_open_flag=1; if((socket_svr2=ptop_tcp_open(svr2_name,NULL,port)) < 0) { printf("wk_station tcp connect error svr2_ip socket socket_svr2 = %d \n",socket_svr2); if(dualnet_flag==1) { printf("svr2bak_name=%s port=%d \n",svr2bak_name,port); if((socket_svr2=ptop_tcp_open(svr2bak_name,NULL,port)) < 0) { printf("wk_station tcp connect error svr2bak_ip socket socket_svr1 = %d \n",socket_svr2); svr2_open_flag=-1; } else { if(getconfig_ok==0) { get_configinfo(socket_svr2); } } } else { svr2_open_flag=-1; } } else { if(getconfig_ok==0) { get_configinfo(socket_svr2); } } } while(1==1) { if((svr1_open_flag+svr2_open_flag)<2) { printf("svr1_open_flag is %d!!!!!!!!!!!!!!!!!\n",svr1_open_flag); printf("svr2_open_flag is %d!!!!!!!!!!!!!!!!!\n",svr2_open_flag); } if((svr1_open_flag==-1)&&(svr2_open_flag==-1)) { getconfig_ok=0; break; } if(getconfig_ok==0) { break; } time_t time_local; time(&time_local); char *p; p=ctime(&time_local); printf("Report time is %s",p); printf("Reporting... ...\n"); for(m=0;m<20;m++) { buf[m]=1; } send_allmsg_tosvr(socket_svr1,socket_svr2,&svr1_open_flag,&svr2_open_flag,buf); printf("Report over!\n"); printf("\n\n********************************\n\n"); if((svr1_open_flag+svr2_open_flag)<2) { break; } sleep(moni_interval); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -