static void do_director_status(UAContext *ua);
static void do_all_status(UAContext *ua);
+static char OKqstatus[] = "1000 OK .status\n";
+static char DotStatusJob[] = "JobId=%d JobStatus=%c JobErrors=%d\n";
+
+/*
+ * .status command
+ */
+int qstatus_cmd(UAContext *ua, const char *cmd)
+{
+ JCR* njcr;
+ s_last_job* job;
+
+ if (!open_db(ua)) {
+ return 1;
+ }
+ Dmsg1(20, "status:%s:\n", cmd);
+
+ if ((ua->argc != 3) || (strcasecmp(ua->argk[1], "dir"))) {
+ bsendmsg(ua, "1900 Bad .status command, missing arguments.\n");
+ return 1;
+ }
+
+ if (strcasecmp(ua->argk[2], "current") == 0) {
+ bsendmsg(ua, OKqstatus, ua->argk[2]);
+ lock_jcr_chain();
+ foreach_jcr(njcr) {
+ if (njcr->JobId != 0) {
+ bsendmsg(ua, DotStatusJob, njcr->JobId, njcr->JobStatus, njcr->JobErrors);
+ }
+ free_locked_jcr(njcr);
+ }
+ unlock_jcr_chain();
+ }
+ else if (strcasecmp(ua->argk[2], "last") == 0) {
+ bsendmsg(ua, OKqstatus, ua->argk[2]);
+ if ((last_jobs) && (last_jobs->size() > 0)) {
+ job = (s_last_job*)last_jobs->last();
+ bsendmsg(ua, DotStatusJob, job->JobId, job->JobStatus, job->Errors);
+ }
+ }
+ else {
+ bsendmsg(ua, "1900 Bad .status command, wrong argument.\n");
+ return 1;
+ }
+
+ return 1;
+}
+
/*
* status command
*/
bstrftime_nc(dt, sizeof(dt), daemon_start_time);
bsendmsg(ua, _("Daemon started %s, %d Job%s run since started.\n"),
dt, num_jobs_run, num_jobs_run == 1 ? "" : "s");
+ if (debug_level > 0) {
+ char b1[35], b2[35], b3[35], b4[35];
+ bsendmsg(ua, _(" Heap: bytes=%s max_bytes=%s bufs=%s max_bufs=%s\n"),
+ edit_uint64_with_commas(sm_bytes, b1),
+ edit_uint64_with_commas(sm_max_bytes, b2),
+ edit_uint64_with_commas(sm_buffers, b3),
+ edit_uint64_with_commas(sm_max_buffers, b4));
+ }
/*
* List scheduled Jobs
*/
continue;
}
for (run=NULL; (run = find_next_run(run, job, runtime)); ) {
- level = job->level;
+ level = job->JobLevel;
if (run->level) {
level = run->level;
}
break;
case JS_WaitFD:
emsg = (char *) get_pool_memory(PM_FNAME);
- Mmsg(&emsg, _("is waiting on Client %s"), jcr->client->hdr.name);
+ Mmsg(emsg, _("is waiting on Client %s"), jcr->client->hdr.name);
pool_mem = true;
msg = emsg;
break;
case JS_WaitSD:
emsg = (char *) get_pool_memory(PM_FNAME);
- Mmsg(&emsg, _("is waiting on Storage %s"), jcr->store->hdr.name);
+ Mmsg(emsg, _("is waiting on Storage %s"), jcr->store->hdr.name);
pool_mem = true;
msg = emsg;
break;
default:
emsg = (char *) get_pool_memory(PM_FNAME);
- Mmsg(&emsg, _("is in unknown state %c"), jcr->JobStatus);
+ Mmsg(emsg, _("is in unknown state %c"), jcr->JobStatus);
pool_mem = true;
msg = emsg;
break;
emsg = (char *) get_pool_memory(PM_FNAME);
pool_mem = true;
}
- Mmsg(&emsg, _("is waiting for Client %s to connect to Storage %s"),
+ Mmsg(emsg, _("is waiting for Client %s to connect to Storage %s"),
jcr->client->hdr.name, jcr->store->hdr.name);
msg = emsg;
break;