]>
git.proxmox.com Git - proxmox-backup.git/blob - www/window/TrafficControlEdit.js
caf79b5799d9c4e416e6bf77ab1cd335f6adf55f
1 Ext
.define('PBS.window.TrafficControlEdit', {
2 extend
: 'Proxmox.window.Edit',
3 alias
: 'widget.pbsTrafficControlEdit',
4 mixins
: ['Proxmox.Mixin.CBind'],
6 onlineHelp
: 'sysadmin_traffic_control',
11 subject
: gettext('Traffic Control Rule'),
13 fieldDefaults
: { labelWidth
: 120 },
15 cbindData: function(initialConfig
) {
18 let baseurl
= '/api2/extjs/config/traffic-control';
19 let name
= initialConfig
.name
;
22 me
.url
= name
? `${baseurl}/${name}` : baseurl
;
23 me
.method
= name
? 'PUT' : 'POST';
28 xclass
: 'Ext.app.ViewController',
30 weekdays
: ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'],
32 dowChanged: function(field
, value
) {
34 let record
= field
.getWidgetRecord();
35 if (record
=== undefined) {
36 // this is sometimes called before a record/column is initialized
39 let col
= field
.getWidgetColumn();
40 record
.set(col
.dataIndex
, value
);
43 me
.updateTimeframeField();
46 timeChanged: function(field
, value
) {
51 let record
= field
.getWidgetRecord();
52 if (record
=== undefined) {
53 // this is sometimes called before a record/column is initialized
56 let col
= field
.getWidgetColumn();
57 let hours
= value
.getHours().toString().padStart(2, '0');
58 let minutes
= value
.getMinutes().toString().padStart(2, '0');
59 record
.set(col
.dataIndex
, `${hours}:${minutes}`);
62 me
.updateTimeframeField();
65 addTimeframe: function() {
67 me
.lookup('timeframes').getStore().add({
79 me
.updateTimeframeField();
82 updateTimeframeField: function() {
86 me
.lookup('timeframes').getStore().each((rec
) => {
88 let days
= me
.weekdays
.filter(day
=> rec
.data
[day
]);
89 if (days
.length
< 7 && days
.length
> 0) {
90 timeframe
+= days
.join(',') + ' ';
92 let { start
, end
} = rec
.data
;
94 timeframe
+= `${start}-${end}`;
95 timeframes
.push(timeframe
);
98 let field
= me
.lookup('timeframe');
99 field
.suspendEvent('change');
100 field
.setValue(timeframes
.join(';'));
101 field
.resumeEvent('change');
104 removeTimeFrame: function(field
) {
106 let record
= field
.getWidgetRecord();
107 if (record
=== undefined) {
108 // this is sometimes called before a record/column is initialized
112 me
.lookup('timeframes').getStore().remove(record
);
113 me
.updateTimeframeField();
116 parseTimeframe: function(timeframe
) {
118 let [, days
, start
, end
] = /^(?:(\S*)\s+)?([0-9:]+)-([0-9:]+)$/.exec(timeframe
) || [];
133 days
= days
.split(',');
134 days
.forEach((day
) => {
139 if (me
.weekdays
.indexOf(day
) !== -1) {
142 // we have a range 'xxx..yyy'
143 let [startDay
, endDay
] = day
.split('..');
144 let startIdx
= me
.weekdays
.indexOf(startDay
);
145 let endIdx
= me
.weekdays
.indexOf(endDay
);
147 if (endIdx
< startIdx
) {
148 endIdx
+= me
.weekdays
.length
;
151 for (let dayIdx
= startIdx
; dayIdx
<= endIdx
; dayIdx
++) {
152 let curDay
= me
.weekdays
[dayIdx
%me
.weekdays
.length
];
153 if (!record
[curDay
]) {
154 record
[curDay
] = true;
163 setGridData: function(field
, value
) {
169 value
= value
.split(';');
170 let records
= value
.map((timeframe
) => me
.parseTimeframe(timeframe
));
171 me
.lookup('timeframes').getStore().setData(records
);
176 change
: 'dowChanged',
179 change
: 'timeChanged',
182 click
: 'removeTimeFrame',
184 'field[name=timeframe]': {
185 change
: 'setGridData',
192 onGetValues: function(values
) {
194 let isCreate
= me
.up('window').isCreate
;
196 if (!values
['network-select']) {
197 values
.network
= '0.0.0.0/0';
198 } else if (values
.network
) {
199 values
.network
= values
.network
.split(/\s*,\s*/);
202 if ('timeframe' in values
&& !values
.timeframe
) {
203 delete values
.timeframe
;
205 if (values
.timeframe
&& !Ext
.isArray(values
.timeframe
)) {
206 let timeframe
= [], seen
= {};
207 values
.timeframe
.split(';').forEach(tf
=> {
213 values
.timeframe
= timeframe
;
216 delete values
['network-select'];
219 PBS
.Utils
.delete_if_default(values
, 'timeframe');
220 PBS
.Utils
.delete_if_default(values
, 'rate-in');
221 PBS
.Utils
.delete_if_default(values
, 'rate-out');
222 PBS
.Utils
.delete_if_default(values
, 'burst-in');
223 PBS
.Utils
.delete_if_default(values
, 'burst-out');
224 if (typeof values
.delete === 'string') {
225 values
.delete = values
.delete.split(',');
233 xtype
: 'pmxDisplayEditField',
235 fieldLabel
: gettext('Name'),
236 renderer
: Ext
.htmlEncode
,
240 editable
: '{isCreate}',
244 xtype
: 'pmxBandwidthField',
245 fieldLabel
: gettext('Rate In'),
249 xtype
: 'pmxBandwidthField',
250 fieldLabel
: gettext('Rate Out'),
257 xtype
: 'proxmoxtextfield',
260 deleteEmpty
: '{!isCreate}',
262 fieldLabel
: gettext('Comment'),
265 xtype
: 'pmxBandwidthField',
266 fieldLabel
: gettext('Burst In'),
270 xtype
: 'pmxBandwidthField',
271 fieldLabel
: gettext('Burst Out'),
278 xtype
: 'proxmoxtextfield',
279 fieldLabel
: gettext('Network(s)'),
281 emptyText
: gettext('0.0.0.0/0 (Apply on all Networks)'),
284 'data-qtip': gettext('A comma-separated list of networks to apply the (shared) limit.'),
289 xtype
: 'displayfield',
290 fieldLabel
: gettext('Timeframes'),
293 xtype
: 'fieldcontainer',
299 reference
: 'timeframes',
301 fields
: ['start', 'end', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'],
306 text
: gettext('Time Start'),
307 xtype
: 'widgetcolumn',
318 text
: gettext('Time End'),
319 xtype
: 'widgetcolumn',
331 text
: gettext('Mon'),
332 xtype
: 'widgetcolumn',
341 text
: gettext('Tue'),
342 xtype
: 'widgetcolumn',
351 text
: gettext('Wed'),
352 xtype
: 'widgetcolumn',
361 text
: gettext('Thu'),
362 xtype
: 'widgetcolumn',
371 text
: gettext('Fri'),
372 xtype
: 'widgetcolumn',
381 text
: gettext('Sat'),
382 xtype
: 'widgetcolumn',
391 text
: gettext('Sun'),
392 xtype
: 'widgetcolumn',
401 xtype
: 'widgetcolumn',
405 iconCls
: 'fa fa-trash-o',
414 text
: gettext('Add'),
415 iconCls
: 'fa fa-plus-circle',
416 handler
: 'addTimeframe',
420 reference
: 'timeframe',
426 initComponent: function() {
431 success: function(response
) {
432 let data
= response
.result
.data
;
433 if (data
.network
?.length
=== 1 && data
.network
[0] === '0.0.0.0/0') {
434 data
['network-select'] = 'all';
437 data
['network-select'] = 'limit';
440 if (Ext
.isArray(data
.timeframe
)) {
441 data
.timeframe
= data
.timeframe
.join(';');