예제 #1
0
파일: logger.c 프로젝트: DIT-Tools/drqueue
FILE *
log_master_open (int level) {
  FILE *f;
  char filename[BUFFERLEN];
  char oldfilename[BUFFERLEN];
  char *basedir;
  struct stat info;

  // fix compiler warning
  (void)level;
  
  // FIXME: use level variable

 
  if (log_on_screen()) {
    return stderr;
  }

  if ((basedir = getenv("DRQUEUE_LOGS")) == NULL) {
    fprintf (stderr,"Environment variable DRQUEUE_LOGS not set. Aborting...\n");
    log_level_out_set(L_ONSCREEN);
    return stderr;
  }

  snprintf(filename,BUFFERLEN-1,"%s/master.log",basedir);

  // basic logrotation
  if ((stat(filename, &info) == 0) && (info.st_size > MAX_MASTER_LOG_SIZE)) {
    snprintf(oldfilename,BUFFERLEN-1,"%s/master.1.log",basedir);
    unlink(oldfilename);
    rename(filename, oldfilename);
  }

#ifdef __LINUX
  if ((f = fopen (filename,"a")) == NULL) {
    perror ("log_master_open: Couldn't open file for writing");
    fprintf (stderr,"So... logging on screen.\n");
    log_level_out_set(L_ONSCREEN);
    return stderr;
  }
#else
  if ((f = fopen (filename,"ab")) == NULL) {
    perror ("log_master_open: Couldn't open file for writing");
    fprintf (stderr,"So... logging on screen.\n");
    log_level_out_set(L_ONSCREEN);
    return stderr;
  }
#endif

  return f;
}
예제 #2
0
파일: logger.c 프로젝트: DIT-Tools/drqueue
FILE *
log_slave_open_computer (int level, char *name) {
  FILE *f;
  char filename[BUFFERLEN];
  char oldfilename[BUFFERLEN];
  char *basedir;
  struct stat info;

  // fix compiler warning
  (void)level;
  
  // FIXME: use level variable

  if (log_on_screen()) {
    return stderr;
  } 

  if ((basedir = getenv("DRQUEUE_LOGS")) == NULL) {
    fprintf (stderr,"Environment variable DRQUEUE_LOGS not set. Logging on screen...\n");
    log_level_out_set (L_ONSCREEN);
    return stderr;
  }

  snprintf(filename,BUFFERLEN-1,"%s/%s.log",basedir,name);

  // basic logrotation
  if ((stat(filename, &info) == 0) && (info.st_size > MAX_SLAVE_LOG_SIZE)) {
    snprintf(oldfilename,BUFFERLEN-1,"%s/%s.1.log",basedir,name);
    unlink(oldfilename);
    rename(filename, oldfilename);
  }

  if ((f = fopen (filename,"a")) == NULL) {
    perror ("log_slave_open_computer: Couldn't open file for writing");
    fprintf (stderr,"So... logging on screen.\n");
    log_level_out_set (L_ONSCREEN);
    return stderr;
  }

  return f;
}
예제 #3
0
파일: slave.c 프로젝트: kubat/drqueue
void slave_get_options (int *argc,char ***argv, int *force, struct slave_database *sdb) {
    int opt;
    char *hour,*min;

    while ((opt = getopt (*argc,*argv,"a:n:fl:c:ohv")) != -1) {
        switch (opt) {
        case 'a':
            sdb->limits.autoenable.flags |= AEF_ACTIVE;
            hour = optarg;
            if ((min = strchr (hour,':')) == NULL) {
                usage ();
                exit (1);
            }
            *min = '\0';
            min++;
            sdb->limits.autoenable.h = atoi (hour) % 24;
            sdb->limits.autoenable.m = atoi (min) % 60;
            printf ("Autoenable time from command line: %02i:%02i\n",sdb->limits.autoenable.h,sdb->limits.autoenable.m);
            break;
        case 'n':
            sdb->limits.nmaxcpus = atoi (optarg);
            sdb->flags |= SDBF_SETMAXCPUS;
            break;
        case 'c':
            strncpy(sdb->conf,optarg,PATH_MAX-1);
            printf ("Reading config file from: '%s'\n",sdb->conf);
            break;
        case 'f':
            *force = 1;
            fprintf (stderr,"WARNING: Forcing usage of pre-existing shared memory (-f). Do not do this unless you really know what it means.\n");
            break;
        case 'l':
            log_level_severity_set (atoi(optarg));
            printf ("Logging level set to: %s\n",log_level_str(loglevel));
            break;
        case 'o':
            log_level_out_set (L_ONSCREEN);
            printf ("Logging on screen.\n");
            break;
        case 'v':
            show_version (*argv);
            exit (0);
        case '?':
        case 'h':
            usage();
            exit (0);
        }
    }
}
예제 #4
0
파일: logger.c 프로젝트: DIT-Tools/drqueue
void
log_auto (int level, char *fmt, ...) {
  // this will be the way to send log messages when no one is known
  // for sure.
  FILE *f_log = stderr;
  char time_buf[BUFFERLEN];
  char job_buf[BUFFERLEN];
  char task_buf[BUFFERLEN];
  char computer_buf[BUFFERLEN];
  char msg[MAXLOGLINELEN];
  char bkpmsg[MAXLOGLINELEN];
  char origmsg[MAXLOGLINELEN];

  va_list ap;

  if (!log_level_dest(level))
    return;

  if (log_on_screen()) {
    f_log = stderr;
  } else {
    switch (logtool) {
    case DRQ_LOG_TOOL_MASTER:
      f_log = log_master_open(level);
      break;
    case DRQ_LOG_TOOL_SLAVE_TASK:
      if (logger_task) {
	f_log = log_slave_open_task(level,logger_task);
	break;
      }
    case DRQ_LOG_TOOL_SLAVE:
    default:
      if (gethostname(computer_buf,BUFFERLEN) != -1) {
	f_log = log_slave_open_computer(level,computer_buf);
      } else {
	log_level_out_set(L_ONSCREEN);
	f_log = stderr;
      }
    }
  }

  va_start (ap,fmt);
  vsnprintf (origmsg,MAXLOGLINELEN,fmt,ap);
  va_end (ap);

  log_get_time_str (time_buf,BUFFERLEN);
  snprintf (bkpmsg,MAXLOGLINELEN,"%s :",time_buf); // Time and pid
  strcpy(msg,bkpmsg);
  snprintf (bkpmsg,MAXLOGLINELEN,"%s | %6s |",msg,log_level_str(level)); // Log level
  strcpy(msg,bkpmsg);

  if (logger_job) {
    log_get_job_str (job_buf,BUFFERLEN);
    snprintf (bkpmsg,MAXLOGLINELEN,"%s %s :",msg,job_buf);
    strcpy(msg,bkpmsg);
  }						       

  if (logger_computer) {
    log_get_computer_str (computer_buf,BUFFERLEN);
    snprintf (bkpmsg,MAXLOGLINELEN,"%s %s :",msg,computer_buf);
    strcpy(msg,bkpmsg);
  }						       
  if (logger_task) {
    log_get_task_str (task_buf,BUFFERLEN);
    snprintf (bkpmsg,MAXLOGLINELEN,"%s %s :",msg,task_buf);
    strcpy(msg,bkpmsg);
  }

  fprintf (f_log,"%s -> MSG: %s\n",msg,origmsg);

  if (fileno(f_log) != fileno(stderr))
    fclose(f_log);

}