aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitaly Wool <vitaly.wool@konsulko.com>2018-11-28 16:50:01 +0100
committerVitaly Wool <vitaly.wool@konsulko.com>2018-11-28 16:51:28 +0100
commitd466bf191f581f4e3a3d1988845bffad01f7b3e1 (patch)
tree4f8b56616aaeaddf78c1aa2ea62ab9f30a420c8f
parentf52f93fa42ffc213653e4772acedfcf849707ce8 (diff)
Add kill button and relevant functionalityguppy_6.99.2guppy/6.99.26.99.2
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 <vitaly.wool@konsulko.com> Change-Id: Iac50f6ce46fc91471d94118587c6e7ea0842beca
-rw-r--r--app/main.qml183
-rw-r--r--app/taskmanager.cpp22
-rw-r--r--app/taskmanager.h4
3 files changed, 127 insertions, 82 deletions
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: