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

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


Hello Riccardo,

With this version, I find that my most useful report, the JobLIst is 
now "cluttered" and I must search for the information I want. The problem is 
that a bunch of jobs with created records, but no actual job run, now show up 
at the top of the report, where I normally see the status for the day.

I am suspecting that you have changed the sort order from JobId to StartTime, 
and if the start time is zero, all the "bad" job records float to the top 
making it harder to find the information from the previous night.

I attach two screen shots so you can see the output.

Best regards,

Kern



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


Attachment: OldJobList.png
Description: PNG image

Attachment: NewJobList.png
Description: PNG image

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