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
> > [email protected]
> > 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/bacula-devel