]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/ua_status.c
- Fix bug 207. jcr use count off by one when manually
[bacula/bacula] / bacula / src / dird / ua_status.c
index a633b9093e96b80a36e24d78042c4d6dfca2a0fe..d7ef5b6416ac8f9d7224d37da667517e34d35856 100644 (file)
@@ -42,6 +42,53 @@ static void do_client_status(UAContext *ua, CLIENT *client);
 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
  */
@@ -206,6 +253,14 @@ static void do_director_status(UAContext *ua)
    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
     */
@@ -394,7 +449,7 @@ static void list_scheduled_jobs(UAContext *ua)
         continue;
       }
       for (run=NULL; (run = find_next_run(run, job, runtime)); ) {
-        level = job->level;   
+        level = job->JobLevel;
         if (run->level) {
            level = run->level;
         }
@@ -500,13 +555,13 @@ static void list_running_jobs(UAContext *ua)
         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;
@@ -531,7 +586,7 @@ static void list_running_jobs(UAContext *ua)
 
       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;
@@ -559,7 +614,7 @@ static void list_running_jobs(UAContext *ua)
            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;