From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup v2 6/6] ui: Dashboard/TaskSummary: show task overlay when clicking on a count
Date: Tue, 6 Oct 2020 12:25:28 +0200 [thread overview]
Message-ID: <20201006102528.15383-6-d.csapak@proxmox.com> (raw)
In-Reply-To: <20201006102528.15383-1-d.csapak@proxmox.com>
when clicking on a count in the summary, a small task overlay now pops
up that shows those tasks. this way, the user has an easy way
of seeing which tasks failed exactly
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
www/Dashboard.js | 2 +-
www/dashboard/TaskSummary.js | 138 ++++++++++++++++++++++++++++++++++-
2 files changed, 138 insertions(+), 2 deletions(-)
diff --git a/www/Dashboard.js b/www/Dashboard.js
index 961100df..1a68029f 100644
--- a/www/Dashboard.js
+++ b/www/Dashboard.js
@@ -166,7 +166,7 @@ Ext.define('PBS.Dashboard', {
}
});
- me.lookup('tasksummary').updateTasks(data);
+ me.lookup('tasksummary').updateTasks(data, viewModel.get('sinceEpoch'));
},
init: function(view) {
diff --git a/www/dashboard/TaskSummary.js b/www/dashboard/TaskSummary.js
index 58393e1d..6a503979 100644
--- a/www/dashboard/TaskSummary.js
+++ b/www/dashboard/TaskSummary.js
@@ -7,6 +7,13 @@ Ext.define('PBS.TaskSummary', {
controller: {
xclass: 'Ext.app.ViewController',
+ states: [
+ "",
+ "error",
+ "warning",
+ "ok",
+ ],
+
types: [
"backup",
"prune",
@@ -20,6 +27,130 @@ Ext.define('PBS.TaskSummary', {
"prune": gettext('Prunes'),
"garbage_collection": gettext('Garbage collections'),
"sync": gettext('Syncs'),
+ "verify": gettext('Verify'),
+ },
+
+ openTaskList: function(grid, td, cellindex, record, tr, rowindex) {
+ let me = this;
+ let view = me.getView();
+
+ if (cellindex > 0) {
+ let tasklist = view.tasklist;
+ let state = me.states[cellindex];
+ let type = me.types[rowindex];
+ let filterParam = {
+ 'statusfilter': state,
+ 'typefilter': type,
+ };
+
+ if (me.since) {
+ filterParam.since = me.since;
+ }
+
+ if (record.data[state] === 0) {
+ return;
+ }
+
+ if (tasklist === undefined) {
+ tasklist = Ext.create('Ext.grid.Panel', {
+ tools: [{
+ handler: () => tasklist.setVisible(false),
+ }],
+ floating: true,
+ scrollable: true,
+
+ height: 400,
+ width: 600,
+
+ columns: [
+ {
+ text: gettext('Task'),
+ dataIndex: 'upid',
+ renderer: Proxmox.Utils.render_upid,
+ flex: 1,
+ },
+ {
+ header: gettext("Start Time"),
+ dataIndex: 'starttime',
+ width: 130,
+ renderer: function(value) {
+ return Ext.Date.format(value, "M d H:i:s");
+ },
+ },
+ {
+ xtype: 'actioncolumn',
+ width: 40,
+ items: [
+ {
+ iconCls: 'fa fa-chevron-right',
+ tooltip: gettext('Open Task'),
+ handler: function(g, rowIndex) {
+ let rec = tasklist.getStore().getAt(rowIndex);
+ tasklist.setVisible(false);
+ Ext.create('Proxmox.window.TaskViewer', {
+ upid: rec.data.upid,
+ endtime: rec.data.endtime,
+ listeners: {
+ close: () => tasklist.setVisible(true),
+ },
+ }).show();
+ },
+ },
+ ],
+ },
+ ],
+
+ store: {
+ sorters: [
+ {
+ property: 'starttime',
+ direction: 'DESC',
+ },
+ ],
+ type: 'store',
+ model: 'proxmox-tasks',
+ proxy: {
+ type: 'proxmox',
+ url: "/api2/json/status/tasks",
+ },
+ },
+ });
+
+ view.on('destroy', function() {
+ tasklist.setVisible(false);
+ tasklist.destroy();
+ tasklist = undefined;
+ });
+
+ view.tasklist = tasklist;
+ } else {
+ let cidx = tasklist.cidx;
+ let ridx = tasklist.ridx;
+
+ if (cidx === cellindex && ridx === rowindex && tasklist.isVisible()) {
+ tasklist.setVisible(false);
+ return;
+ }
+ }
+
+ tasklist.cidx = cellindex;
+ tasklist.ridx = rowindex;
+
+ let task = me.titles[type];
+ let status = "";
+ switch (state) {
+ case 'ok': status = gettext("OK"); break;
+ case 'warnings': status = gettext("Warning"); break;
+ case 'error': status = Proxmox.Utils.errorText; break;
+ }
+ let icon = me.render_icon(state, 1);
+ tasklist.setTitle(`${task} - ${status} ${icon}`);
+ tasklist.getStore().getProxy().setExtraParams(filterParam);
+ tasklist.getStore().removeAll();
+
+ tasklist.showBy(td, 'bl-tl');
+ setTimeout(() => tasklist.getStore().reload(), 10);
+ }
},
render_icon: function(state, count) {
@@ -55,7 +186,7 @@ Ext.define('PBS.TaskSummary', {
},
},
- updateTasks: function(source) {
+ updateTasks: function(source, since) {
let me = this;
let controller = me.getController();
let data = [];
@@ -64,6 +195,7 @@ Ext.define('PBS.TaskSummary', {
data.push(source[type]);
});
me.lookup('grid').getStore().setData(data);
+ controller.since = since;
},
layout: 'fit',
@@ -90,6 +222,10 @@ Ext.define('PBS.TaskSummary', {
data: [],
},
+ listeners: {
+ cellclick: 'openTaskList',
+ },
+
columns: [
{
dataIndex: 'type',
--
2.20.1
next prev parent reply other threads:[~2020-10-06 10:26 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-06 10:25 [pbs-devel] [PATCH proxmox-backup v2 1/6] api2/types: add TaskStateType struct Dominik Csapak
2020-10-06 10:25 ` [pbs-devel] [PATCH proxmox-backup v2 2/6] api2/status: add type- and statusfilter to tasks api call Dominik Csapak
2020-10-06 10:25 ` [pbs-devel] [PATCH proxmox-backup v2 3/6] ui: implment task history limit and make it configurable Dominik Csapak
2020-10-06 10:53 ` Thomas Lamprecht
2020-10-06 11:25 ` Dominik Csapak
2020-10-06 10:25 ` [pbs-devel] [PATCH proxmox-backup v2 4/6] ui: Dashboard/TaskSummary: refactor types and title Dominik Csapak
2020-10-06 10:25 ` [pbs-devel] [PATCH proxmox-backup v2 5/6] ui: Dashboard/TaskSummary: add Verifies to the Summary Dominik Csapak
2020-10-06 11:10 ` Thomas Lamprecht
2020-10-06 11:25 ` Thomas Lamprecht
2020-10-06 10:25 ` Dominik Csapak [this message]
2020-10-06 14:07 ` [pbs-devel] applied-series: [PATCH proxmox-backup v2 1/6] api2/types: add TaskStateType struct Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201006102528.15383-6-d.csapak@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox