vi check_aes_log.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <errno.h>
#define OK 0
#define WARNING 1
#define CRITICAL 2
#define UNKNOWN 3
#define LEN 40960
int exitstatus=OK;
char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};
char status_information[LEN];
char performance_data[LEN];
//#define LOG_FILE_DIR "/home/nagios/check_wcar_log/113"
//#define LOG_FILE_DIR "/opt/smb_win_113_huapu_intface/gateWay/log"
//#define LOG_FILE_DIR "/home/neo/check_log/aes"
#define LOG_FILE_DIR "/opt/mvap/logs"
//#define OLD_FILE_FAILED "/home/nagios/check_wcar_log/113/log_err_tmp.file"
//#define OLD_FILE_FAILED "/home/neo/check_log/aes/log_tmp.file"
#define OLD_FILE_FAILED "/home/nagios/check_log/log_tmp.file"
char aes_log_str_now[LEN]={0};
char aes_log_str_old[LEN]={0};
//char today_start_time[32];
int all_line=0;
int err_line=0;
int err_count=0;
int err_mark=0;
int check_old_file(void) {
int ret;
FILE *fp_old;
char readbuf[1024];
//OLD_FILE_FAILED
fp_old=fopen(OLD_FILE_FAILED,"a+");
if(fp_old==NULL) {
fprintf(stderr,"check_old_file() is fopen() error.\n");
return -1;
}
ret=fseek(fp_old,0,SEEK_SET);
if(ret==-1) {
fprintf(stderr,"check_old_file() is fseek() error.\n");
return -1;
}
else {
fgets(aes_log_str_old,1024,fp_old);
}
ret=fclose(fp_old);
if(ret==EOF) {
fprintf(stderr,"check_old_file() is fclose() error.\n");
return -1;
}
// printf("%s",error_str_old);
// printf("-------------------------\n");
return 0;
}
int write_old_file(char *old_file,char *error_str) {
int ret;
FILE *fp_old;
fp_old=fopen(old_file,"w");
if(fp_old==NULL) {
fprintf(stderr,"write_old_file() is fopen() error.\n");
}
ret=fprintf(fp_old,"%s",error_str);
if(ret<0) {
fprintf(stderr,"write_old_file() if fprintf() fp_old error.\n");
return -1;
}
ret=fclose(fp_old);
if(ret==EOF) {
fprintf(stderr,"write_old_file() is fclose() error.\n");
}
return 0;
}
int parse_log_file(char *log_file) {
FILE *fp;
long int *position;
char readbuf[1024];
char readbuf_tmp[1024];
int size=1024,line=0,line_bak;
char *str;
int ret;
int mark;
char *p,*str_date;
position=(long int *)malloc(sizeof(long int)*size);
position[0]=0;
fp=fopen(log_file,"r");
if(fp==NULL) {
// fprintf(stderr,"mytail() is fopen() error %s\n",log_file);
// perror("mytail() is fopen() error,");
// exit(-1);
//ENOENT macro is No such file or directory
if(errno==ENOENT) {
// printf("errno=%d,%s\n",errno,strerror(errno));
sprintf(status_information,"Log file no create, log_err_num=%d",err_count);
sprintf(performance_data,"log_err_num=%d;;;;",err_count);
// exitstatus=WARNING;
exitstatus=OK;
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
exit(exitstatus);
}
else {
// printf("errno=%d,%s\n",errno,strerror(errno));
sprintf(status_information,"Log file no create, log_err_num=%d",err_count);
sprintf(performance_data,"log_err_num=%d;;;;",err_count);
// exitstatus=WARNING;
exitstatus=UNKNOWN;
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
exit(exitstatus);
}
/*
sprintf(status_information,"Log file no create, Queue_full_num=%d",err_count);
sprintf(performance_data,"Queue_full_num=%d;;;;",err_count);
exitstatus=WARNING;
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
exit(exitstatus);
*/
}
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);
}
all_line=line;
line_bak=line;
while(line--) {
mark=0;
ret=fseek(fp,position[line],SEEK_SET);
if(ret==-1) {
perror("mytail() is fseek()");
return -1;
}
str=fgets(readbuf,sizeof(readbuf),fp);
if(str==NULL) {
fprintf(stderr,"mytail() is fgets() error.\n");
return -1;
}
/*
strcpy(readbuf_tmp,readbuf);
for(p=strtok(readbuf_tmp,",\"");p;p=strtok(NULL,",\"")) {
str_date=p;
mark++;
if(mark==12) break;
}
*/
// printf("mark=%d,str_date=%s\n",mark,str_date);
/*
if(strcmp(str_date,today_start_time)<0) {
break;
}
*/
// printf("mark=%d,str_date=%s\n",mark,str_date);
// if(strcmp(str_date,today_start_time)>=0 && line!=1) {
// printf("-----------------\n");
if(strstr(readbuf,"Down") && err_mark==0) {
// if(strstr(readbuf,"Exception") && err_mark==0) {
// printf("-----------------\n");
if(strcmp(aes_log_str_old,readbuf)) {
err_line=line+1;
err_count++;
// strcat(error_str,readbuf);
// printf("readbuf=%s\n",readbuf);
strcpy(aes_log_str_now,readbuf);
// printf("aes_log_str_now=%s\n",aes_log_str_now);
if(err_count==1) {
ret=write_old_file(OLD_FILE_FAILED,aes_log_str_now);
if(ret==-1) {
fprintf(stderr,"mytail() is write_old_file() aes_log_str_now error.\n");
return -1;
}
}
}
else {
err_mark=1;
}
}
// }
if(err_mark==1) {
break;
}
}
// printf("err_400_count=%d,aes_log_str_now=%s\n",err_400_count,aes_log_str_now);
// printf("err_404_count=%d,error_str_now_404=%s\n",err_404_count,error_str_now_404);
ret=fclose(fp);
if(ret==EOF) {
fprintf(stderr,"mytail() is fclose() error\n");
}
return 0;
}
int main(void) {
int fd,ret;
char aes_log_file[128];
char nowtime[128];
char hostname[128];
time_t timestamp;
struct tm *p1;
// timestamp=time(NULL)-86400;
timestamp=time(NULL);
p1=localtime(×tamp);
sprintf(aes_log_file,"%s/log.%d%02d%02d",LOG_FILE_DIR,1900+p1->tm_year,1+p1->tm_mon,p1->tm_mday);
printf("aes_log_file=%s\n",aes_log_file);
// sprintf(today_start_time,"%d-%02d-%02d %s\n",p1->tm_year+1900,p1->tm_mon+1,p1->tm_mday,"16-00-00");
// printf("today_start_time=%s\n",today_start_time);
ret=gethostname(hostname,sizeof(hostname));
if(ret==-1) {
fprintf(stderr,"gethostname() error.\n");
exit(-1);
}
ret=check_old_file();
if(ret==-1) {
fprintf(stderr,"check_old_file() error.\n");
exit(-1);
}
// printf("aes_log_str_old=%s\n",aes_log_str_old);
// printf("error_str_old_404=%s\n",error_str_old_404);
ret=parse_log_file(aes_log_file);
if(ret==-1) {
fprintf(stderr,"mytail() error.\n");
exit(-1);
}
// printf("%s\n",nowtime);
// printf("hostname=%s\n",hostname);
// printf("err_400_line=%d\n",err_400_line);
// printf("err_404_line=%d\n",err_404_line);
// printf("all_line=%d\n",all_line);
// printf("-------------------------------\n");
if(err_count>=1) {
exitstatus=CRITICAL;
}
sprintf(status_information,"Current aes_log_num=%d",err_count);
sprintf(performance_data,"aes_log_log=%d;;;;",err_count);
printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);
return exitstatus;
}