X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=src%2Ffprobe-ulog.c;h=5df381bba52209151000d7b75a362f604a369957;hb=abc715123b4da7f0f60e89245c38f46c0fe8a7cc;hp=c5be35fcba0a0e52c21e71d1442f33672529914e;hpb=4ca11171ac9fca22562dc2c2f2255f74bf4c6f88;p=fprobe-ulog.git diff --git a/src/fprobe-ulog.c b/src/fprobe-ulog.c index c5be35f..5df381b 100644 --- a/src/fprobe-ulog.c +++ b/src/fprobe-ulog.c @@ -126,6 +126,7 @@ static struct getopt_parms parms[] = { {'b', MY_GETOPT_ARG_REQUIRED, 0, 0}, {'c', MY_GETOPT_ARG_REQUIRED, 0, 0}, {'d', MY_GETOPT_ARG_REQUIRED, 0, 0}, + {'D', MY_GETOPT_ARG_REQUIRED, 0, 0}, {'e', MY_GETOPT_ARG_REQUIRED, 0, 0}, {'E', MY_GETOPT_ARG_REQUIRED, 0, 0}, {'f', MY_GETOPT_ARG_REQUIRED, 0, 0}, @@ -379,12 +380,18 @@ inline void copy_flow(struct Flow *src, struct Flow *dst) } void get_cur_epoch() { - int fd, len; + int fd; fd = open("/tmp/fprobe_last_epoch",O_RDONLY); if (fd != -1) { char snum[7]; - read(fd, snum, 7); - sscanf(snum,"%d",&cur_epoch); + ssize_t len; + len = read(fd, snum, sizeof(snum)-1); + if (len != -1) { + snum[len]='\0'; + sscanf(snum,"%d",&cur_epoch); + cur_epoch++; /* Let's not stone the last epoch */ + close(fd); + } } return; } @@ -403,7 +410,7 @@ void update_cur_epoch_file(int n) { close(fd); } -unsigned get_log_fd(char *fname, unsigned cur_fd) { +unsigned get_log_fd(char *fname, int cur_fd) { struct Time now; unsigned cur_uptime; /* We check if the amount of space left on the disk < some threshold and start reusing logs, or bail out if that @@ -414,11 +421,12 @@ unsigned get_log_fd(char *fname, unsigned cur_fd) { gettime(&now); cur_uptime = getuptime_minutes(&now); + if (fstatfs(cur_fd, &statfs) && cur_fd!=START_VALUE) { my_log(LOG_ERR, "PANIC! Can't stat disk to calculate free blocks"); } else { - if (min_free && statfs.f_bfree < min_free) + if (min_free && (statfs.f_bfree < min_free)) switch(cur_epoch) { case 0: /* Uh oh. Our first file filled up all of the free space. Just bail out. */ my_log(LOG_ERR, "The first epoch filled up all the free space on disk. Bailing out."); @@ -430,12 +438,13 @@ unsigned get_log_fd(char *fname, unsigned cur_fd) { } /* Epoch length in minutes */ - if ((cur_uptime - prev_uptime) > epoch_length || cur_fd<0 || cur_epoch==-1) { + if (((cur_uptime - prev_uptime) > epoch_length) || (cur_fd < 0) || (cur_epoch==-1)) { char nextname[MAX_PATH_LEN]; int write_fd; prev_uptime = cur_uptime; cur_epoch = (cur_epoch + 1) % log_epochs; - close(cur_fd); + if (cur_fd>0) + close(cur_fd); snprintf(nextname,MAX_PATH_LEN,"%s.%d",fname,cur_epoch); if ((write_fd = open(nextname, O_WRONLY|O_CREAT|O_TRUNC)) < 0) { my_log(LOG_ERR, "open(): %s (%s)\n", nextname, strerror(errno)); @@ -444,8 +453,9 @@ unsigned get_log_fd(char *fname, unsigned cur_fd) { update_cur_epoch_file(cur_epoch); ret_fd = write_fd; } - else + else { ret_fd = cur_fd; + } return(ret_fd); }