many others, a complete list can be found in the file AUTHORS.
This program is Free Software; you can redistribute it and/or
modify it under the terms of version two of the GNU General Public
- License as published by the Free Software Foundation plus additions
- that are listed in the file LICENSE.
+ License as published by the Free Software Foundation and included
+ in the file LICENSE.
This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
#include "bacula.h"
#include "dird.h"
+extern void *start_heap;
+
static void list_scheduled_jobs(UAContext *ua);
static void list_running_jobs(UAContext *ua);
static void list_terminated_jobs(UAContext *ua);
}
-static void do_director_status(UAContext *ua)
+void list_dir_status_header(UAContext *ua)
{
char dt[MAX_TIME_LENGTH];
- char b1[35], b2[35], b3[35], b4[35];
+ char b1[35], b2[35], b3[35], b4[35], b5[35];
ua->send_msg(_("%s Version: %s (%s) %s %s %s\n"), my_name, VERSION, BDATE,
HOST_OS, DISTNAME, DISTVER);
ua->send_msg(_("Daemon started %s, %d Jobs run since started.\n"),
dt, num_jobs_run);
}
- ua->send_msg(_(" 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));
+ ua->send_msg(_(" Heap: heap=%s smbytes=%s max_bytes=%s bufs=%s max_bufs=%s\n"),
+ edit_uint64_with_commas((char *)sbrk(0)-(char *)start_heap, b1),
+ edit_uint64_with_commas(sm_bytes, b2),
+ edit_uint64_with_commas(sm_max_bytes, b3),
+ edit_uint64_with_commas(sm_buffers, b4),
+ edit_uint64_with_commas(sm_max_buffers, b5));
+}
+
+static void do_director_status(UAContext *ua)
+{
+ list_dir_status_header(ua);
/*
* List scheduled Jobs
break;
case JS_WaitFD:
emsg = (char *) get_pool_memory(PM_FNAME);
- Mmsg(emsg, _("is waiting on Client %s"), jcr->client->name());
+ if (!jcr->client) {
+ Mmsg(emsg, _("is waiting on Client"));
+ } else {
+ Mmsg(emsg, _("is waiting on Client %s"), jcr->client->name());
+ }
pool_mem = true;
msg = emsg;
break;
emsg = (char *) get_pool_memory(PM_FNAME);
if (jcr->wstore) {
Mmsg(emsg, _("is waiting on Storage %s"), jcr->wstore->name());
- } else {
+ } else if (jcr->rstore) {
Mmsg(emsg, _("is waiting on Storage %s"), jcr->rstore->name());
+ } else {
+ Mmsg(emsg, _("is waiting on Storage"));
}
pool_mem = true;
msg = emsg;
break;
default:
- emsg = (char *) get_pool_memory(PM_FNAME);
+ emsg = (char *)get_pool_memory(PM_FNAME);
Mmsg(emsg, _("is in unknown state %c"), jcr->JobStatus);
pool_mem = true;
msg = emsg;
emsg = (char *)get_pool_memory(PM_FNAME);
pool_mem = true;
}
- Mmsg(emsg, _("is waiting for Client %s to connect to Storage %s"),
- jcr->client->name(), jcr->wstore->name());
+ if (!jcr->client || !jcr->wstore) {
+ Mmsg(emsg, _("is waiting for Client to connect to Storage daemon"));
+ } else {
+ Mmsg(emsg, _("is waiting for Client %s to connect to Storage %s"),
+ jcr->client->name(), jcr->wstore->name());
+ }
msg = emsg;
break;
}