]> git.sur5r.net Git - bacula/bacula/commitdiff
Add a feature to be able to get a list of jobs of a specific client. This is
authorDirk H Bartley <dbartley@schupan.com>
Tue, 17 Apr 2007 02:00:28 +0000 (02:00 +0000)
committerDirk H Bartley <dbartley@schupan.com>
Tue, 17 Apr 2007 02:00:28 +0000 (02:00 +0000)
accomplished from a context sensitive menu in the client list window.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@4563 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/qt-console/clients/clients.cpp
bacula/src/qt-console/clients/clients.h
bacula/src/qt-console/clients/clients.ui
bacula/src/qt-console/joblist/joblist.cpp
bacula/src/qt-console/joblist/joblist.h
bacula/src/qt-console/mainwin.cpp
bacula/src/qt-console/mainwin.h
bacula/src/qt-console/medialist/medialist.cpp

index af3b0614c3178377ef5b742238194b6d6e741bc1..c7a5a1ef26af65dabdd15831ededdf31b8ffcc1c 100644 (file)
@@ -148,7 +148,7 @@ void Clients::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetIte
       if (previouswidgetitem) { /* avoid a segfault if first time */
          int treedepth = previouswidgetitem->data(0, Qt::UserRole).toInt();
          if (treedepth == 1){
-//            mp_treeWidget->removeAction(actionEditVolume);
+            mp_treeWidget->removeAction(actionListJobsofClient);
          }
       }
 
@@ -156,8 +156,8 @@ void Clients::treeItemChanged(QTreeWidgetItem *currentwidgetitem, QTreeWidgetIte
       if (treedepth == 1){
          /* set a hold variable to the client name in case the context sensitive
           * menu is used */
-         m_currentlyselected=currentwidgetitem->text(1);
-//         mp_treeWidget->addAction(actionEditVolume);
+         m_currentlyselected=currentwidgetitem->text(0);
+         mp_treeWidget->addAction(actionListJobsofClient);
       }
    }
 }
@@ -177,6 +177,18 @@ void Clients::createContextMenu()
    /* connect to the action specific to this pages class */
    connect(actionRefreshClients, SIGNAL(triggered()), this,
                 SLOT(populateTree()));
+   connect(actionListJobsofClient, SIGNAL(triggered()), this,
+                SLOT(showJobs()));
+}
+
+/*
+ * Function responding to actionListJobsofClient which calls mainwin function
+ * to create a window of a list of jobs of this client.
+ */
+void Clients::showJobs()
+{
+   QString emptymedia("");
+   mainWin->createPageJobList(emptymedia, m_currentlyselected);
 }
 
 /*
index 4e03ad4b52f5177a861d74ff4413c55058f4b800..53b5361d82c831ae54445da5aed1c4621406a9c8 100644 (file)
@@ -54,6 +54,7 @@ public slots:
 
 private slots:
    void populateTree();
+   void showJobs();
 
 private:
    void createContextMenu();
index 3ae91719d5174298a8b4ddbbf484e05dbac3a8ac..7df98614bdaf4274c171acd1b52697a1c0d9907d 100644 (file)
     <string>Requery the director for the list of clients.</string>
    </property>
   </action>
+  <action name="actionListJobsofClient" >
+   <property name="icon" >
+    <iconset>../images/unmark.png</iconset>
+   </property>
+   <property name="text" >
+    <string>List Jobs of Client</string>
+   </property>
+  </action>
  </widget>
  <resources/>
  <connections/>
index dd09f5a37beebdbd01faee8e894e09db034ebde9..587d0912f97624f05a254939a4dd5a1cd1d534d9 100644 (file)
 /*
  * Constructor for the class
  */
-JobList::JobList(QStackedWidget *parent, Console *console, QString &medianame)
+JobList::JobList(QStackedWidget *parent, Console *console, QString &medianame,
+   QString &clientname)
 {
    setupUi(this);
    /* Store passed variables in member variables */
    mp_console = console;
    m_parent = parent;
    m_medianame = medianame;
+   m_clientname = clientname;
    m_resultCount = 0;
    m_populated = false;
    m_closeable = false;
@@ -68,26 +70,33 @@ void JobList::populateTable()
 
    /* Set up query QString and header QStringList */
    QString query("");
-   query += "SELECT j.Jobid,j.Name,j.Starttime,j.Type,j.Level,j.Jobfiles,"
-           "j.JobBytes,j.JobStatus"
-           " FROM job j, jobmedia jm, media m"
-           " WHERE jm.jobid=j.jobid and jm.mediaid=m.mediaid";
+   query += "SELECT Job.Jobid AS Id, Job.Name AS JobName, Client.Name AS Client,"
+            " Job.Starttime AS JobStart, Job.Type AS JobType,"
+            " Job.Level AS BackupLevel, Job.Jobfiles AS FileCount,"
+            " Job.JobBytes AS Bytes, Job.JobStatus AS Status"
+            " FROM Job, JobMedia, Media, Client"
+            " WHERE JobMedia.JobId=Job.JobId and JobMedia.MediaId=Media.MediaId"
+            " and Client.ClientId=Job.ClientId";
    if (m_medianame != "") {
-      query += " and m.VolumeName='" + m_medianame + "'";
+      query += " and Media.VolumeName='" + m_medianame + "'";
       m_closeable=true;
    }
-   query += " ORDER BY j.Starttime";
+   if (m_clientname != "") {
+      query += " and Client.Name='" + m_clientname + "'";
+      m_closeable=true;
+   }
+   query += " ORDER BY Job.Starttime";
    QStringList headerlist = (QStringList()
-      << "Job Id" << "Job Name" << "Job Starttime" << "Job Type" << "Job Level"
-      << "Job Files" << "Job Bytes" << "Job Status");
+      << "Job Id" << "Job Name" << "Client" << "Job Starttime" << "Job Type" 
+      << "Job Level" << "Job Files" << "Job Bytes" << "Job Status"  );
 
    /* Initialize the QTableWidget */
    mp_tableWidget->clear();
    mp_tableWidget->setColumnCount(headerlist.size());
    mp_tableWidget->setHorizontalHeaderLabels(headerlist);
 
-    /*  This could be a debug message?? */
-    /* printf("Query cmd : %s\n",query.toUtf8().data()); */
+    /*  This could be a user preference debug message?? */
+    printf("Query cmd : %s\n",query.toUtf8().data());
    if (mp_console->sql_cmd(query, results)) {
       m_resultCount = results.count();
 
@@ -113,16 +122,18 @@ void JobList::populateTable()
       }
    } 
    if ((m_medianame != "") && (m_resultCount == 0)){
-      /* for context sensitive searches, let the user know if there were no results */
-      QMessageBox::warning(this, tr("Bat"), tr("The Jobs query returned no results.\n"
+      /* for context sensitive searches, let the user know if there were no
+       * results */
+      QMessageBox::warning(this, tr("Bat"),
+          tr("The Jobs query returned no results.\n"
          "Press OK to continue?"), QMessageBox::Ok );
    }
 }
 
 /*
- *  * When the treeWidgetItem in the page selector tree is singleclicked, Make sure
- *  * The tree has been populated.
- *  */
+ * When the treeWidgetItem in the page selector tree is singleclicked, Make sure
+ * The tree has been populated.
+ */
 void JobList::PgSeltreeWidgetClicked()
 {
    if (!m_populated) {
@@ -132,7 +143,8 @@ void JobList::PgSeltreeWidgetClicked()
 }
 
 /*
- *  Virtual function which is called when this page is visible on the stack
+ *  Virtual function override of pages function which is called when this page
+ *  is visible on the stack
  */
 void JobList::currentStackItem()
 {
index c2769dc55909fa954c70aba9171baf6f4b74eb19..03b5d128fde642e0fa39e0a3927b7f92429e23a7 100644 (file)
@@ -43,7 +43,7 @@ class JobList : public Pages, public Ui::JobListForm
    Q_OBJECT 
 
 public:
-   JobList(QStackedWidget *parent, Console *console, QString &medianame);
+   JobList(QStackedWidget *parent, Console *console, QString &medianame, QString &clientname);
    virtual void PgSeltreeWidgetClicked();
    virtual void currentStackItem();
    int m_resultCount;
@@ -54,6 +54,7 @@ public slots:
 private:
    Console *mp_console;
    QString m_medianame;
+   QString m_clientname;
    bool m_populated;
 };
 
index f2f8e914f7158e91e8f6a28d0a36b0c61e4ad4ee..a3fe6f26abb4b980199dece9777213ebe946b8b7 100644 (file)
@@ -98,8 +98,8 @@ void MainWin::createPages()
    * under each director */
    createPagebRestore();
    createPageMediaList();
-   QString emptymedia("");
-   createPageJobList(emptymedia);
+   QString emptymedia(""), emptyclient("");
+   createPageJobList(emptymedia, emptyclient);
    createPageClients();
 
    treeWidget->expandItem(m_topItem);
@@ -131,23 +131,28 @@ void MainWin::createPageMediaList()
 /*
  * create an instance of the the joblist class on the stack
  */
-void MainWin::createPageJobList(QString &media)
+void MainWin::createPageJobList(QString &media, QString &client)
 {
    QTreeWidgetItem *item, *holdItem;
    /* save current tree widget item in case query produces no results */
    holdItem = treeWidget->currentItem();
-   if (media == "") {
+   if ((media == "") && (client == "")) {
       item=createPage("All Jobs", m_topItem);
    } else {
-      QString desc("Jobs on ");
-      desc += media;
+      QString desc("Jobs ");
+      if (media != "" ) {
+         desc += "on Volume " + media;
+      }
+      if (client != "" ) {
+         desc += "of Client " + client;
+      }
       item=createPage(desc.toUtf8().data(), m_topItem);
-   }
-   JobList* joblist = new JobList(stackedWidget, m_console, media);
+   } 
+   JobList* joblist = new JobList(stackedWidget, m_console, media, client);
    hashInsert(item, joblist);
    joblist->dockPage();
    /* If this is a query of jobs on a specific media */
-   if (media != "") {
+   if ((media != "") || (client != "")) {
       stackedWidget->setCurrentWidget(joblist);
       treeWidget->setCurrentItem(item);
       /* did query produce results, if not close window and set back to hold */
index c9054dda955603a69a11c6fa52d985de6da2bb27..36fe8938a876553ff8c3de2681b4654528ed9dbc 100644 (file)
@@ -75,7 +75,7 @@ public:
    QHash<QTreeWidgetItem*,Pages*> m_pagehash;
    /* This hash is to get the page selector widget when the page is known */
    QHash<Pages*,QTreeWidgetItem*> m_widgethash;
-   void createPageJobList(QString &);
+   void createPageJobList(QString &, QString &);
 
 public slots:
    void input_line();
index 056082e3b441a8fec3da521d2463559f321c3fab..eecbb5d6d560ef3498532d3c67c16f7e3b230247 100644 (file)
@@ -166,7 +166,8 @@ void MediaList::editMedia()
  */
 void MediaList::showJobs()
 {
-   mainWin->createPageJobList(m_currentlyselected);
+   QString emptyclient("");
+   mainWin->createPageJobList(m_currentlyselected, emptyclient);
 }
 
 /*