ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/JSOC/proj/util/apps/pfss_backup.c
Revision: 1.4
Committed: Mon Nov 3 18:01:24 2014 UTC (8 years, 10 months ago) by jps
Content type: text/plain
Branch: MAIN
CVS Tags: Ver_9-1, Ver_LATEST, Ver_9-3, Ver_9-41, Ver_9-2, Ver_8-8, Ver_8-7, Ver_9-5, Ver_9-4, Ver_8-10, Ver_8-11, Ver_8-12, Ver_9-0, HEAD
Changes since 1.3: +22 -9 lines
Log Message:
Add base file name arguments to generalize

File Contents

# Content
1 #include "jsoc_main.h"
2 #include "drms.h"
3 #include "drms_names.h"
4
5 #define NOTSPECIFIED "***NOTSPECIFIED***"
6 #define DIE(msg) {fprintf(stderr,"$$$$ %s: %s\n", module_name, msg); return 1;}
7
8 ModuleArgs_t module_args[] = {
9 {ARG_STRING, "ds", "lm_jps.pfss", "output data series"},
10 {ARG_STRING, "ser_beg", NOTSPECIFIED, "serial number to begin"},
11 {ARG_STRING, "ser_end", NOTSPECIFIED, "serial number to end (not saved)"},
12 {ARG_STRING, "date_beg", NOTSPECIFIED, "date to begin"},
13 {ARG_STRING, "date_end", NOTSPECIFIED, "date to end (not saved)"},
14 {ARG_STRING, "spath", "/archive/pfss/kitrun48/surffield-serial", ""},
15 {ARG_STRING, "bpath", "/archive/pfss/kitrun48/Bfield-serial", ""},
16 {ARG_STRING, "sbase", "%s/kitrun048_%5.5d.sav", "surface base file name"},
17 {ARG_STRING, "bbase", "%s/Bfield_%5.5d.sav", "B field base file name"},
18 {ARG_FLAG, "h", "0", "Print usage message and quit"},
19 {ARG_FLAG, "v", "0", "verbose flag"},
20 {ARG_END}
21 };
22
23 char *module_name = "pfss_backup";
24 int verbose = 0;
25
26 void sprint_time_ISO (char *tstring, TIME t)
27 {
28 sprint_at(tstring,t);
29 tstring[4] = tstring[7] = '-';
30 tstring[10] = 'T';
31 tstring[19] = '\0';
32 }
33
34 int nice_intro(int help)
35 {
36 int usage = cmdparams_get_int(&cmdparams, "h", NULL) != 0;
37 verbose = cmdparams_get_int(&cmdparams, "v", NULL) != 0;
38 if (usage || help) {
39 printf("pfss_backup -h -v ds=output_series ser_beg=sn1 ser_end=sn_stop\n"
40 " -h: print this message\n"
41 " -v: verbose\n"
42 "ds=<output series name> default is lm_jps.pfss\n"
43 "ser_beg=<first serial number to backup>\n"
44 "ser_end=<serial number to stop> (not backup)\n"
45 "date_beg=<first date to backup>\n"
46 "date_end=<date to stop> (not backup)\n"
47 "spath=<base path to surface field files>\n"
48 "bpath=<base path to B field files>\n"
49 "sbase=<surface field base file name>\n"
50 "bbase=<B field field base file name>\n");
51 return(1);
52 }
53 return(0);
54 }
55
56 int DoIt ()
57 {
58 char *date_beg, *date_end, *ds, *spath, *bpath, *sbase, *bbase;
59 char sname[512], bname[512], now_str[64];
60 int ser_beg, ser_end, ser_num, status=0;
61 int s_ok, b_ok, sp_ok, bp_ok; /* yr, mo, da, hr, mn; */
62 time_t trec, tnow;
63 DRMS_Record_t *outrec;
64 DRMS_Segment_t *outseg;
65 struct tm tm_rec;
66 struct stat sbuf;
67
68 if (nice_intro(0)) return(0);
69 ser_beg = cmdparams_get_int(&cmdparams, "ser_beg", NULL);
70 ser_end = cmdparams_get_int(&cmdparams, "ser_end", NULL);
71 ds = strdup(cmdparams_get_str(&cmdparams, "ds", NULL));
72 spath = strdup(cmdparams_get_str(&cmdparams, "spath", NULL));
73 bpath = strdup(cmdparams_get_str(&cmdparams, "bpath", NULL));
74 sbase = strdup(cmdparams_get_str(&cmdparams, "sbase", NULL));
75 bbase = strdup(cmdparams_get_str(&cmdparams, "bbase", NULL));
76 if (verbose) fprintf(stdout, "'%s'\n'%s'\n", spath, bpath);
77 if (verbose) fprintf(stdout, "'%s'\n'%s'\n", sbase, bbase);
78 if (ser_beg < 0) {
79 time_t tr_b, tr_e;
80 date_beg = strdup(cmdparams_get_str(&cmdparams, "date_beg", NULL));
81 tr_b = sscan_time(date_beg) - UNIX_EPOCH + 218;
82 ser_beg = (tr_b - 836179440)/21600;
83 date_end = strdup(cmdparams_get_str(&cmdparams, "date_end", NULL));
84 tr_e = sscan_time(date_end) - UNIX_EPOCH + 218;
85 ser_end = (tr_e - 836179440)/21600;
86 if (verbose) {
87 fprintf(stderr, "trec: %ld %ld,ser_beg, end: %d, %d\n",tr_b,tr_e,ser_beg,ser_end);
88 }
89 }
90 if (stat(spath, &sbuf)) {
91 sp_ok = 0;
92 fprintf(stderr, "Can not stat %s\n", spath);
93 // return(1);
94 } else sp_ok = 1;
95 if (stat(bpath, &sbuf)) {
96 bp_ok = 0;
97 fprintf(stderr, "Can not stat %s\n", bpath);
98 // return(1);
99 } else bp_ok = 1;
100
101 //sleep(60);
102 for (ser_num = ser_beg; ser_num < ser_end; ser_num++) {
103 trec = 21600*ser_num + 836179440 - 8;
104 if (verbose) {
105 fprintf(stderr, "trec: %ld,ser_beg, end: %d, %d\n", trec, ser_beg, ser_end);
106 }
107 gmtime_r(&trec, &tm_rec);
108 snprintf(sname, 512, sbase, spath, ser_num);
109 snprintf(bname, 512, bbase, bpath, ser_num);
110 outrec = drms_create_record(drms_env, ds, DRMS_PERMANENT, &status);
111 if (status) DIE("Can't create output record");
112 // drms_setkey_time(outrec, "model_date", (double) (trec + UNIX_EPOCH));
113 sprint_time_ISO(now_str, trec + UNIX_EPOCH);
114 drms_setkey_string(outrec, "model_date", now_str);
115 if (verbose) fprintf(stderr, "model_date: %s\n", now_str);
116 drms_setkey_int(outrec, "serial", ser_num);
117 if (stat(sname, &sbuf)) {
118 s_ok = 0;
119 if (s_ok) fprintf(stderr, "Can not stat %s\n", sname);
120 } else {
121 s_ok = 1;
122 // drms_setkey_time(outrec,"s_calc_date",(double)(sbuf.st_mtime+UNIX_EPOCH));
123 sprint_time_ISO(now_str, sbuf.st_mtime + UNIX_EPOCH);
124 drms_setkey_string(outrec, "s_calc_date", now_str);
125 }
126 if (stat(bname, &sbuf)) {
127 b_ok = 0;
128 if (b_ok) fprintf(stderr, "Can not stat %s\n", bname);
129 } else {
130 b_ok = 1;
131 // drms_setkey_time(outrec,"b_calc_date",(double)(sbuf.st_mtime+UNIX_EPOCH));
132 sprint_time_ISO(now_str, sbuf.st_mtime + UNIX_EPOCH);
133 drms_setkey_string(outrec, "b_calc_date", now_str);
134 }
135 tnow = CURRENT_SYSTEM_TIME;
136 drms_setkey_time(outrec, "backup_date", tnow);
137 sprint_time_ISO(now_str, tnow);
138 if (s_ok) {
139 outseg = drms_segment_lookup(outrec, "surffield");
140 if(drms_segment_write_from_file(outseg, sname)) {
141 fprintf(stderr, "Can not write surface field segment for %s.\n", sname);
142 }
143 }
144 if (b_ok) {
145 outseg = drms_segment_lookup(outrec, "Bfield");
146 if(drms_segment_write_from_file(outseg, bname)) {
147 fprintf(stderr, "Can not write B field segment for %s.\n", bname);
148 }
149 }
150 if (s_ok || b_ok) status = drms_close_record(outrec, DRMS_INSERT_RECORD);
151 else status = drms_close_record(outrec, DRMS_FREE_RECORD);
152 if(status) fprintf(stderr, "Error closing rec for ser #: %d.\n", ser_num);
153 }
154 return status;
155 }