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