X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=bacula%2Fsrc%2Ffiled%2Fstatus.c;h=1a1a0130ea58c35df99f4e7a5da91755f1c50789;hb=00662d0a94aa70545dc6497a4ddc1a6f9a70083d;hp=7b646476e677342a33f563bedc1d410d00bb46fd;hpb=7794252be65a4b27778e83db32c9cd088c2de929;p=bacula%2Fbacula diff --git a/bacula/src/filed/status.c b/bacula/src/filed/status.c index 7b646476e6..1a1a0130ea 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); @@ -146,7 +152,7 @@ static void list_status_header(STATUS_PKT *sp) if (debug_level > 0 && plugin_list->size() > 0) { Plugin *plugin; int len; - pm_strcpy(msg, "Plugin="); + pm_strcpy(msg, "Plugin: "); foreach_alist(plugin, plugin_list) { len = pm_strcat(msg, plugin->file); if (len > 80) { @@ -160,7 +166,7 @@ static void list_status_header(STATUS_PKT *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); @@ -173,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()) { @@ -191,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->get_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) { @@ -231,15 +236,96 @@ 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; + 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); +<<<<<<< HEAD + 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); +======= + 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); +>>>>>>> caaa5db... Implement RestoreObject for sqlite + cleanups + 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) {