00001 #include <stdio.h>
00002 #include <errno.h>
00003 #include <unistd.h>
00004 #include <string.h>
00005 #include <sys/types.h>
00006 #include <sys/stat.h>
00007 #include <time.h>
00008
00009 #define MAX_LOGFILES 10
00010
00011
00012 static char buff[1024] ;
00013 static struct stat statb ;
00014
00015 #ifndef PROJDIR
00016 #warning "PROJDIR not defined! Assuming /RTS"
00017 #define PROJDIR "/RTS"
00018 #endif
00019
00020 static char logfiles[MAX_LOGFILES][128] = {
00021 PROJDIR"/log/rts.log",
00022 PROJDIR"/log/trigger.log",
00023 PROJDIR"/log/evp.log",
00024 PROJDIR"/log/det.log",
00025 PROJDIR"/log/daq.log",
00026 } ;
00027
00028 static FILE *files[MAX_LOGFILES] ;
00029
00030 static int oldsizes[MAX_LOGFILES] ;
00031
00032
00033
00034
00035 int main(int argc, char *argv[])
00036 {
00037 char *fret ;
00038 int ret ;
00039 int i ;
00040 int data_in ;
00041 u_int last_flush ;
00042
00043 #ifdef OLD_TEST
00044 for(i=0;i<MAX_LOGFILES;i++) {
00045 printf("%3d: %d %c -%s-\n",i,logfiles[i][0],logfiles[i][0],logfiles[i]) ;
00046 }
00047 return 0 ;
00048 #endif
00049
00050 i = 0 ;
00051
00052 while(logfiles[i][0] != 0) {
00053
00054 files[i] = fopen(logfiles[i],"r") ;
00055
00056 if(files[i] == NULL) {
00057 perror(logfiles[i]) ;
00058 }
00059 i++ ;
00060 } ;
00061
00062
00063 last_flush = 0 ;
00064
00065 for(;;) {
00066
00067 u_int last_delta = time(NULL) - last_flush ;
00068
00069 data_in = 0 ;
00070 for(i=0;i<MAX_LOGFILES;i++) {
00071
00072 if(logfiles[i][0]==0) continue ;
00073
00074
00075
00076 errno = 0 ;
00077 fret = fgets(buff,sizeof(buff),files[i]) ;
00078 if(fret == NULL) {
00079 if(last_delta >= 1) {
00080 last_flush = time(NULL) ;
00081 last_delta = 0 ;
00082 fflush(stdout) ;
00083 }
00084
00085 if(errno) {
00086 perror(logfiles[i]) ;
00087 sleep(1) ;
00088 continue ;
00089 }
00090
00091 ret = stat(logfiles[i],&statb) ;
00092 if(ret < 0) {
00093 perror(logfiles[i]) ;
00094 sleep(1) ;
00095 continue ;
00096 }
00097
00098 if(statb.st_size < oldsizes[i]) {
00099 fclose(files[i]) ;
00100 files[i] = fopen(logfiles[i],"r") ;
00101 oldsizes[i] = 0 ;
00102 continue ;
00103
00104 }
00105 oldsizes[i] = statb.st_size ;
00106 continue ;
00107 }
00108
00109 data_in++ ;
00110
00111 if(((strstr(buff,"OPERATOR") != NULL) ||
00112 (strstr(buff,"CRITICAL") != NULL) ||
00113 (strstr(buff,"SHIFTLOG") != NULL))) {
00114 printf("%s",buff) ;
00115 }
00116
00117
00118 }
00119
00120 if(!data_in) sleep(1) ;
00121
00122 }
00123
00124
00125 return -1 ;
00126 }
00127
00128