diff --git a/Qt/resource_minitor/main.cpp b/Qt/resource_minitor/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/Qt/resource_minitor/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/Qt/resource_minitor/mainwindow.cpp b/Qt/resource_minitor/mainwindow.cpp new file mode 100644 index 0000000..cc85a7e --- /dev/null +++ b/Qt/resource_minitor/mainwindow.cpp @@ -0,0 +1,16 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +MainWindow::MainWindow(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::MainWindow) +{ + ui->setupUi(this); + + p_res = new resource_minitor(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} diff --git a/Qt/resource_minitor/mainwindow.h b/Qt/resource_minitor/mainwindow.h new file mode 100644 index 0000000..019db8b --- /dev/null +++ b/Qt/resource_minitor/mainwindow.h @@ -0,0 +1,25 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include "resource_minitor.h" + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + +private: + Ui::MainWindow *ui; + + resource_minitor * p_res; +}; + +#endif // MAINWINDOW_H diff --git a/Qt/resource_minitor/mainwindow.ui b/Qt/resource_minitor/mainwindow.ui new file mode 100644 index 0000000..6050363 --- /dev/null +++ b/Qt/resource_minitor/mainwindow.ui @@ -0,0 +1,24 @@ + + MainWindow + + + + 0 + 0 + 400 + 300 + + + + MainWindow + + + + + + + + + + + diff --git a/Qt/resource_minitor/resource_minitor.cpp b/Qt/resource_minitor/resource_minitor.cpp new file mode 100644 index 0000000..e2e6786 --- /dev/null +++ b/Qt/resource_minitor/resource_minitor.cpp @@ -0,0 +1,144 @@ +#include "resource_minitor.h" +#include "sys/statfs.h" + +resource_minitor::resource_minitor(QObject *parent) : QObject(parent) +{ + connect(&monitor_timer__, &QTimer::timeout, this, &resource_minitor::get_resource__); + monitor_timer__.start(m_timer_interval__); +} + +void resource_minitor::get_resource__() +{ + get_cpu_usage__ (); + get_disk_speed__(); + get_mem_usage__ (); + get_net_usage__ (); + get_disk_space__(); + get_path_space("/"); + qDebug()<<"\n"; +} + +bool resource_minitor::get_mem_usage__() +{ + QProcess process; + process.start("free -m"); //使用free完成获取 + process.waitForFinished(); + process.readLine(); + QString str = process.readLine(); + str.replace("\n",""); + str.replace(QRegExp("( ){1,}")," ");//将连续空格替换为单个空格 用于分割 + auto lst = str.split(" "); + if(lst.size() > 6) + { + qDebug("mem total:%.0lfMB free:%.0lfMB",lst[1].toDouble(),lst[6].toDouble()); + return true; + } + return false; +} + +bool resource_minitor::get_net_usage__() +{ + QProcess process; + process.start("cat /proc/net/dev"); //读取文件/proc/net/dev获取网络收发包数量,再除取样时间得到网络速度 + process.waitForFinished(); + process.readLine(); + process.readLine(); + while(!process.atEnd()) + { + QString str = process.readLine(); + str.replace("\n",""); + str.replace(QRegExp("( ){1,}")," "); + auto lst = str.split(" "); + if(lst.size() > 9 && lst[0] == "enp2s0:") + { + double recv = 0; + double send = 0; + if(lst.size() > 1) + recv = lst[1].toDouble(); + if(lst.size() > 9) + send = lst[9].toDouble(); + qDebug("%s 接收速度:%.0lfbyte/s 发送速度:%.0lfbyte/s",lst[0].toStdString().c_str(),(recv - m_recv_bytes__) / (m_timer_interval__ / 1000.0),(send - m_send_bytes__) / (m_timer_interval__ / 1000.0)); + m_recv_bytes__ = recv; + m_send_bytes__ = send; + } + } + return true; +} + +bool resource_minitor::get_cpu_usage__() +{ + QProcess process; + process.start("cat /proc/stat"); + process.waitForFinished(); + QString str = process.readLine(); + str.replace("\n",""); + str.replace(QRegExp("( ){1,}")," "); + auto lst = str.split(" "); + if(lst.size() > 3) + { + double use = lst[1].toDouble() + lst[2].toDouble() + lst[3].toDouble(); + double total = 0; + for(int i = 1;i < lst.size();++i) + total += lst[i].toDouble(); + if(total - m_cpu_total__ > 0) + { + qDebug("cpu rate:%.2lf%%",(use - m_cpu_use__) / (total - m_cpu_total__) * 100.0); + m_cpu_total__ = total; + m_cpu_use__ = use; + return true; + } + } + return false; +} + +bool resource_minitor::get_disk_speed__() +{ + QProcess process; + process.start("iostat -k -d"); + process.waitForFinished(); + process.readLine(); + process.readLine(); + process.readLine(); + QString str = process.readLine(); + str.replace("\n",""); + str.replace(QRegExp("( ){1,}")," "); + auto lst = str.split(" "); + if(lst.size() > 5) + { + qDebug("disk read:%.0lfkb/s disk write:%.0lfkb/s",(lst[4].toDouble() - m_disk_read__ ) / (m_timer_interval__ / 1000.0),(lst[5].toDouble() - m_disk_write__) / (m_timer_interval__ / 1000.0)); + m_disk_read__ = lst[4].toDouble(); + m_disk_write__ = lst[5].toDouble(); + return true; + } + return false; +} + +bool resource_minitor::get_disk_space__() +{ + QProcess process; + process.start("df -k"); + process.waitForFinished(); + process.readLine(); + while(!process.atEnd()) + { + QString str = process.readLine(); + if(str.startsWith("/dev/sda")) + { + str.replace("\n",""); + str.replace(QRegExp("( ){1,}")," "); + auto lst = str.split(" "); + if(lst.size() > 5) + qDebug("挂载点:%s 已用:%.0lfMB 可用:%.0lfMB",lst[5].toStdString().c_str(),lst[2].toDouble()/1024.0,lst[3].toDouble()/1024.0); + } + } + return true; +} + +bool resource_minitor::get_path_space(const QString & path) +{ + struct statfs diskInfo; + statfs(path.toUtf8().data(), &diskInfo); + qDebug("%s 总大小:%.0lfMB 可用大小:%.0lfMB",path.toStdString().c_str(),(diskInfo.f_blocks * diskInfo.f_bsize)/1024.0/1024.0,(diskInfo.f_bavail * diskInfo.f_bsize)/1024.0/1024.0); + return true; +} + diff --git a/Qt/resource_minitor/resource_minitor.h b/Qt/resource_minitor/resource_minitor.h new file mode 100644 index 0000000..582862f --- /dev/null +++ b/Qt/resource_minitor/resource_minitor.h @@ -0,0 +1,38 @@ +#ifndef RESOURCE_MINITOR_H +#define RESOURCE_MINITOR_H + +#include +#include +#include +#include + +class resource_minitor : public QObject +{ + Q_OBJECT +public: + + explicit resource_minitor(QObject *parent = nullptr); + +private slots: + void get_resource__(); + +private: + bool get_mem_usage__(); + bool get_net_usage__(); + bool get_disk_speed__(); + bool get_cpu_usage__(); + bool get_disk_space__(); + bool get_path_space(const QString & path); + +private: + const int m_timer_interval__ = 1000; + QTimer monitor_timer__; + double m_send_bytes__ = 0; + double m_recv_bytes__ = 0; + double m_disk_read__ = 0; + double m_disk_write__ = 0; + double m_cpu_total__ = 0; + double m_cpu_use__ = 0; +}; + +#endif // RESOURCE_MINITOR_H diff --git a/Qt/resource_minitor/resource_minitor.pro b/Qt/resource_minitor/resource_minitor.pro new file mode 100644 index 0000000..4dfa4d2 --- /dev/null +++ b/Qt/resource_minitor/resource_minitor.pro @@ -0,0 +1,36 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2018-01-10T13:07:58 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = resource_minitor +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + + +SOURCES += \ + main.cpp \ + mainwindow.cpp \ + resource_minitor.cpp + +HEADERS += \ + mainwindow.h \ + resource_minitor.h + +FORMS += \ + mainwindow.ui diff --git a/Qt/resource_minitor/resource_minitor.pro.user b/Qt/resource_minitor/resource_minitor.pro.user new file mode 100644 index 0000000..297b5b4 --- /dev/null +++ b/Qt/resource_minitor/resource_minitor.pro.user @@ -0,0 +1,336 @@ + + + + + + EnvironmentId + {079d61eb-7432-4533-b643-43a673439d4c} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.9.3 GCC 64bit + Desktop Qt 5.9.3 GCC 64bit + qt.593.gcc_64_kit + 0 + 0 + 0 + + /home/yanglinchun/Desktop/build-resource_minitor-Desktop_Qt_5_9_3_GCC_64bit-Debug + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + true + + + /home/yanglinchun/Desktop/build-resource_minitor-Desktop_Qt_5_9_3_GCC_64bit-Release + + + true + qmake + + QtProjectManager.QMakeBuildStep + false + + false + false + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + + /home/yanglinchun/Desktop/build-resource_minitor-Desktop_Qt_5_9_3_GCC_64bit-Profile + + + true + qmake + + QtProjectManager.QMakeBuildStep + true + + false + true + false + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + false + + + + 2 + 构建 + + ProjectExplorer.BuildSteps.Build + + + + true + Make + + Qt4ProjectManager.MakeStep + + -w + -r + + true + clean + + + 1 + 清理 + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Profile + + Qt4ProjectManager.Qt4BuildConfiguration + 0 + true + + 3 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + 在本地部署 + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + resource_minitor + + Qt4ProjectManager.Qt4RunConfiguration:/home/yanglinchun/Desktop/resource_minitor/resource_minitor.pro + true + + resource_minitor.pro + false + + /home/yanglinchun/Desktop/build-resource_minitor-Desktop_Qt_5_9_3_GCC_64bit-Debug + 3768 + false + true + false + false + true + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + +