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

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


Oh, I forgot to mention that the data displayed is a bit old -- it does not 
contain current data because I copied the SQL database from my production 
system to my laptop for doing the realtime demo ...

Also, please note that I did not propose a solution, just the problem.  I 
leave it to you guys to think about.

Since we are talking about the JobList dialog (one of the most useful for a 
sysadmin), I would prefer to have the Purged column read "Yes" and "No" 
rather than NOT and IS.  

Kern

PS: Another nice feature would be to have as many of the same popup menu items 
(right click) on the Storage list as you currently have on the Media list for 
a Volume item.  :-)



On Thursday 15 May 2008 04:00:03 Dirk Bartley wrote:
> 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



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