From 06a632985926b6a044928eb05c4d2e4a90f09303 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Wed, 26 Jun 2019 21:45:42 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/libs@566 a8b55f48-bf90-11e4-a774-851b48703e85 --- piqt_utils/piintrospector/piintrospector.cpp | 53 ++++++++++++++++++-- piqt_utils/piintrospector/piintrospector.h | 5 +- piqt_utils/piintrospector/piintrospector.ui | 43 +++++++++++++++- 3 files changed, 94 insertions(+), 7 deletions(-) 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, % + + + +