X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=bacula%2Fsrc%2Fdird%2Fua_output.c;h=27ac0357724db8a02d1f72641842518a7dfb64ee;hb=fa1cad6e368a3c7d0a1ac4ad25176b7043b1310f;hp=4d4684be8631087a8212b222dac93463e7c7f1f7;hpb=790890265aebc2a7f7f43610df5eef29c5bbea29;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_output.c b/bacula/src/dird/ua_output.c index 4d4684be86..27ac035772 100644 --- a/bacula/src/dird/ua_output.c +++ b/bacula/src/dird/ua_output.c @@ -36,7 +36,7 @@ /* Imported variables */ extern int r_first; extern int r_last; -extern struct s_res resources[]; +extern RES_TABLE resources[]; extern int console_msg_pending; extern FILE *con_fd; extern brwlock_t con_lock; @@ -50,7 +50,7 @@ static int do_list_cmd(UAContext *ua, char *cmd, e_list_type llist); /* * Turn auto display of console messages on/off */ -int autodisplaycmd(UAContext *ua, char *cmd) +int autodisplay_cmd(UAContext *ua, char *cmd) { static char *kw[] = { N_("on"), @@ -71,6 +71,31 @@ int autodisplaycmd(UAContext *ua, char *cmd) return 1; } +/* + * Turn gui processing on/off + */ +int gui_cmd(UAContext *ua, char *cmd) +{ + static char *kw[] = { + N_("on"), + N_("off"), + NULL}; + + switch (find_arg_keyword(ua, kw)) { + case 0: + ua->jcr->gui = true; + break; + case 1: + ua->jcr->gui = false; + break; + default: + bsendmsg(ua, _("ON or OFF keyword missing.\n")); + break; + } + return 1; +} + + struct showstruct {char *res_name; int type;}; static struct showstruct reses[] = { @@ -82,7 +107,6 @@ static struct showstruct reses[] = { {N_("catalogs"), R_CATALOG}, {N_("schedules"), R_SCHEDULE}, {N_("filesets"), R_FILESET}, - {N_("groups"), R_GROUP}, {N_("pools"), R_POOL}, {N_("messages"), R_MSGS}, {N_("all"), -1}, @@ -109,6 +133,7 @@ int show_cmd(UAContext *ua, char *cmd) Dmsg1(20, "show: %s\n", ua->UA_sock->msg); + LockRes(); for (i=1; iargc; i++) { type = 0; res_name = ua->argk[i]; @@ -127,6 +152,7 @@ int show_cmd(UAContext *ua, char *cmd) break; } } + } else { /* Dump a single resource with specified name */ recurse = 0; @@ -154,18 +180,20 @@ int show_cmd(UAContext *ua, char *cmd) for (j=0; reses[j].res_name; j++) { bsendmsg(ua, "%s\n", _(reses[j].res_name)); } - return 1; + goto bail_out; case -3: bsendmsg(ua, _("%s resource %s not found.\n"), res_name, ua->argv[i]); - return 1; + goto bail_out; case 0: bsendmsg(ua, _("Resource %s not found\n"), res_name); - return 1; + goto bail_out; default: dump_resource(recurse?type:-type, res, bsendmsg, ua); break; } } +bail_out: + UnlockRes(); return 1; } @@ -304,7 +332,7 @@ static int do_list_cmd(UAContext *ua, char *cmd, e_list_type llist) /* List MEDIA or VOLUMES */ } else if (strcasecmp(ua->argk[i], _("media")) == 0 || strcasecmp(ua->argk[i], _("volumes")) == 0) { - int done = FALSE; + bool done = false; for (j=i+1; jargc; j++) { if (strcasecmp(ua->argk[j], _("job")) == 0 && ua->argv[j]) { bstrncpy(jr.Job, ua->argv[j], MAX_NAME_LENGTH); @@ -320,7 +348,7 @@ static int do_list_cmd(UAContext *ua, char *cmd, e_list_type llist) n = db_get_job_volume_names(ua->jcr, ua->db, jobid, &VolumeName); bsendmsg(ua, _("Jobid %d used %d Volume(s): %s\n"), jobid, n, VolumeName); free_pool_memory(VolumeName); - done = TRUE; + done = true; } /* if no job or jobid keyword found, then we list all media */ if (!done) { @@ -438,11 +466,10 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) time_t now, tomorrow; SCHED *sched; struct tm tm; - int mday, wday, month, wpos, tmday, twday, tmonth, twpos, i, hour; + int mday, wday, month, wom, tmday, twday, tmonth, twom, i, hour; + int woy, twoy; int tod, tom; - Dmsg0(200, "enter find_runs()\n"); - sched = job->schedule; if (sched == NULL) { /* scheduled? */ return NULL; /* no nothing to report */ @@ -453,7 +480,8 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) mday = tm.tm_mday - 1; wday = tm.tm_wday; month = tm.tm_mon; - wpos = (tm.tm_mday - 1) / 7; + wom = mday / 7; + woy = tm_woy(now); /* Break down tomorrow into components */ tomorrow = now + 60 * 60 * 24; @@ -461,7 +489,8 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) tmday = tm.tm_mday - 1; twday = tm.tm_wday; tmonth = tm.tm_mon; - twpos = (tm.tm_mday - 1) / 7; + twom = tmday / 7; + twoy = tm_woy(tomorrow); if (run == NULL) { run = sched->run; @@ -473,12 +502,16 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) * Find runs in next 24 hours */ tod = (bit_is_set(mday, run->mday) || bit_is_set(wday, run->wday)) && - bit_is_set(month, run->month) && bit_is_set(wpos, run->wpos); + bit_is_set(month, run->month) && bit_is_set(wom, run->wom) && + bit_is_set(woy, run->woy); tom = (bit_is_set(tmday, run->mday) || bit_is_set(twday, run->wday)) && - bit_is_set(tmonth, run->month) && bit_is_set(wpos, run->wpos); + bit_is_set(tmonth, run->month) && bit_is_set(twom, run->wom) && + bit_is_set(twoy, run->woy); - Dmsg2(200, "tod=%d tom=%d\n", tod, tom); +// Dmsg2(200, "tod=%d tom=%d\n", tod, tom); +// Dmsg2(200, "wom=%d twom=%d\n", wom, twom); +// Dmsg1(200, "bit_set_wom=%d\n", bit_is_set(wom, run->wom)); if (tod) { /* Jobs scheduled today (next 24 hours) */ /* find time (time_t) job is to be run */ localtime_r(&now, &tm); @@ -490,6 +523,7 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) tm.tm_sec = 0; runtime = mktime(&tm); if (runtime > now) { + Dmsg2(000, "Found it level=%d %c\n", run->level, run->level); return run; /* found it, return run resource */ } } @@ -510,7 +544,7 @@ RUN *find_next_run(RUN *run, JOB *job, time_t &runtime) tm.tm_min = run->minute; tm.tm_sec = 0; runtime = mktime(&tm); - Dmsg2(200, "truntime=%d now=%d\n", runtime, now); +// Dmsg2(200, "truntime=%d now=%d\n", runtime, now); if (runtime < tomorrow) { return run; /* found it, return run resource */ } @@ -651,11 +685,12 @@ again: len = bvsnprintf(msg, maxlen, fmt, arg_ptr); va_end(arg_ptr); if (len < 0 || len >= maxlen) { - msg = realloc_pool_memory(msg, maxlen + 200); + msg = realloc_pool_memory(msg, maxlen + maxlen/2); goto again; } if (bs) { + bs->msg = msg; bs->msglen = len; bnet_send(bs); } else { /* No UA, send to Job */