summaryrefslogtreecommitdiff
path: root/rbutil/rbutilqt/systrace.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'rbutil/rbutilqt/systrace.cpp')
-rw-r--r--rbutil/rbutilqt/systrace.cpp108
1 files changed, 45 insertions, 63 deletions
diff --git a/rbutil/rbutilqt/systrace.cpp b/rbutil/rbutilqt/systrace.cpp
index dc8534af03..5e42e1b2d8 100644
--- a/rbutil/rbutilqt/systrace.cpp
+++ b/rbutil/rbutilqt/systrace.cpp
@@ -22,10 +22,8 @@
22#include "ui_systracefrm.h" 22#include "ui_systracefrm.h"
23 23
24#include "rbsettings.h" 24#include "rbsettings.h"
25#include "Logger.h"
25 26
26QString SysTrace::debugbuffer;
27QString SysTrace::lastmessage;
28unsigned int SysTrace::repeat = 0;
29 27
30SysTrace::SysTrace(QWidget *parent) : QDialog(parent) 28SysTrace::SysTrace(QWidget *parent) : QDialog(parent)
31{ 29{
@@ -43,7 +41,28 @@ SysTrace::SysTrace(QWidget *parent) : QDialog(parent)
43void SysTrace::refresh(void) 41void SysTrace::refresh(void)
44{ 42{
45 int pos = ui.textTrace->verticalScrollBar()->value(); 43 int pos = ui.textTrace->verticalScrollBar()->value();
46 flush(); 44
45 QString debugbuffer;
46 QFile tracefile(QDir::tempPath() + "/rbutil-trace.log");
47 tracefile.open(QIODevice::ReadOnly);
48 QTextStream c(&tracefile);
49 QString line;
50 QString color;
51 while(!c.atEnd()) {
52 line = c.readLine();
53 if(line.contains("WARNING"))
54 color = "orange";
55 else if(line.contains("ERROR"))
56 color = "red";
57#if 0
58 else if(line.contains("INFO"))
59 color = "green";
60#endif
61 else
62 color = "black";
63 debugbuffer += QString("<div style='color:%1;'>%2</div>").arg(color, line);
64 }
65 tracefile.close();
47 ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>"); 66 ui.textTrace->setHtml("<pre>" + debugbuffer + "</pre>");
48 ui.textTrace->verticalScrollBar()->setValue(pos); 67 ui.textTrace->verticalScrollBar()->setValue(pos);
49 QString oldlog = RbSettings::value(RbSettings::CachePath).toString() 68 QString oldlog = RbSettings::value(RbSettings::CachePath).toString()
@@ -52,23 +71,26 @@ void SysTrace::refresh(void)
52} 71}
53 72
54 73
74QString SysTrace::getTrace(void)
75{
76 QString debugbuffer;
77 QFile tracefile(QDir::tempPath() + "/rbutil-trace.log");
78 tracefile.open(QIODevice::ReadOnly);
79 QTextStream c(&tracefile);
80 debugbuffer = c.readAll();
81 tracefile.close();
82
83 return debugbuffer;
84}
85
86
55void SysTrace::save(QString filename) 87void SysTrace::save(QString filename)
56{ 88{
57 if(filename.isEmpty()) 89 if(filename.isEmpty())
58 filename = RbSettings::value(RbSettings::CachePath).toString()
59 + "/rbutil-trace.log";
60 // make sure any repeat detection is flushed
61 flush();
62 // append save date to the trace. Append it directly instead of using
63 // qDebug() as the handler might have been unregistered.
64 debugbuffer.append("[SysTrace] saving trace at ");
65 debugbuffer.append(QDateTime::currentDateTime().toString(Qt::ISODate));
66 debugbuffer.append("\n");
67 QFile fh(filename);
68 if(!fh.open(QIODevice::WriteOnly))
69 return; 90 return;
70 fh.write(debugbuffer.toUtf8(), debugbuffer.size()); 91 LOG_INFO() << "saving trace at" << QDateTime::currentDateTime().toString(Qt::ISODate);
71 fh.close(); 92 QFile::copy(QDir::tempPath() + "/rbutil-trace.log", filename);
93
72} 94}
73 95
74void SysTrace::saveCurrentTrace(void) 96void SysTrace::saveCurrentTrace(void)
@@ -87,59 +109,19 @@ void SysTrace::savePreviousTrace(void)
87 if(fp.isEmpty()) 109 if(fp.isEmpty())
88 return; 110 return;
89 111
90 QString oldlog = RbSettings::value(RbSettings::CachePath).toString() 112 QString oldlog = QDir::tempPath() + "/rbutil-trace.log.1";
91 + "/rbutil-trace.log";
92 QFile::copy(oldlog, fp); 113 QFile::copy(oldlog, fp);
93 return; 114 return;
94} 115}
95 116
96#if QT_VERSION < 0x050000
97void SysTrace::debug(QtMsgType type, const char* msg)
98{
99 (void)type;
100 if(lastmessage != msg) {
101 lastmessage = msg;
102 flush();
103 debugbuffer.append(QString::fromLocal8Bit(msg) + "\n");
104#if !defined(NODEBUG)
105 fprintf(stderr, "%s\n", msg);
106#endif
107 repeat = 1;
108 }
109 else {
110 repeat++;
111 }
112}
113#else
114void SysTrace::debug(QtMsgType type, const QMessageLogContext &context, const QString &msg)
115{
116 (void)type;
117 (void)context;
118 QByteArray localMsg = msg.toLocal8Bit();
119 if(lastmessage != msg) {
120 lastmessage = msg;
121 flush();
122 debugbuffer.append(msg + "\n");
123#if !defined(NODEBUG)
124 fprintf(stderr, "%s\n", localMsg.constData());
125#endif
126 repeat = 1;
127 }
128 else {
129 repeat++;
130 }
131}
132#endif
133 117
134void SysTrace::flush(void) 118void SysTrace::rotateTrace(void)
135{ 119{
136 if(repeat > 1) { 120 QString f = QDir::tempPath() + "/rbutil-trace.log.1";
137 debugbuffer.append( 121 if(QFileInfo(f).exists()) {
138 QString(" (Last message repeated %1 times.)\n").arg(repeat)); 122 QFile::remove(f);
139#if !defined(NODEBUG)
140 fprintf(stderr, " (Last message repeated %i times.)\n", repeat);
141#endif
142 } 123 }
124 QFile::rename(QDir::tempPath() + "/rbutil-trace.log", f);
143} 125}
144 126
145 127