]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/status.c
24Mar06
[bacula/bacula] / bacula / src / stored / status.c
index 6be4e9a6cd0f6ad162d9e789229ed61bd30f781d..eff170455ee0d65fe1e22cdfdfa4d8b5437ac7be 100644 (file)
@@ -7,7 +7,7 @@
  *
  */
 /*
-   Copyright (C) 2003-2005 Kern Sibbald
+   Copyright (C) 2003-2006 Kern Sibbald
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
@@ -46,6 +46,7 @@ static char DotStatusJob[] = "JobId=%d JobStatus=%c JobErrors=%d\n";
 static void send_blocked_status(JCR *jcr, DEVICE *dev);
 static void list_terminated_jobs(void *arg);
 static void list_running_jobs(BSOCK *user);
+static void list_jobs_waiting_on_reservation(BSOCK *user);
 static void sendit(const char *msg, int len, void *arg);
 static const char *level_to_str(int level);
 
@@ -86,6 +87,11 @@ bool status_cmd(JCR *jcr)
     */
    list_running_jobs(user);
 
+   /*
+    * List jobs stuck in reservation system
+    */
+   list_jobs_waiting_on_reservation(user);
+
    /*
     * List terminated jobs
     */
@@ -110,8 +116,9 @@ bool status_cmd(JCR *jcr)
       dev = device->dev;
       if (dev && dev->is_open()) {
          if (dev->is_labeled()) {
-            bnet_fsend(user, _("Device %s is mounted with Volume \"%s\"\n"),
-               dev->print_name(), dev->VolHdr.VolumeName);
+            bnet_fsend(user, _("Device %s is mounted with Volume=\"%s\" Pool=\"%s\"\n"),
+               dev->print_name(), dev->VolHdr.VolumeName, 
+               dev->pool_name[0]?dev->pool_name:"*unknown*");
          } else {
             bnet_fsend(user, _("Device %s open but no Bacula volume is mounted.\n"), 
                dev->print_name());
@@ -148,7 +155,7 @@ bool status_cmd(JCR *jcr)
 
       } else {
          if (dev) {
-            bnet_fsend(user, _("Device %s is not open or does not exist.\n"), dev->print_name());
+            bnet_fsend(user, _("Device %s is not open.\n"), dev->print_name());
          } else {
             bnet_fsend(user, _("Device \"%s\" is not open or does not exist.\n"), device->hdr.name);
          }
@@ -160,13 +167,12 @@ bool status_cmd(JCR *jcr)
    list_volumes(user);
    bnet_fsend(user, _("====\n\n"));
        
-
 #ifdef xxx
-   if (debug_level > 0) {
+   if (debug_level > 10) {
       bnet_fsend(user, _("====\n\n"));
       dump_resource(R_DEVICE, resources[R_DEVICE-r_first].res_head, sendit, user);
+      bnet_fsend(user, _("====\n\n"));
    }
-   bnet_fsend(user, _("====\n\n"));
 #endif
 
    list_spool_stats(user);
@@ -330,14 +336,32 @@ static void list_running_jobs(BSOCK *user)
          }
 #endif
       }
-      free_jcr(jcr);
    }
+   endeach_jcr(jcr);
+
    if (!found) {
       bnet_fsend(user, _("No Jobs running.\n"));
    }
    bnet_fsend(user, _("====\n"));
 }
 
+static void list_jobs_waiting_on_reservation(BSOCK *user)
+{ 
+   JCR *jcr;
+
+   bnet_fsend(user, _("\nJobs waiting to reserve a drive:\n"));
+   foreach_jcr(jcr) {
+      if (!jcr->reserve_msgs) {
+         continue;
+      }
+      send_drive_reserve_messages(jcr, user);
+   }
+   endeach_jcr(jcr);
+
+   bnet_fsend(user, _("====\n"));
+}
+
+
 static void list_terminated_jobs(void *arg)
 {
    char dt[MAX_TIME_LENGTH], b1[30], b2[30];
@@ -499,8 +523,8 @@ bool qstatus_cmd(JCR *jcr)
          if (njcr->JobId != 0) {
             bnet_fsend(dir, DotStatusJob, njcr->JobId, njcr->JobStatus, njcr->JobErrors);
          }
-         free_jcr(njcr);
       }
+      endeach_jcr(njcr);
    } else if (strcmp(time.c_str(), "last") == 0) {
       bnet_fsend(dir, OKqstatus, time.c_str());
       if ((last_jobs) && (last_jobs->size() > 0)) {