diff --git a/piqt_utils/piintrospector/piintrospector.cpp b/piqt_utils/piintrospector/piintrospector.cpp
index 15aa6a3..14ea52e 100644
--- a/piqt_utils/piintrospector/piintrospector.cpp
+++ b/piqt_utils/piintrospector/piintrospector.cpp
@@ -90,14 +90,59 @@ void QPIIntrospector::buildDumpSection(QTreeWidgetItem * pi, PIString & str) {
}
-void QPIIntrospector::showInfo(const PIIntrospection::ProcessInfo & info) {
+void QPIIntrospector::showInfo() {
PIString s;
s << info.execCommand << "\n";
s << info.execDateTime.toString() << "\n";
s << info.OS_name << "(" << info.OS_version << ", " << info.architecture << ")\n";
s << info.user << "\n";
- s << info.build_options.join(", ");
+ s << info.build_options.join(", ") << "\n";
+ s << "\n";
+ s << "load k: " << PIString::fromNumber(stat.proc.cpu_load_system, 'f', 2) << " %\n";
+ s << "load u: " << PIString::fromNumber(stat.proc.cpu_load_user, 'f', 2) << " %\n";
+ s << "threads: " << stat.proc.threads << "\n";
+ s << "memory usage: " << stat.proc.physical_memsize_readable;
labelInfo->setText(PI2QString(s));
+ int tlic = treeStat->topLevelItemCount();
+ for (int i = tlic; i < stat.threads.size_s(); ++i)
+ treeStat->addTopLevelItem(new QTreeWidgetItem());
+ for (int i = tlic - 1; i >= stat.threads.size_s(); --i)
+ delete treeStat->topLevelItem(i);
+ tlic = piMini(treeStat->topLevelItemCount(), stat.threads.size_s());
+ for (int i = 0; i < tlic; ++i) {
+ QTreeWidgetItem * ti = treeStat->topLevelItem(i);
+ PISystemMonitor::ThreadStats & ts(stat.threads[i]);
+ ti->setText(0, QString::number(i + 1));
+ ti->setText(1, QString::number(ts.id));
+ ti->setText(2, PI2QString(ts.name));
+ ti->setText(3, durationStr(ts.work_time));
+ ti->setText(4, QString::number(ts.cpu_load_kernel, 'f', 2));
+ ti->setText(5, QString::number(ts.cpu_load_user, 'f', 2));
+ }
+}
+
+
+QString QPIIntrospector::durationStr(PISystemTime t) {
+ QString ret;
+ double s = t.toSeconds();
+ int d, h, m;
+ d = piFloor(s / (24*60*60));
+ if (d > 0) {
+ ret += QString::number(d) + " d ";
+ s -= d * (24*60*60);
+ }
+ h = piFloor(s / (60*60));
+ if (h > 0) {
+ ret += QString::number(h) + " h ";
+ s -= h * (60*60);
+ }
+ m = piFloor(s / 60);
+ if (m > 0) {
+ ret += QString::number(m).rightJustified(2, '0') + " m ";
+ s -= m * 60;
+ }
+ ret += QString::number(piFloor(s)).rightJustified(2, '0') + " s";
+ return ret;
}
@@ -124,13 +169,10 @@ void QPIIntrospector::peerReceived(const PIString & from, const PIByteArray & da
switch (cs.read()) {
case PIIntrospection::itInfo: {
cs.get(pba);
- PIIntrospection::ProcessInfo info;
PIIntrospection::unpackInfo(pba, info);
- showInfo(info);
} break;
case PIIntrospection::itProcStat: {
cs.get(pba);
- PIIntrospection::ProcessStat stat;
PIIntrospection::unpackProcStat(pba, stat);
//showInfo(info);
} break;
@@ -156,6 +198,7 @@ void QPIIntrospector::peerReceived(const PIString & from, const PIByteArray & da
default: break;
}
}
+ showInfo();
}
diff --git a/piqt_utils/piintrospector/piintrospector.h b/piqt_utils/piintrospector/piintrospector.h
index 35b1ba3..8d87765 100644
--- a/piqt_utils/piintrospector/piintrospector.h
+++ b/piqt_utils/piintrospector/piintrospector.h
@@ -24,13 +24,16 @@ protected:
void timerEvent(QTimerEvent * );
void buildDumpSection(QTreeWidgetItem * pi, PIString & str);
- void showInfo(const PIIntrospection::ProcessInfo & info);
+ void showInfo();
EVENT_HANDLER(void, reqProcPIEvents) {QMetaObject::invokeMethod(this, "procPIEvents", Qt::QueuedConnection);}
+ QString durationStr(PISystemTime t);
EVENT_HANDLER2(void, peerReceived, const PIString &, from, const PIByteArray &, data);
EVENT_HANDLER1(void, peersChanged, const PIString &, name);
PIString cur_server;
+ PIIntrospection::ProcessInfo info;
+ PIIntrospection::ProcessStat stat;
PIPeer peer;
int request_timer;
diff --git a/piqt_utils/piintrospector/piintrospector.ui b/piqt_utils/piintrospector/piintrospector.ui
index 050920a..9230309 100644
--- a/piqt_utils/piintrospector/piintrospector.ui
+++ b/piqt_utils/piintrospector/piintrospector.ui
@@ -124,7 +124,7 @@
-
- 3
+ 0
@@ -141,6 +141,47 @@
+ -
+
+
+ Threads:
+
+
+
+ -
+
+
+
+ #
+
+
+
+
+ id
+
+
+
+
+ name
+
+
+
+
+ uptime
+
+
+
+
+ kernel, %
+
+
+
+
+ user, %
+
+
+
+