pve-manager/www/manager6/window/ScheduleSimulator.js
Thomas Lamprecht d3eacb83f8 ui: schedule sim: clear previous simulation output on error
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2023-01-20 10:46:00 +01:00

143 lines
2.7 KiB
JavaScript

Ext.define('PVE.window.ScheduleSimulator', {
extend: 'Ext.window.Window',
title: gettext('Job Schedule Simulator'),
controller: {
xclass: 'Ext.app.ViewController',
close: function() {
this.getView().close();
},
simulate: function() {
let me = this;
let schedule = me.lookup('schedule').getValue();
if (!schedule) {
return;
}
let iterations = me.lookup('iterations').getValue() || 10;
Proxmox.Utils.API2Request({
url: '/cluster/jobs/schedule-analyze',
method: 'GET',
params: {
schedule,
iterations,
},
failure: response => {
me.lookup('grid').getStore().setData([]);
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
},
success: function(response) {
let schedules = response.result.data;
me.lookup('grid').getStore().setData(schedules);
},
});
},
scheduleChanged: function(field, value) {
this.lookup('simulateBtn').setDisabled(!value);
},
renderDate: function(value) {
let date = new Date(value*1000);
return date.toLocaleDateString();
},
renderTime: function(value) {
let date = new Date(value*1000);
return date.toLocaleTimeString();
},
init: function(view) {
let me = this;
if (view.schedule) {
me.lookup('schedule').setValue(view.schedule);
}
},
},
bodyPadding: 10,
modal: true,
resizable: false,
width: 600,
layout: 'fit',
items: [
{
xtype: 'inputpanel',
column1: [
{
xtype: 'pveCalendarEvent',
reference: 'schedule',
fieldLabel: gettext('Schedule'),
listeners: {
change: 'scheduleChanged',
},
},
{
xtype: 'proxmoxintegerfield',
reference: 'iterations',
fieldLabel: gettext('Iterations'),
minValue: 1,
maxValue: 100,
value: 10,
},
{
xtype: 'container',
layout: 'hbox',
items: [
{
xtype: 'box',
flex: 1,
},
{
xtype: 'button',
reference: 'simulateBtn',
text: gettext('Simulate'),
handler: 'simulate',
disabled: true,
},
],
},
],
column2: [
{
xtype: 'grid',
reference: 'grid',
emptyText: Proxmox.Utils.NoneText,
scrollable: true,
height: 300,
columns: [
{
text: gettext('Date'),
renderer: 'renderDate',
dataIndex: 'timestamp',
flex: 1,
},
{
text: gettext('Time'),
renderer: 'renderTime',
dataIndex: 'timestamp',
align: 'right',
flex: 1,
},
],
store: {
fields: ['timestamp'],
data: [],
sorter: 'timestamp',
},
},
],
},
],
buttons: [
{
text: gettext('Done'),
handler: 'close',
},
],
});