(file) Return to store_ds_fd_V_30s_01h_lev1_8.c CVS log (file) (dir) Up to [Development] / JSOC / proj / dsdsmigr / apps

File: [Development] / JSOC / proj / dsdsmigr / apps / store_ds_fd_V_30s_01h_lev1_8.c (download)
Revision: 1.2, Wed Feb 27 20:17:01 2008 UTC (15 years, 3 months ago) by arta
Branch: MAIN
CVS Tags: Ver_LATEST, Ver_9-5, Ver_9-41, Ver_9-4, Ver_9-3, Ver_9-2, Ver_9-1, Ver_9-0, Ver_8-8, Ver_8-7, Ver_8-6, Ver_8-5, Ver_8-4, Ver_8-3, Ver_8-2, Ver_8-12, Ver_8-11, Ver_8-10, Ver_8-1, Ver_8-0, Ver_7-1, Ver_7-0, Ver_6-4, Ver_6-3, Ver_6-2, Ver_6-1, Ver_6-0, Ver_5-9, Ver_5-8, Ver_5-7, Ver_5-6, Ver_5-5, Ver_5-3, Ver_5-2, Ver_5-14, Ver_5-13, Ver_5-12, Ver_5-11, Ver_5-10, Ver_5-1, Ver_5-0, Ver_4-7, Ver_4-6, Ver_4-5, Ver_4-4, Ver_4-3, Ver_4-2, Ver_4-1, NewTree01_cp09_JSOC, NewTree01_cp08_JSOC, HEAD
Changes since 1.1: +71 -31 lines
Sync old tree with new - check point 08

/* store_ds_fd_V_30s_01h_lev1_8.c
 * 	stores mdi fd_V_30s_01h_lev1_8 ds in DRMS/SUMS.
*/
/* Usage:  store_ds_fd_V_30s_01h_lev1_8 series_num=n-m
 *         
 *     Store MDI datasets into DRMS/SUMS.
 * 
 * Queries the mdi dsds to get the location of the given series numbers
 * and copies the dirs into the SUMS and makes the DRMS keywords according
 * to the ds_mdi.fd_V_30s_01h_lev1_8.jsd where:
 *		Index:          series_num
 *
 */

#include "jsoc_main.h"
#include "drms.h"
#include "drms_names.h"
#include <unistd.h>
#include <strings.h>

#define NOTSPECIFIED "***NOTSPECIFIED***"
					 /* List of default parameter values */
ModuleArgs_t module_args[] = { 
  {ARG_STRING, "series_num", NOTSPECIFIED, "", ""},    /* series #s to store */
  {ARG_FLAG, "h", "0", "", ""},              /* print usage message and quit */
  {ARG_FLAG, "v", "0", "", ""},	       /* verbose flag, normally do not use  */
  {ARG_END}
};
					    /* Module name presented to DRMS */
char *module_name = "store_ds_fd_V_30s_01h_lev1_8";
char *series = "ds_mdi.fd_V_30s_01h_lev1_8";	/* our series name */

/* Some global variables for this module. */
int verbose = 0;
char msgtxt[1024];

/* Check DRMS session status and calling arguments and set verbose variable */
int nice_intro()
  {
  int usage = cmdparams_get_int(&cmdparams, "h", NULL);
  verbose = cmdparams_get_int(&cmdparams, "v", NULL);
  if (usage)
    {
    printf("store_ds_fd_V_30s_01h_lev1_8 {-h} {-v} series_num=n-m\n"
	"  -h: print this message and exit\n"
	"  -v: verbose\n"
	"series_num - series numbers to ingest\n");
    return(1);
    }
  if (verbose)
     cmdparams_printall(&cmdparams);
  return(0);
  }

void Mailit(char *str) {
  char mcmd[1096];

  printf("%s", str);
  sprintf(mcmd, "echo \"%s\" | Mail -s \"store_ds_fd_V_01h_lev1_8\" jim,jeneen,thailand", str);
  if(system(mcmd)) {
    fprintf(stderr, "Failed: %s\n", mcmd);
  }
}

/* Module main function. */
int DoIt(void)
{
int status = 0;
int j = 0;		/* temp for some debug tests */

FILE *logfp;
char *series_num, *token, *rsp, *wd;
char *create_date, *t_begin;
char path[DRMS_MAXPATHLEN];
char cmd[DRMS_MAXPATHLEN+1024];
char fname[128], logname[128], line[128];
DRMS_Record_t *rec, *template;
int s_start, s_end, pid, i, level_num, ds_index;

/* Series must already exist */
template = drms_template_record(drms_env, series, &status);
if (template==NULL && status == DRMS_ERROR_UNKNOWNSERIES)
  {
    sprintf(msgtxt, "Series '%s' does not exist. Give up.\n", series);
    Mailit(msgtxt);
    return(1);
  }
else
  if(status)
    {
    sprintf(msgtxt, "DRMS problem looking up series.\n");
    Mailit(msgtxt);
    return(status);
    }

if (nice_intro())
  return(0);
series_num = cmdparams_get_str(&cmdparams, "series_num", NULL);

if (strcmp(series_num, NOTSPECIFIED) == 0)
  {
  sprintf(msgtxt, "'series_num' must be specified.  Abort\n");
  Mailit(msgtxt);
  return(1);
  }

if((rsp = index(series_num, ','))) {
  sprintf(msgtxt, "No \",\" allowed in series_num=n-m\n");
  Mailit(msgtxt);
  return(1);
}
if((rsp = index(series_num, '-'))) {
  token = (char *)strtok(series_num, "-");
  s_start = atoi(token);
  token = (char *)strtok(NULL, "-");
  s_end = atoi(token);
}
else {
  s_start = atoi(series_num);
  s_end = s_start;
}
if(s_start == 0 || (s_start > s_end)) {
  sprintf(msgtxt, "series_num error\n");
  Mailit(msgtxt);
  return(1);
}
pid = getpid();
sprintf(logname, "/tmp/peqlog_%d.log", pid);

for(i = s_start; i <= s_end; i++) {
  j++;					/* temp for debug tests */
  sprintf(cmd,"peq 'prog:mdi,level:lev1.8,series:fd_V_30s_01h[%d]' 1> %s 2>&1", 
		i, logname);
  /*printf("About to execute:\n   %s\n", cmd);*/
  if(system(cmd)) {
    fprintf(stderr, "Failed: %s\n", cmd);
    return(0);	/* ret 0 status so DRMS will commit what already done */
  }
  if((logfp=fopen(logname, "r")) == NULL) {
    fprintf(stderr, "Can't open the log file %s\n", logname);
    return(0);
  } 
  while(fgets(line, 128, logfp)) {    /* get a log file line */
    token=(char *)strtok(line, " \t\n");
    if(strstr(line, "in_0_level_sn:")) {
      token=(char *)strtok(NULL, " \t\n");
      level_num=atoi((char *)strtok(NULL, " \t\n")); 
      continue;
    }
    if(strstr(line, "in_0_ds_index:")) {
      token=(char *)strtok(NULL, " \t\n");
      ds_index=atoi((char *)strtok(NULL, " \t\n")); 
      continue;
    }
    if(strstr(line, "in_0_creat_date:")) {
      token=(char *)strtok(NULL, " \t\n");
      rsp=(char *)strtok(NULL, " \t\n"); 
      create_date = strdup(rsp);
      continue;
    }
    if(strstr(line, "t_first:")) {	/* use t_first as t_begin */
      token=(char *)strtok(NULL, " \t\n");
      rsp=(char *)strtok(NULL, " \t\n"); 
      t_begin = strdup(rsp);
      continue;
    }
    if(!strstr(line, "in_0_wd:")) continue;              
    token=(char *)strtok(NULL, " \t\n");
    rsp=(char *)strtok(NULL, " \t\n"); /* this is the wd */ 
    wd = strdup(rsp);
    if(!strcmp(wd, ".")) wd = NULL; 
  }
  fclose(logfp);
  if(wd) {
    /*printf("wd for series# %d: %s\n", i, wd);      /* !!TEMP */ 
    /*printf("level_num=%d  ds_index=%d  series_num=%d  create_date=%s\n",
		level_num, ds_index, i, create_date);
    */
  }
  else {
    printf("No wd for series# %d\n", i);
    continue;
  }
  /* First, check to see that the dir exists */
  if (access(wd, R_OK) != 0)
    {
    printf("The requested dir can not be accessed.  %s\n", wd);
    return(0);		/* 0 = commit what already done */
    }
  /* See if any overview.fits file to get T_START from */
  sprintf(fname, "%s/fd_V_30s_01h.%d.overview.fits", wd, i);
  if((logfp=fopen(fname, "r")) == NULL) {
    fprintf(stderr, "Can't open the file %s\n", fname);
  } 
  else {
    while(fgets(line, 128, logfp)) {    /* get an overview.fits line */
      token=(char *)strtok(line, " \t\n");
      if(strstr(line, "T_START")) {	/* use t_start as t_begin */
        token=(char *)strtok(NULL, " \t\n");
        rsp=(char *)strtok(NULL, " \t\n"); 
        rsp++;				/* elim start tick mark */
        *(rsp + strlen(rsp) -1) = NULL;  /* elim end tick */
        t_begin = strdup(rsp);
        break;
      }
    }
  }
  fclose(logfp);

/* Now ready to make a new record and set keywords */
rec = drms_create_record(drms_env, series, DRMS_PERMANENT, &status);
if (!rec || status)
    {
    sprintf(msgtxt, "drms_create_record failed, series=%s, status=%d.  Aborting.\n", series,status);
    Mailit(msgtxt);
    return(status);
    }
if ((status = drms_setkey_string(rec, "T_BEGIN", t_begin)))
   {
   if (status == DRMS_ERROR_UNKNOWNKEYWORD) {
     sprintf(msgtxt, "ERROR: series %s does not have a keyword named 'T_BEGIN'\n", series);
     Mailit(msgtxt);
   }
   else {
     sprintf(msgtxt, "ERROR: drms_setkey_string failed for 'T_BEGIN'\n");
     Mailit(msgtxt);
   }
   return(1);
   }
if ((status = drms_setkey_string(rec, "create_date", create_date)))
   {
   if (status == DRMS_ERROR_UNKNOWNKEYWORD) {
     sprintf(msgtxt, "ERROR: series %s does not have a keyword named 'create_date'\n", series);
     Mailit(msgtxt);
   }
   else {
     sprintf(msgtxt, "ERROR: drms_setkey_string failed for 'create_date'\n");
     Mailit(msgtxt);
   }
   return(1);
   }
if ((status = drms_setkey_int(rec, "series_num", i)))
   {
   if (status == DRMS_ERROR_UNKNOWNKEYWORD) {
     sprintf(msgtxt, "ERROR: series %s does not have a keyword named 'series_num'\n", series);
     Mailit(msgtxt);
   }
   else {
     sprintf(msgtxt, "ERROR: drms_setkey_string failed for 'series_num'\n");
     Mailit(msgtxt);
   }
   return(1);
   }
if ((status = drms_setkey_int(rec, "level_num", level_num))) 
   {
   if (status == DRMS_ERROR_UNKNOWNKEYWORD) {
     sprintf(msgtxt, "WARNING: series %s does not have a keyword named 'level_num'\n", series);
     Mailit(msgtxt);
   }
   else {
     sprintf(msgtxt, "WARNING: drms_setkey_string failed for 'level_num'\n");
     Mailit(msgtxt);
   }
   return(1);
   }
if ((status = drms_setkey_int(rec, "ds_index", ds_index))) 
   {
   if (status == DRMS_ERROR_UNKNOWNKEYWORD) {
     sprintf(msgtxt, "WARNING: series %s does not have a keyword named 'ds_index'\n", series);
     Mailit(msgtxt);
   }
   else {
     sprintf(msgtxt, "WARNING: drms_setkey_string failed for 'ds_index'\n"); 
     Mailit(msgtxt);
   }
   return(1);
   }

/* a SU should have been allocated since there is a segment in the series defn */
drms_record_directory(rec, path, 1);
if (! *path)
  {
  sprintf(msgtxt, "no path found\n");
  Mailit(msgtxt);
  return(1);
  }
sprintf(cmd, "cp -r %s %s", wd, path);
status = system(cmd);
if (status)
    {
    sprintf(msgtxt, "Copy failed: %s\n", cmd);
    Mailit(msgtxt);
    return(status);
    }
else
    printf("%s\n", cmd);

/*if(j == 3) return(1);		/* !!!TEMP debug test */

if ((status = drms_close_record(rec, DRMS_INSERT_RECORD))) {
  sprintf(msgtxt, "drms_close_record failed!\n");
  Mailit(msgtxt);
}
}
return(status);
}

Karen Tian
Powered by
ViewCVS 0.9.4