]>
git.proxmox.com Git - proxmox-backup.git/blob - www/config/VerifyView.js
1 Ext
.define('pbs-verify-jobs-status', {
2 extend
: 'Ext.data.Model',
4 'id', 'store', 'outdated-after', 'ignore-verified', 'schedule',
5 'next-run', 'last-run-upid', 'last-run-state', 'last-run-endtime',
8 calculate: function(data
) {
9 let endtime
= data
['last-run-endtime'];
10 if (!endtime
) return undefined;
11 let task
= Proxmox
.Utils
.parse_task_upid(data
['last-run-upid']);
12 return endtime
- task
.starttime
;
20 url
: '/api2/json/admin/verify',
24 Ext
.define('PBS.config.VerifyJobView', {
25 extend
: 'Ext.grid.GridPanel',
26 alias
: 'widget.pbsVerifyJobView',
29 stateId
: 'grid-verify-jobs-v1',
31 title
: gettext('Verify Jobs'),
34 xclass
: 'Ext.app.ViewController',
36 addVerifyJob: function() {
38 let view
= me
.getView();
39 Ext
.create('PBS.window.VerifyJobEdit', {
40 datastore
: view
.datastore
,
49 editVerifyJob: function() {
51 let view
= me
.getView();
52 let selection
= view
.getSelection();
53 if (selection
.length
< 1) return;
55 Ext
.create('PBS.window.VerifyJobEdit', {
56 datastore
: view
.datastore
,
57 id
: selection
[0].data
.id
,
66 openTaskLog: function() {
68 let view
= me
.getView();
69 let selection
= view
.getSelection();
70 if (selection
.length
< 1) return;
72 let upid
= selection
[0].data
['last-run-upid'];
75 Ext
.create('Proxmox.window.TaskViewer', {
80 runVerifyJob: function() {
82 let view
= me
.getView();
83 let selection
= view
.getSelection();
84 if (selection
.length
< 1) return;
86 let id
= selection
[0].data
.id
;
87 Proxmox
.Utils
.API2Request({
89 url
: `/admin/verify/${id}/run`,
90 success: function(response
, opt
) {
91 Ext
.create('Proxmox.window.TaskViewer', {
92 upid
: response
.result
.data
,
93 taskDone: function(success
) {
98 failure: function(response
, opt
) {
99 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
104 render_verify_status: function(value
, metadata
, record
) {
105 if (!record
.data
['last-run-upid']) {
109 if (!record
.data
['last-run-endtime']) {
110 metadata
.tdCls
= 'x-grid-row-loading';
114 let parsed
= Proxmox
.Utils
.parse_task_status(value
);
119 icon
= 'question faded';
120 text
= Proxmox
.Utils
.unknownText
;
123 icon
= 'times critical';
124 text
= Proxmox
.Utils
.errorText
+ ': ' + value
;
127 icon
= 'exclamation warning';
131 text
= gettext("OK");
134 return `<i class="fa fa-${icon}"></i> ${text}`;
137 render_next_run: function(value
, metadat
, record
) {
138 if (!value
) return '-';
140 let now
= new Date();
141 let next
= new Date(value
*1000);
144 return gettext('pending');
146 return Proxmox
.Utils
.render_timestamp(value
);
149 render_optional_timestamp: function(value
, metadata
, record
) {
150 if (!value
) return '-';
151 return Proxmox
.Utils
.render_timestamp(value
);
154 startStore: function() { this.getView().getStore().rstore
.startUpdate(); },
155 stopStore: function() { this.getView().getStore().rstore
.stopUpdate(); },
157 reload: function() { this.getView().getStore().rstore
.load(); },
159 init: function(view
) {
161 if (view
.datastore
!== undefined) {
162 params
.store
= view
.datastore
;
164 view
.getStore().rstore
.getProxy().setExtraParams(params
);
165 Proxmox
.Utils
.monStoreErrors(view
, view
.getStore().rstore
);
170 activate
: 'startStore',
171 deactivate
: 'stopStore',
172 itemdblclick
: 'editVerifyJob',
178 autoDestroyRstore
: true,
182 storeid
: 'pbs-verify-jobs-status',
183 model
: 'pbs-verify-jobs-status',
190 xtype
: 'proxmoxButton',
191 text
: gettext('Add'),
192 handler
: 'addVerifyJob',
196 xtype
: 'proxmoxButton',
197 text
: gettext('Edit'),
198 handler
: 'editVerifyJob',
202 xtype
: 'proxmoxStdRemoveButton',
203 baseurl
: '/config/verify/',
204 confirmMsg
: gettext('Remove entry?'),
209 xtype
: 'proxmoxButton',
210 text
: gettext('Show Log'),
211 handler
: 'openTaskLog',
212 enableFn
: (rec
) => !!rec
.data
['last-run-upid'],
216 xtype
: 'proxmoxButton',
217 text
: gettext('Run now'),
218 handler
: 'runVerifyJob',
229 header
: gettext('Job ID'),
231 renderer
: Ext
.String
.htmlEncode
,
238 header
: gettext('Datastore'),
243 header
: gettext('Skip Verified'),
244 dataIndex
: 'ignore-verified',
245 renderer
: Proxmox
.Utils
.format_boolean
,
250 header
: gettext('Re-Verify After'),
251 dataIndex
: 'outdated-after',
252 renderer
: v
=> v
? v
+' '+ gettext('Days') : gettext('Never'),
257 header
: gettext('Schedule'),
258 dataIndex
: 'schedule',
265 header
: gettext('Last Verification'),
266 dataIndex
: 'last-run-endtime',
267 renderer
: 'render_optional_timestamp',
272 text
: gettext('Duration'),
273 dataIndex
: 'duration',
274 renderer
: Proxmox
.Utils
.render_duration
,
278 header
: gettext('Status'),
279 dataIndex
: 'last-run-state',
280 renderer
: 'render_verify_status',
284 header
: gettext('Next Run'),
285 dataIndex
: 'next-run',
286 renderer
: 'render_next_run',
291 header
: gettext('Comment'),
292 dataIndex
: 'comment',
293 renderer
: Ext
.String
.htmlEncode
,
299 initComponent: function() {
301 let hideDatastore
= !!me
.datastore
;
303 for (let column
of me
.columns
) {
304 if (column
.dataIndex
=== 'store') {
305 column
.hidden
= hideDatastore
;