X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffiled%2Fstatus.c;h=e29dd5d5e43d8abba97614a1683070e469dca851;hb=f3820aebe94dda85d7130cfca2e75dbaa1f6e7ab;hp=639be0f3757d070e65b2d5de7a88945fde69e465;hpb=217e5ed47147cd420ed0799a96868a561bfd6b57;p=bacula%2Fbacula diff --git a/bacula/src/filed/status.c b/bacula/src/filed/status.c index 639be0f375..e29dd5d5e4 100644 --- a/bacula/src/filed/status.c +++ b/bacula/src/filed/status.c @@ -1,12 +1,12 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2001-2008 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. This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU General Public + modify it under the terms of version three of the GNU Affero General Public License as published by the Free Software Foundation and included in the file LICENSE. @@ -15,7 +15,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -30,8 +30,6 @@ * * Kern Sibbald, August MMI * - * Version $Id$ - * */ #include "bacula.h" @@ -40,6 +38,9 @@ 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); @@ -85,10 +86,15 @@ static void list_status_header(STATUS_PKT *sp) my_name, VERSION, BDATE, VSS, HOST_OS, DISTNAME, DISTVER); sendit(msg.c_str(), len, sp); bstrftime_nc(dt, sizeof(dt), daemon_start_time); - len = Mmsg(msg, _("Daemon started %s, %d Job%s run since started.\n"), - dt, num_jobs_run, num_jobs_run == 1 ? "" : "s"); + len = Mmsg(msg, _("Daemon started %s. Jobs: run=%d running=%d.\n"), + 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); @@ -143,9 +149,24 @@ static void list_status_header(STATUS_PKT *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()); sendit(msg.c_str(), len, sp); + if (debug_level > 0 && plugin_list->size() > 0) { + Plugin *plugin; + int len; + pm_strcpy(msg, "Plugin: "); + foreach_alist(plugin, plugin_list) { + len = pm_strcat(msg, plugin->file); + if (len > 80) { + pm_strcat(msg, "\n "); + } else { + pm_strcat(msg, " "); + } + } + len = pm_strcat(msg, "\n"); + sendit(msg.c_str(), len, sp); + } } -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); @@ -158,10 +179,8 @@ static void list_running_jobs(STATUS_PKT *sp) * 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()) { @@ -176,8 +195,9 @@ static void list_running_jobs(STATUS_PKT *sp) len = Mmsg(msg, _("JobId %d Job %s is running.\n"), njcr->JobId, njcr->Job); sendit(msg.c_str(), len, sp); - len = Mmsg(msg, _(" %s%s Job started: %s\n"), - vss, job_type_to_str(njcr->JobType), dt); + len = Mmsg(msg, _(" %s%s %s Job started: %s\n"), + vss, level_to_str(njcr->getJobLevel()), + job_type_to_str(njcr->getJobType()), dt); } sendit(msg.c_str(), len, sp); if (njcr->JobId == 0) { @@ -216,15 +236,90 @@ static void list_running_jobs(STATUS_PKT *sp) } 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; + bool found = false; + 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" + " Bwlimit=%d\n", + edit_uint64(njcr->JobFiles, b1), + edit_uint64(njcr->JobBytes, b2), + edit_uint64(bps, b3), + njcr->JobErrors, njcr->max_bandwidth); + 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); + } + + found = true; + 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) {