From d466bf191f581f4e3a3d1988845bffad01f7b3e1 Mon Sep 17 00:00:00 2001 From: Vitaly Wool Date: Wed, 28 Nov 2018 16:50:01 +0100 Subject: Add kill button and relevant functionality Add 'Kill' and 'Info' (for future use: display detailed info on process in a separate window) buttons to the Task Manager UI and implement sending kill command to the service. Signed-off-by: Vitaly Wool Change-Id: Iac50f6ce46fc91471d94118587c6e7ea0842beca --- app/main.qml | 183 +++++++++++++++++++++++++++++++--------------------- app/taskmanager.cpp | 22 +++++-- app/taskmanager.h | 4 +- 3 files changed, 127 insertions(+), 82 deletions(-) (limited to 'app') diff --git a/app/main.qml b/app/main.qml index 796ec52..58f63a6 100644 --- a/app/main.qml +++ b/app/main.qml @@ -1,92 +1,127 @@ -import QtQuick 2.4 +import QtQuick 2.6 import QtQuick.Window 2.2 import QtQuick.Controls 1.4 +import QtQuick.Layouts 1.1 import TaskManager 1.0 Window { - id: root - visible: true - width: 745 - height: 480 + id: root + visible: true + width: 745 + height: 480 - TaskManager { - id: taskmng + TaskManager { + id: taskmgr - onUpdateProcess: { - var index = findId(tid_); - libraryModel.set(index, {"cmd": cmd_, "tid": tid_, "user": euid_, "system_cpu": scpu_, - "user_cpu": ucpu_, "resident_memory": resident_memory_, "state": state_}); - } + onUpdateProcess: { + var index = findId(tid_); + libraryModel.set(index, {"cmd": cmd_, "tid": tid_, "user": euid_, "system_cpu": scpu_, + "user_cpu": ucpu_, "resident_memory": resident_memory_, "state": state_}); + } - onAddProcess: { - libraryModel.append({"cmd": cmd_, "tid": tid_, "user": euid_, "system_cpu": scpu_, - "user_cpu": ucpu_, "resident_memory": resident_memory_, "state": state_}); - } + onAddProcess: { + libraryModel.append({"cmd": cmd_, "tid": tid_, "user": euid_, "system_cpu": scpu_, + "user_cpu": ucpu_, "resident_memory": resident_memory_, "state": state_}); + } - onRemoveProcess: { - var index = findId(tid_); - libraryModel.remove(index); - } + onRemoveProcess: { + var index = findId(tid_); + libraryModel.remove(index); + } - function findId(tid) { - for(var i = 0; i < libraryModel.count; i++) { - if(tid == libraryModel.get(i).tid) { - return i; - } - } - } + function findId(tid) { + for(var i = 0; i < libraryModel.count; i++) { + if(tid == libraryModel.get(i).tid) { + return i; + } + } + } - Component.onCompleted: { - taskmng.open(bindingAddress); - } - } + Component.onCompleted: { + taskmgr.open(bindingAddress); + } + } - ListModel { - id: libraryModel - } + ListModel { + id: libraryModel + } + Rectangle { + id: mainview + width: parent.width + height: parent.height + Row { + id: buttonRow + width: parent.width + anchors.top: mainview.top - TableView { - width: root.width - height: root.height + RowLayout { + id: buttonRowLayout + spacing: 6 - TableViewColumn { - role: "cmd" - title: "Process" - width: 150 - } - TableViewColumn { - role: "tid" - title: "ID" - width: 80 - } - TableViewColumn { - role: "user" - title: "User" - width: 80 - } - TableViewColumn { - role: "system_cpu" - title: "System %" - width: 100 - } - TableViewColumn { - role: "user_cpu" - title: "User %" - width: 100 - } - TableViewColumn { - role: "resident_memory" - title: "Memory" - width: 100 - } - TableViewColumn { - role: "state" - title: "State" - width: 90 - } - model: libraryModel - } + Button { + id: infoButton + text: "Info" + enabled: tableView.currentRow != -1 + } + Button { + id: killButton + text: "Kill" + enabled: tableView.currentRow != -1 + onClicked: { + tableView.selection.forEach( function(rowIndex) { + taskmgr.kill(libraryModel.get(rowIndex).tid)} + ) + tableView.selection.clear() + } + } + } + } + + TableView { + id: tableView + height: parent.height - buttonRow.height + width: parent.width + anchors.top: buttonRow.bottom + + TableViewColumn { + role: "cmd" + title: "Process" + width: 150 + } + TableViewColumn { + role: "tid" + title: "ID" + width: 80 + } + TableViewColumn { + role: "user" + title: "User" + width: 80 + } + TableViewColumn { + role: "system_cpu" + title: "System %" + width: 100 + } + TableViewColumn { + role: "user_cpu" + title: "User %" + width: 100 + } + TableViewColumn { + role: "resident_memory" + title: "Memory" + width: 100 + } + TableViewColumn { + role: "state" + title: "State" + width: 90 + } + model: libraryModel + } + } } diff --git a/app/taskmanager.cpp b/app/taskmanager.cpp index 1b913d0..be95fd7 100644 --- a/app/taskmanager.cpp +++ b/app/taskmanager.cpp @@ -14,22 +14,30 @@ TaskManager::TaskManager(QObject* parent) : QObject(parent) { void TaskManager::open(const QUrl &bindingAddress) { m_socket.open(bindingAddress); timer = new QTimer(); - connect(timer, SIGNAL(timeout()), this, SLOT(callService())); + connect(timer, SIGNAL(timeout()), this, SLOT(query())); timer->start(3000); } -void TaskManager::callService() { +void TaskManager::kill(int tid) { + callService(QString("kill_process"), QJsonValue(tid)); +} + +void TaskManager::query() { + callService(QString("get_process_list"), QJsonValue()); +} + +void TaskManager::callService(const QString& command, QJsonValue value) { QJsonArray msg; msg.append(2); // Call msg.append(QString::number(m_nextCallId)); - msg.append(QString("taskmanager/get_process_list")); - msg.append(QJsonValue()); + msg.append(QString("taskmanager/") + command); + msg.append(value); m_nextCallId++; - QJsonDocument value; - value.setArray(msg); + QJsonDocument jsonDoc; + jsonDoc.setArray(msg); - m_socket.sendTextMessage(value.toJson(QJsonDocument::Compact)); + m_socket.sendTextMessage(jsonDoc.toJson(QJsonDocument::Compact)); } void TaskManager::onSocketTextReceived(QString msg) diff --git a/app/taskmanager.h b/app/taskmanager.h index 08d0027..da4f725 100644 --- a/app/taskmanager.h +++ b/app/taskmanager.h @@ -18,6 +18,7 @@ public: explicit TaskManager(QObject* parent = nullptr); Q_INVOKABLE void open(const QUrl& url); + Q_INVOKABLE void kill(int tid); QTimer *timer; signals: @@ -26,7 +27,8 @@ signals: void removeProcess(int tid_); private slots: - void callService(); + void query(); + void callService(const QString& ccommand, QJsonValue value); void onSocketTextReceived(QString msg); private: -- cgit 1.2.3-korg