[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bacula-devel] patch: bat trunk: improve joblog formatting


Hello,
this patch improves joblog formatting.
Notable features:

- messages are grouped by time and source
- columns are properly aligned
- messages starting with "Error :" shown in red

The resulting display is imho much more readable.

Ciao,
Riccardo
Index: trunkbase/trunk/bacula/src/qt-console/joblog/joblog.cpp
===================================================================
--- trunkbase.orig/trunk/bacula/src/qt-console/joblog/joblog.cpp
+++ trunkbase/trunk/bacula/src/qt-console/joblog/joblog.cpp
@@ -41,7 +41,7 @@
 JobLog::JobLog(QString &jobId, QTreeWidgetItem *parentTreeWidgetItem)
 {
    setupUi(this);
-   m_name = "JobLog";
+   m_name = tr("JobLog");
    m_closeable = true;
    pgInitialize(parentTreeWidgetItem);
    QTreeWidgetItem* thisitem = mainWin->getFromHash(this);
@@ -76,56 +76,98 @@ void JobLog::getFont()
  */
 void JobLog::populateText()
 {
-   QString heading("<A href=\"#top\">Log records for job ");
-   heading += m_jobId + "</A><br>\n";
-   textEdit->insertHtml(heading);
-
    if (!m_console->preventInUseConnect())
-       return;
-   
-   QString query("");
-   query = "SELECT Time,LogText FROM Log WHERE JobId='" + m_jobId + "' ORDER by Time";
-
+      return;
+     
+   QString query;
+   query = "SELECT Time, LogText FROM Log WHERE JobId='" + m_jobId + "' order by Time";
+
+   /* This could be a log item */
+   if (mainWin->m_sqlDebug) {
+      Pmsg1(000, "Log query cmd : %s\n", query.toUtf8().data());
+   }
+  
    QStringList results;
    if (m_console->sql_cmd(query, results)) {
-      QString field;
-      QStringList fieldlist;
-      int resultcount = 0;
 
+      if (!results.size()) {
+         QMessageBox::warning(this, tr("Bat"),
+            tr("There were no results!\n"
+	       "It is possible you may need to add \"catalog = all\" "
+	       "to the Messages resource for this job.\n"), QMessageBox::Ok);
+	 return;
+      } 
+
+      QString jobstr("JobId "); /* FIXME: should this be translated ? */
+      jobstr += m_jobId;
+
+      QString htmlbuf("<html><body><b>" + tr("Log records for job %1").arg(m_jobId) );
+      htmlbuf += "</b><table>";
+  
       /* Iterate through the lines of results. */
+      QString field;
+      QStringList fieldlist;
+      QString lastTime;
+      QString lastSvc;
       foreach (QString resultline, results) {
-         int column = 0;
          fieldlist = resultline.split("\t");
-         /* Iterate through fields in the record */
-         foreach (field, fieldlist) {
-            display_text(field);
-            if (column == 0) display_text(" ");
-            column++;
-         } /* foreach field */
-         resultcount++; 
+	 
+	 if (fieldlist.size() < 2)
+	    continue;
+
+	 htmlbuf +="<tr>";
+
+	 QString curTime = fieldlist[0].trimmed();
+
+	 field = fieldlist[1].trimmed();
+	 int colon = field.indexOf(":");
+	 if (colon > 0) {
+ 	    /* string is like <service> <jobId xxxx>: ..." 
+	     * we split at ':' then remove the jobId xxxx string (always the same) */ 
+	    QString curSvc(field.left(colon).replace(jobstr,"").trimmed());
+	    if (curSvc == lastSvc  && curTime == lastTime) {
+	       curTime.clear();
+	       curSvc.clear(); 
+	    } else {
+	       lastTime = curTime;
+	       lastSvc = curSvc;
+	    }
+	    htmlbuf += "<td>" + curTime + "</td>";
+	    htmlbuf += "<td><p>" + curSvc + "</p></td>";
+
+	    /* rest of string is marked as pre-formatted (here trimming should
+	     * be avoided, to preserve original formatting) */
+	    QString msg(field.mid(colon+2));
+	    if (msg.startsWith( tr("Error:")) ) { /* FIXME: should really be translated ? */
+ 	       /* error msg, use a specific class */
+	       htmlbuf += "<td><pre class=err>" + msg + "</pre></td>";
+	    } else {
+	       htmlbuf += "<td><pre>" + msg + "</pre></td>";
+	    }
+	 } else {
+ 	    /* non standard string, place as-is */
+	    if (curTime == lastTime) {
+	       curTime.clear();
+	    } else {
+	       lastTime = curTime;
+	    }
+	    htmlbuf += "<td>" + curTime + "</td>";
+	    htmlbuf += "<td><pre>" + field + "</pre></td>";
+	 }
+
+	 htmlbuf += "</tr>";
+  
       } /* foreach resultline */
-      if (resultcount == 0) {
-         /* show a message about configuration item */
-         QMessageBox::warning(this, "Bat",
-            tr("There were no results!\n"
-"It is possible you may need to add \"catalog = all\" to the Messages resource"
-" for this job.\n"), QMessageBox::Ok);
-      }
-   } /* if results from query */
-   textEdit->scrollToAnchor("top");
-}
 
-/*
- * Put text into the joblog window with an overload
- */
-void JobLog::display_text(const QString buf)
-{
-   m_cursor->movePosition(QTextCursor::End);
-   m_cursor->insertText(buf);
-}
+      htmlbuf += "</table></body></html>";
 
-void JobLog::display_text(const char *buf)
-{
-   m_cursor->movePosition(QTextCursor::End);
-   m_cursor->insertText(buf);
+      /* full text ready. Here a custom sheet is used to align columns */
+      QString logSheet("p,pre,.err {margin-left: 10px} .err {color:#FF0000;}");
+      textEdit->document()->setDefaultStyleSheet(logSheet);
+      textEdit->document()->setHtml(htmlbuf); 
+      textEdit->moveCursor(QTextCursor::Start);
+
+   } /* if results from query */
+  
 }
+  
Index: trunkbase/trunk/bacula/src/qt-console/joblog/joblog.h
===================================================================
--- trunkbase.orig/trunk/bacula/src/qt-console/joblog/joblog.h
+++ trunkbase/trunk/bacula/src/qt-console/joblog/joblog.h
@@ -49,8 +49,6 @@ public slots:
 private slots:
 
 private:
-   void display_text(const char *buf);
-   void display_text(const QString buf);
    void populateText();
    void getFont();
    QTextCursor *m_cursor;
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft 
Defy all challenges. Microsoft(R) Visual Studio 2008. 
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bacula-devel mailing list
Bacula-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/bacula-devel


This mailing list archive is a service of Copilotco.