/*
Bacula® - The Network Backup Solution
- Copyright (C) 2001-2010 Free Software Foundation Europe e.V.
+ Copyright (C) 2001-2011 Free Software Foundation Europe e.V.
The main author of Bacula is Kern Sibbald, with contributions from
many others, a complete list can be found in the file AUTHORS.
extern void *start_heap;
+extern bool GetWindowsVersionString(char *buf, int maxsiz);
+
+
/* Forward referenced functions */
static void list_terminated_jobs(STATUS_PKT *sp);
static void list_running_jobs(STATUS_PKT *sp);
dt, num_jobs_run, job_count());
sendit(msg.c_str(), len, sp);
#if defined(HAVE_WIN32)
+ char buf[300];
+ if (GetWindowsVersionString(buf, sizeof(buf))) {
+ len = Mmsg(msg, "%s\n", buf);
+ sendit(msg.c_str(), len, sp);
+ }
if (debug_level > 0) {
if (!privs) {
privs = enable_backup_privileges(NULL, 1);
edit_uint64_with_commas(sm_buffers, b4),
edit_uint64_with_commas(sm_max_buffers, b5));
sendit(msg.c_str(), len, sp);
- len = Mmsg(msg, _(" Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d\n"),
- sizeof(boffset_t), sizeof(size_t), debug_level, get_trace());
+ len = Mmsg(msg, _(" Sizeof: boffset_t=%d size_t=%d debug=%d trace=%d "),
+ sizeof(boffset_t), sizeof(size_t),
+ debug_level, get_trace());
sendit(msg.c_str(), len, sp);
- if (debug_level > 0 && plugin_list->size() > 0) {
+ if (debug_level > 0 && bplugin_list->size() > 0) {
Plugin *plugin;
int len;
pm_strcpy(msg, "Plugin: ");
- foreach_alist(plugin, plugin_list) {
+ foreach_alist(plugin, bplugin_list) {
len = pm_strcat(msg, plugin->file);
if (len > 80) {
pm_strcat(msg, "\n ");
}
}
-static void list_running_jobs(STATUS_PKT *sp)
+static void list_running_jobs_plain(STATUS_PKT *sp)
{
int sec, bps;
POOL_MEM msg(PM_MESSAGE);
* List running jobs
*/
Dmsg0(1000, "Begin status jcr loop.\n");
- if (!sp->api) {
- len = Mmsg(msg, _("\nRunning Jobs:\n"));
- sendit(msg.c_str(), len, sp);
- }
+ len = Mmsg(msg, _("\nRunning Jobs:\n"));
+ sendit(msg.c_str(), len, sp);
const char *vss = "";
#ifdef WIN32_VSS
if (g_pVSSClient && g_pVSSClient->IsInitialized()) {
}
endeach_jcr(njcr);
- if (!sp->api) {
- if (!found) {
- len = Mmsg(msg, _("No Jobs running.\n"));
+ if (!found) {
+ len = Mmsg(msg, _("No Jobs running.\n"));
+ sendit(msg.c_str(), len, sp);
+ }
+ sendit(_("====\n"), 5, sp);
+}
+
+static void list_running_jobs_api(STATUS_PKT *sp)
+{
+ int sec, bps;
+ POOL_MEM msg(PM_MESSAGE);
+ char b1[32], b2[32], b3[32];
+ int len;
+ JCR *njcr;
+ char dt[MAX_TIME_LENGTH];
+ /*
+ * List running jobs for Bat/Bweb (simple to parse)
+ */
+ int vss = 0;
+#ifdef WIN32_VSS
+ if (g_pVSSClient && g_pVSSClient->IsInitialized()) {
+ vss = 1;
+ }
+#endif
+ foreach_jcr(njcr) {
+ bstrutime(dt, sizeof(dt), njcr->start_time);
+ if (njcr->JobId == 0) {
+ len = Mmsg(msg, "DirectorConnected=%s\n", dt);
+ } else {
+ len = Mmsg(msg, "JobId=%d\n Job=%s\n",
+ njcr->JobId, njcr->Job);
+ sendit(msg.c_str(), len, sp);
+ len = Mmsg(msg," VSS=%d\n Level=%c\n JobType=%c\n JobStarted=%s\n",
+ vss, njcr->getJobLevel(),
+ njcr->getJobType(), dt);
+ }
+ sendit(msg.c_str(), len, sp);
+ if (njcr->JobId == 0) {
+ continue;
+ }
+ sec = time(NULL) - njcr->start_time;
+ if (sec <= 0) {
+ sec = 1;
+ }
+ bps = (int)(njcr->JobBytes / sec);
+ len = Mmsg(msg, " Files=%s\n Bytes=%s\n Bytes/sec=%s\n Errors=%d\n",
+ edit_uint64(njcr->JobFiles, b1),
+ edit_uint64(njcr->JobBytes, b2),
+ edit_uint64(bps, b3),
+ njcr->JobErrors);
+ sendit(msg.c_str(), len, sp);
+ len = Mmsg(msg, " Files Examined=%s\n",
+ edit_uint64(njcr->num_files_examined, b1));
+ sendit(msg.c_str(), len, sp);
+ if (njcr->JobFiles > 0) {
+ njcr->lock();
+ len = Mmsg(msg, " Processing file=%s\n", njcr->last_fname);
+ njcr->unlock();
+ sendit(msg.c_str(), len, sp);
+ }
+
+ if (njcr->store_bsock) {
+ len = Mmsg(msg, " SDReadSeqNo=%" lld "\n fd=%d\n",
+ njcr->store_bsock->read_seqno, njcr->store_bsock->m_fd);
+ sendit(msg.c_str(), len, sp);
+ } else {
+ len = Mmsg(msg, _(" SDSocket=closed\n"));
sendit(msg.c_str(), len, sp);
}
- sendit(_("====\n"), 5, sp);
}
+ endeach_jcr(njcr);
}
-
+
+static void list_running_jobs(STATUS_PKT *sp)
+{
+ if (sp->api) {
+ list_running_jobs_api(sp);
+ } else {
+ list_running_jobs_plain(sp);
+ }
+}
static void list_terminated_jobs(STATUS_PKT *sp)
{