diff --git a/app/controller.cpp b/app/controller.cpp index b36de2b9220e6e55eddcf2890698ebd566cdc255..57d32c3e684cccc4e3355079e1f0cb7bf21fa7ce 100644 --- a/app/controller.cpp +++ b/app/controller.cpp @@ -3,18 +3,19 @@ Controller::Controller(MainWindow *window) : eltCollection(), genStatus(), main(window) { - + eltCollection.insertColumns(0,8); + main->update_tasks(&eltCollection); QTimer *timer = new QTimer(); timer->connect(timer, SIGNAL(timeout()), this , SLOT(update())); - timer->start(1000); + timer->start(5000); } void Controller::update(){ //qDebug() << "timer lancé"; - //eltCollection.update(); + eltCollection.update(); genStatus.update(); main->update_status(genStatus); //eltCollection.update(); - //main->update_tasks(&eltCollection); + // } diff --git a/app/controller.h b/app/controller.h index 61ebcd5b4979b14c7e62c0b765c78e2809b19eda..4c704c7870ac14cc969fbd4894acd540b4cd17c1 100644 --- a/app/controller.h +++ b/app/controller.h @@ -2,6 +2,7 @@ #define CONTROLLER_H #include "elementslistmodel.h" +#include "elementstablemodel.h" #include "generalstatus.h" #include "mainwindow.h" #include <QTimer> @@ -21,7 +22,7 @@ public slots : private : MainWindow *main; - ElementsListModel eltCollection; + ElementsTableModel eltCollection; GeneralStatus genStatus; }; diff --git a/app/elementstablemodel.cpp b/app/elementstablemodel.cpp index 8a81ffed8878a670c44c535291b6720c0cd79573..f40c2cd78e82c5e4261d52ee55e129c2e551e6b1 100644 --- a/app/elementstablemodel.cpp +++ b/app/elementstablemodel.cpp @@ -62,28 +62,30 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const int row = index.row(); int col = index.column(); - QMap<int, Task*>::const_iterator it = taskMap.cbegin(); - it += row; - Task * task = it.value(); + //QMap<int, Task*>::const_iterator it = taskMap.cbegin(); + //it += row; + //Task * task = it.value(); + int pid = pidVector.at(row); + Task task = taskMap.value(pid); switch (col) { case 0: - return QVariant(task->getPID()); + return QVariant(task.getPID()); case 1: - return QVariant(task->getPID()); + return QVariant(task.get_name()); case 2: - return QVariant(task->getPID()); + return QVariant(task.get_status()); case 3: - return QVariant(task->getPPID()); + return QVariant(task.getPPID()); case 4: - return QVariant(task->getPID()); + return QVariant(task.getUser()); case 5: - return QVariant(task->getCPU()); + return QVariant(QString::number(task.getCPU())+"%"); case 6: - return QVariant(task->getMem()); + return QVariant(QString::number(task.getMem())+"%"); case 7: - return QVariant(task->getUtime()); + return QVariant(task.getUtime_s()); default: break; @@ -95,17 +97,20 @@ QVariant ElementsTableModel::data(const QModelIndex &index, int role) const -void ElementsTableModel::insertTask(Task *task, int key){ - beginInsertRows(QModelIndex(), 0, 0); +void ElementsTableModel::insertTask(Task &task, int key){ + beginInsertRows(QModelIndex(), rowCount(), rowCount()); taskMap.insert(key, task); - //qDebug() << "insert " + task.print() +" at " << row; + pidVector.append(key); + //qDebug() << "insert " << key << ";" + task.print(); endInsertRows(); } void ElementsTableModel::removeTask(int key){ - beginRemoveRows(QModelIndex(), 0, 0); + int row = pidVector.indexOf(key); + beginRemoveRows(QModelIndex(), row, row); taskMap.remove(key); - //qDebug() << "remove at " << row; + pidVector.remove(row); + //qDebug() << "remove " << key; endRemoveRows(); } @@ -138,3 +143,52 @@ bool ElementsTableModel::removeColumns(int column, int count, const QModelIndex // FIXME: Implement me! endRemoveColumns(); } + + +void ElementsTableModel::update() +{ + system("ls /proc | grep '[0-9]' > .listT"); + if(!task_list.open(QIODevice::ReadOnly)) { + QMessageBox::information(0, "error", task_list.errorString()); + } + QTextStream in(&task_list); + + foreach (Task task, taskMap) { + task.setExist(false); + } + + int pid; + while(!in.atEnd()) { + pid = in.readLine().toInt(); + + + //int index = taskVector.indexOf(pid); + Task test = taskMap.value(pid,Task(0)); + if (test.getPID() == 0) + { + Task t(pid); + if (t.isExist()) insertTask(t, pid); + } + else + { + //Task t = taskVector[index]; + test.update(); + if (!test.isExist()) removeTask(pid); + + } + + //model->appendRow(line); + } + + + task_list.close(); +} + + + + + + + + + diff --git a/app/elementstablemodel.h b/app/elementstablemodel.h index 0160655e10d996722dd08e676dccab38a5d27c75..1b5147cb417dcfdc8e4cf970b79bfd0672942d11 100644 --- a/app/elementstablemodel.h +++ b/app/elementstablemodel.h @@ -3,6 +3,7 @@ #include <QAbstractTableModel> #include <task.h> +#include <QDebug> class ElementsTableModel : public QAbstractTableModel @@ -12,6 +13,8 @@ class ElementsTableModel : public QAbstractTableModel public: explicit ElementsTableModel(QObject *parent = nullptr); + void update(); + QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; @@ -21,7 +24,7 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - void insertTask(Task *task, int key); + void insertTask(Task &task, int key); void removeTask(int key); @@ -35,7 +38,8 @@ public: private: - QMap<int, Task*> taskMap; + QMap<int, Task> taskMap; + QVector<int> pidVector; QFile task_list; }; diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index d70b6d8381a226b703426b7339ba53e3157c1a0f..7cf0fa49c72edddfdaf2fbe1a5c77ca3386d471d 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -15,13 +15,13 @@ MainWindow::MainWindow(QWidget *parent) : - Task t(1); - ElementsTableModel * model = new ElementsTableModel(); - model->insertColumns(0,8); - model->insertTask(&t, 1); + //Task t(1); + //ElementsTableModel * model = new ElementsTableModel(); + //model->insertColumns(0,8); + //model->insertTask(t, 1); //model->insertTask(t, 1); //ui->listView->setModel(model); - ui->tableView->setModel(model); + //ui->tableView->setModel(model); } @@ -52,9 +52,9 @@ void MainWindow::update_status(GeneralStatus &genStatus) } -void MainWindow::update_tasks(ElementsListModel * eltCollection) +void MainWindow::update_tasks(ElementsTableModel * eltCollection) { - //ui->listView->setModel(eltCollection); + ui->tableView->setModel(eltCollection); } void MainWindow::on_comboBox_currentTextChanged(const QString &arg1) diff --git a/app/mainwindow.h b/app/mainwindow.h index 8a49953edd32d54b0f0674ac608f2393e0e04c15..2c59fcb2bac991439bac7fbc57cd4b45b677e66d 100644 --- a/app/mainwindow.h +++ b/app/mainwindow.h @@ -21,7 +21,7 @@ public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); void update_status(GeneralStatus &genStatus); - void update_tasks(ElementsListModel* eltCollection); + void update_tasks(ElementsTableModel* eltCollection); private slots: void on_comboBox_currentTextChanged(const QString &arg1); diff --git a/app/task.cpp b/app/task.cpp index 6047c1927c11b6f148ecc9f07866754effdb4ab0..90bdab9fa58272104f0a74979356aa12d52082fc 100644 --- a/app/task.cpp +++ b/app/task.cpp @@ -7,6 +7,10 @@ Task::Task() : PID(0){ Task::Task(int PID) : PID(PID), utime(0), stat("/proc/"+QString::number(PID)+"/stat"), exist(true) { + if (PID==0) + { + return; + } QFile cmd("/proc/"+QString::number(PID)+"/comm"); if(!cmd.open(QIODevice::ReadOnly)) { exist = false; @@ -133,6 +137,18 @@ int Task::getUtime() const { return utime; } +QString Task::getUtime_s() const +{ + int time = utime; + int j = time/86400; + time-=j*86400; + int h = time/3600; + time-=h*3600; + int m = time/60; + int s = time - m*60; + + return QString::number(j)+ ":" + QString::number(h) + ":" + QString::number(m) + ":" + QString::number(s); +} double Task::getMem() const { return mem; diff --git a/app/task.h b/app/task.h index 4da5cd6d4638039034758cdc445ceddc90e66669..dd475714860c6f61519a79f9915fb55cc0491c69 100644 --- a/app/task.h +++ b/app/task.h @@ -23,6 +23,7 @@ public: int getPID() const; double getCPU() const; int getUtime() const; + QString getUtime_s() const; double getMem() const; int getPPID() const; QString getUser() const;