]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/Tasks.js
ui: fix typo to make pve-cluster-tasks store globally available
[pve-manager.git] / www / manager6 / dc / Tasks.js
CommitLineData
5289a1b8
EK
1/* This class defines the "Tasks" tab of the bottom status panel
2 * Tasks are jobs with a start, end and log output
3 */
4
9b707b3b
DM
5Ext.define('PVE.dc.Tasks', {
6 extend: 'Ext.grid.GridPanel',
7
8 alias: ['widget.pveClusterTasks'],
9
8058410f 10 initComponent: function() {
d74c3805 11 let me = this;
9b707b3b 12
d74c3805 13 let taskstore = Ext.create('Proxmox.data.UpdateStore', {
0a083b4d 14 storeId: 'pve-cluster-tasks',
56a353b9 15 model: 'proxmox-tasks',
9b707b3b 16 proxy: {
70793a32 17 type: 'proxmox',
f6710aac
TL
18 url: '/api2/json/cluster/tasks',
19 },
7251c620 20 });
d74c3805 21 let store = Ext.create('Proxmox.data.DiffStore', {
7251c620
AD
22 rstore: taskstore,
23 sortAfterUpdate: true,
24 appendAtStart: true,
9b707b3b 25 sorters: [
7251c620 26 {
8058410f 27 property: 'pid',
f6710aac 28 direction: 'DESC',
7251c620 29 },
9b707b3b 30 {
8058410f 31 property: 'starttime',
f6710aac
TL
32 direction: 'DESC',
33 },
34 ],
9b707b3b 35
9b707b3b
DM
36 });
37
d74c3805 38 let run_task_viewer = function() {
9b707b3b
DM
39 var sm = me.getSelectionModel();
40 var rec = sm.getSelection()[0];
41 if (!rec) {
42 return;
43 }
44
8cbc11a7 45 var win = Ext.create('Proxmox.window.TaskViewer', {
91d86e8f
TL
46 upid: rec.data.upid,
47 endtime: rec.data.endtime,
9b707b3b
DM
48 });
49 win.show();
50 };
51
52 Ext.apply(me, {
53 store: store,
54 stateful: false,
9b707b3b
DM
55 viewConfig: {
56 trackOver: false,
8c1c7742 57 stripeRows: true, // does not work with getRowClass()
9b707b3b 58 getRowClass: function(record, index) {
d74c3805
TL
59 let taskState = record.get('status');
60 if (taskState) {
61 let parsed = Proxmox.Utils.parse_task_status(taskState);
62 if (parsed === 'warning') {
63 return "proxmox-warning-row";
64 } else if (parsed !== 'ok') {
65 return "proxmox-invalid-row";
66 }
9b707b3b 67 }
d74c3805 68 return '';
f6710aac 69 },
9b707b3b
DM
70 },
71 sortableColumns: false,
72 columns: [
9d8d96c6
DC
73 {
74 header: gettext("Start Time"),
9b707b3b 75 dataIndex: 'starttime',
a26b2cb9 76 width: 150,
9d8d96c6
DC
77 renderer: function(value) {
78 return Ext.Date.format(value, "M d H:i:s");
f6710aac 79 },
9b707b3b 80 },
9d8d96c6
DC
81 {
82 header: gettext("End Time"),
9b707b3b 83 dataIndex: 'endtime',
a26b2cb9 84 width: 150,
9b707b3b
DM
85 renderer: function(value, metaData, record) {
86 if (record.data.pid) {
7c5f30bc
FE
87 if (record.data.type === "vncproxy" ||
88 record.data.type === "vncshell" ||
89 record.data.type === "spiceproxy") {
8058410f 90 metaData.tdCls = "x-grid-row-console";
9b707b3b 91 } else {
8058410f 92 metaData.tdCls = "x-grid-row-loading";
9b707b3b
DM
93 }
94 return "";
95 }
9d8d96c6 96 return Ext.Date.format(value, "M d H:i:s");
f6710aac 97 },
9b707b3b 98 },
9d8d96c6
DC
99 {
100 header: gettext("Node"),
9b707b3b 101 dataIndex: 'node',
f6710aac 102 width: 100,
9b707b3b 103 },
9d8d96c6
DC
104 {
105 header: gettext("User name"),
9b707b3b 106 dataIndex: 'user',
1011b569 107 renderer: Ext.String.htmlEncode,
f6710aac 108 width: 150,
9b707b3b 109 },
9d8d96c6
DC
110 {
111 header: gettext("Description"),
112 dataIndex: 'upid',
113 flex: 1,
f6710aac 114 renderer: Proxmox.Utils.render_upid,
9b707b3b 115 },
9d8d96c6
DC
116 {
117 header: gettext("Status"),
118 dataIndex: 'status',
9b707b3b 119 width: 200,
9d8d96c6 120 renderer: function(value, metaData, record) {
9b707b3b 121 if (record.data.pid) {
7c5f30bc 122 if (record.data.type !== "vncproxy") {
8058410f 123 metaData.tdCls = "x-grid-row-loading";
9b707b3b
DM
124 }
125 return "";
126 }
d74c3805 127 return Proxmox.Utils.format_task_status(value);
f6710aac
TL
128 },
129 },
9b707b3b
DM
130 ],
131 listeners: {
132 itemdblclick: run_task_viewer,
6386068d
TL
133 show: () => taskstore.startUpdate(),
134 destroy: () => taskstore.stopUpdate(),
f6710aac 135 },
9b707b3b
DM
136 });
137
138 me.callParent();
f6710aac 139 },
7251c620 140});