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

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


Greetings Riccardo

Both patches have been applied to the head of svn.

Dirk

On Wed, 2008-05-14 at 08:08 +0200, rghetta wrote:
> 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
> plain text document attachment (joblog.patch)
> 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

Attachment: signature.asc
Description: This is a digitally signed message part

-------------------------------------------------------------------------
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.