vi tomcat_server_log.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define LEN 102400
#define HISPORT 10010
#define OLD_FILE "/home/mtvwap/check_log/test/tomcat_server_log_tmp.file"
#define LOG_FILE "/home/mtvwap/check_log/test/server.log.1"
char error_str[LEN];
char error_str_old[LEN];
char error_str_new[LEN];
int timeout=0;
char day[32],year[32];
struct packet {
char data[LEN];
};
int all_line=0;
int check_old_file(char *old_file) {
int ret;
FILE *fp_old;
char readbuf[1024];
fp_old=fopen(old_file,"a+");
fseek(fp_old,0,SEEK_SET);
while(fgets(readbuf,1024,fp_old)!=NULL) {
strcat(error_str_old,readbuf);
}
fclose(fp_old);
// printf("%s",error_str_old);
// printf("-------------------------\n");
return 0;
}
int write_old_file(char *old_file) {
int ret;
FILE *fp_old;
fp_old=fopen(old_file,"w");
if(fp_old==NULL) {
fprintf(stderr,"fopen()2 error.\n");
}
ret=fprintf(fp_old,"%s",error_str);
if(ret<0) {
fprintf(stderr,"fprintf() fp_old error.\n");
return -1;
}
fclose(fp_old);
return 0;
}
int mytail(char *log_file) {
FILE *fp;
long int *position;
char readbuf[1024];
int size=1024,line=0,line_bak;
char *str;
int mark=0;
int ret;
position=(long int *)malloc(sizeof(long int)*size);
position[0]=0;
fp=fopen(log_file,"r");
if(fp==NULL) {
fprintf(stderr,"fopen() error %s\n",LOG_FILE);
exit(-1);
}
while(fgets(readbuf,sizeof(readbuf),fp)!=NULL) {
if(++line==size) {
size*=2;
position=(long int *)realloc(position,sizeof(long int)*size);
}
position[line]=ftell(fp);
}
line_bak=line;
all_line=line;
while(line--) {
ret=fseek(fp,position[line],SEEK_SET);
if(ret==-1) {
perror("fseek()");
return -1;
}
str=fgets(readbuf,sizeof(readbuf),fp);
if(str==NULL) {
fprintf(stderr,"fgets() error.\n");
return -1;
}
// if(strstr(readbuf,day) && strstr(readbuf,year)) {
if(strstr(readbuf,year)) {
timeout=1;
all_line=line_bak-line;
break;
}
if(strstr(readbuf,"ORA-")) {
strcat(error_str,readbuf);
ret=write_old_file(OLD_FILE);
if(ret==-1) {
fprintf(stderr,"write_old_file() error.\n");
return -1;
}
all_line=line_bak-line;
break;
}
all_line=line_bak-line;
}
ret=fclose(fp);
if(ret==-1) {
fprintf(stderr,"fclose() error %s\n",LOG_FILE);
return -1;
}
return 0;
}
int send_to_169() {
int sd;
int ret;
struct sockaddr_in his_end;
sd=socket(PF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error.\n");
return -1;
}
// printf("sd=%d\n",sd);
his_end.sin_family=AF_INET;
his_end.sin_port=htons(HISPORT);
his_end.sin_addr.s_addr=inet_addr("10.199.75.169");
ret=connect(sd,(struct sockaddr *)&his_end,sizeof(his_end));
if(ret==-1) {
perror("connect()");
return -1;
}
ret=write(sd,error_str,strlen(error_str));
if(ret==-1) {
fprintf(stderr,"write error.\n");
return -1;
}
printf("client write %d bytes.\n",ret);
ret=close(sd);
if(ret==-1) {
fprintf(stderr,"close() error.\n");
return -1;
}
return 0;
}
int main(void) {
int fd,ret;
int mark=0;
char nowtime[128];
char hostname[128];
char my_day[32];
char my_week[32];
char my_month[32];
char my_year[32];
char *week[]={"Sat","Sun","Mon","Tue","Wed","Thu","Fri"};
char *month[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
time_t timep;
struct tm *p1;
timep=time(NULL)-86400;
p1=localtime(&timep);
sprintf(my_day,"%02d",p1->tm_mday);
sprintf(my_week,"%s",week[p1->tm_wday]);
sprintf(my_month,"%s",month[p1->tm_mon]);
sprintf(my_year,"%d",1900+p1->tm_year);
// sprintf(day,"%s %s %d",week[p1->tm_wday],month[p1->tm_mon],p1->tm_mday-1);
sprintf(year,"%d-%02d-%02d",1900+p1->tm_year,(1+p1->tm_mon),p1->tm_mday);
printf("day=%s,year=%s\n",day,year);
sprintf(nowtime,"%d-%02d-%02d-%02d-%02d-%02d",1900+p1->tm_year,(1+p1->tm_mon),p1->tm_mday,p1->tm_hour,p1->tm_min,p1->tm_sec);
ret=gethostname(hostname,sizeof(hostname));
if(ret==-1) {
fprintf(stderr,"gethostname() error.\n");
exit(-1);
}
ret=check_old_file(OLD_FILE);
if(ret==-1) {
fprintf(stderr,"check_old_file() error.\n");
exit(-1);
}
ret=mytail(LOG_FILE);
if(ret==-1) {
fprintf(stderr,"mytail() error.\n");
exit(-1);
}
// strcpy(error_str_new,error_str);
// if(!strcmp(error_str_new,error_str_old)) {
if(!strcmp(error_str,error_str_old)) {
mark=0;
// printf("log not change!\n");
}
else if(timeout==1) {
mark=0;
}
else {
mark=1;
// printf("log is changed!\n");
ret=send_to_169();
if(ret==-1) {
fprintf(stderr,"send_to_169() error.\n");
exit(-1);
}
// printf("22222222222222222222222222\n");
}
printf("mark=%d\n",mark);
if(timeout==1)
printf("timeout\n");
printf("%s\n",nowtime);
printf("hostname=%s\n",hostname);
printf("%s\n\n",error_str);
printf("all_line=%d\n",all_line);
exit(0);
}