vi alert_log_check.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <time.h>
#include <unistd.h>
#define LEN 102400
#define HISPORT 10010
#define OLD_FILE "/home/mtvwap/tmp.file"
#define LOG_FILE "/SERVERLOG/ALERT_LOG/alert_p650ora.log"
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 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;
FILE *fp_old;
char c;
int line=0;
off_t begin=0,end=-1;
int i;
char *str;
int mark=0;
char readbuf[1024];
int ret;
int fd;
fd=open(log_file,O_RDONLY);
if(fd==-1) {
fprintf(stderr,"open() error %s\n",LOG_FILE);
exit(-1);
}
while(begin=lseek(fd,end,SEEK_END)>=0) {
if(read(fd,&c,1) != 1) { /* if read ok,ptr next*/
perror("read");
return -1;
}
fp=fdopen(fd,"r");
if(fp==NULL) {
perror("fdopen()");
return -1;
}
if(c=='\n') {
if(mark==0) {
str=fgets(readbuf,1024,fp);
// printf("readbuf=%s\n",readbuf);
/*
if(str==NULL) {
fprintf(stderr,"fgets() error.\n");
return -1;
}
*/
if(strstr(readbuf,"ORA-")) {
mark=1;
}
if(strstr(readbuf,day) && strstr(readbuf,year)) {
timeout=1;
break;
}
}
if(mark==1)
line++;
// printf("line=%d\n",line);
}
if(line==3) {
for(i=0;i<3;i++) {
fgets(readbuf,1024,fp);
strcat(error_str,readbuf);
// strcat(error_str,"\n");
}
ret=write_old_file(OLD_FILE);
if(ret==-1) {
fprintf(stderr,"write_old_file() error.\n");
return -1;
}
break;
}
end--;
}
ret=close(fd);
if(fd==-1) {
fprintf(stderr,"close() error %s\n",LOG_FILE);
exit(-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);
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",1900+p1->tm_year);
// 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);
exit(0);
}