#include <errno.h>
#include <string.h>
#include <time.h>
+#include <getopt.h>
#include "jp_client.h"
#include "jpimporter.h"
#include "glite/lb/lb_maildir.h"
int perf_regs, perf_dumps;
char perf_ts[100];
char *dump; char **dump_index; size_t dump_tokens;
-
+int speed = 0;
+double duration = 0.0;
+
+static struct option opts[] = {
+ { "help", 0, NULL, 'h'},
+ { "reg-mdir", 1, NULL, 'R'},
+ { "dump-mdir", 1, NULL, 'D'},
+ { "break", 1, NULL, 'b'},
+ { "dump", 1, NULL, 'd'},
+// { "sandbox-mdir",1, NULL, 's'},
+ { NULL, 0, NULL, 0}
+};
+static const char *get_opt_string = "hR:D:b:d:";
static int register_init();
static int register_add(const char *jobid, char **new_jobid);
}
+static void usage(const char *program) {
+ fprintf(stderr, "Usage: %s [OPTIONS]\n"
+ "\t-R,--reg-mdir\n"
+ "\t-D,--dump-mdir\n"
+// "\t-s,--sandbox-mdir\n"
+ "\t-b,--break speed (jobs/day)\n"
+ "\t-d,--dump dump file\n"
+ , program);
+}
+
+
int main(int argc, char *argv[]) {
char start_jobid[256], stop_jobid[256], *fn;
- double ts, ts2;
- int ret;
+ double ts, ts2, last, now;
+ int ret, opt;
FILE *f;
- char *jobid;
+ char *jobid, *dumpfile = NULL;
+
+ while ((opt = getopt_long(argc, argv, get_opt_string, opts, NULL)) != EOF)
+ switch (opt) {
+ case 'h': usage(argv[0]); return 0;
+ case 'R': jpreg_dir = strdup(optarg); break;
+ case 'D': dump_dir = strdup(optarg); break;
+ case 'b': speed = atoi(optarg); if (speed) duration = 24.0*3600.0*1000000.0/speed; break;
+ case 'd': dumpfile = optarg; break;
+ default: printf("opt: %c\n", opt); usage(argv[0]); return 1;
+ }
get_time(perf_ts, sizeof(perf_ts), &ts);
snprintf(start_jobid, sizeof(start_jobid), PERF_JOBID_START_PREFIX "%s", perf_ts);
snprintf(stop_jobid, sizeof(stop_jobid), PERF_JOBID_STOP_PREFIX "%s", perf_ts);
if ((ret = register_init()) != 0) return ret;
- if ((ret = dump_init(start_jobid, argc > 1 ? argv[1] : NULL)) != 0) return ret;
+ if ((ret = dump_init(start_jobid, dumpfile)) != 0) return ret;
if ((ret = register_add(start_jobid, NULL)) != 0) return ret;
if (signal(SIGINT, handler) == SIG_ERR) {
ret = errno;
fprintf(stderr, "%s: can't set signal handler: %s\n", __FUNCTION__, strerror(errno));
return ret;
}
+ if (speed) printf("speed: %d jobs/day (delay %lf)\n", speed, duration / 1000000.0);
+ else printf("speed: unlimited\n");
+ printf("reg-mdir: %s\n", jpreg_dir);
+ printf("dump-mdir: %s\n", dump_dir);
+ printf("start: %lf\n", ts);
printf("%s\n", start_jobid);
- printf("start: %lf\n", ts);
+ last = ts;
while (!do_exit) {
+ struct timeval tv;
+
if ((ret = register_add(NULL, &jobid)) != 0) return ret;
- if (argc > 1)
- if ((ret = dump_add(argv[1], jobid)) != 0) return ret;
+// printf("%s\n", jobid);
+ if (dumpfile) {
+ if ((ret = dump_add(dumpfile, jobid)) != 0) return ret;
+// printf(" dumped %s\n", dumpfile);
+ }
free(jobid);
+ gettimeofday(&tv, NULL);
+ now = tv.tv_sec + (double)tv.tv_usec / 1000000.0;
+ if (now < last + duration) usleep(last + duration - now);
+ last = now;
}
asprintf(&fn, PERF_STOP_FILE_FORMAT, perf_ts);
if ((f = fopen(fn, "wt")) == NULL) {
static int register_init() {
char *env;
- env = getenv("GLITE_LB_EXPORT_JPREG_MAILDIR");
- if (!env) env = GLITE_REG_IMPORTER_MDIR;
- jpreg_dir = strdup(env);
+ if (!jpreg_dir) {
+ env = getenv("GLITE_LB_EXPORT_JPREG_MAILDIR");
+ if (env) jpreg_dir = strdup(env);
+ else jpreg_dir = strdup(GLITE_REG_IMPORTER_MDIR);
+ }
+
// TODO: better from certificate
env = getenv("GLITE_USER");
//for (i = 0; i < dump_tokens; i++) printf("####%s\n", dump_index[i]);
// FIXME: is it OK? (probably different HEAD and branch)
- env = getenv("GLITE_LB_EXPORT_DUMPDIR");
- if (!env) env = EDG_DUMP_STORAGE;
- dump_dir = strdup(env);
+ if (!dump_dir) {
+ env = getenv("GLITE_LB_EXPORT_DUMPDIR");
+ if (env) dump_dir = strdup(env);
+ else dump_dir = strdup(EDG_DUMP_STORAGE);
+ }
mkdir(dump_dir, 0755);
perf_dumps = 0;