]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/MetricServerView.js
ui: metrics: avoid repeated querys of the view
[pve-manager.git] / www / manager6 / dc / MetricServerView.js
CommitLineData
f257dcec
DC
1Ext.define('PVE.dc.MetricServerView', {
2 extend: 'Ext.grid.Panel',
3 alias: ['widget.pveMetricServerView'],
4
5 stateful: true,
6 stateId: 'grid-metricserver',
7
8 controller: {
9 xclass: 'Ext.app.ViewController',
10
11 render_type: function(value) {
12 switch (value) {
13 case 'influxdb': return "InfluxDB";
14 case 'graphite': return "Graphite";
15 default: return Proxmox.Utils.unknownText;
16 }
17 },
18
d57f8d94 19 editWindow: function(xtype, id) {
f257dcec 20 let me = this;
d57f8d94
TL
21 Ext.create(`PVE.dc.${xtype}Edit`, {
22 serverid: id,
f257dcec
DC
23 autoShow: true,
24 listeners: {
25 destroy: () => me.reload(),
26 },
27 });
28 },
29
d57f8d94
TL
30 addServer: function(button) {
31 this.editWindow(button.text);
f257dcec
DC
32 },
33
34 editServer: function() {
35 let me = this;
36 let view = me.getView();
37 let selection = view.getSelection();
38 if (!selection || selection.length < 1) {
39 return;
40 }
41
d57f8d94 42 let cfg = selection[0].data;
f257dcec 43
d57f8d94
TL
44 let xtype = me.render_type(cfg.type);
45 me.editWindow(xtype, cfg.id);
f257dcec
DC
46 },
47
48 reload: function() {
49 this.getView().getStore().load();
50 },
51 },
52
53 store: {
54 autoLoad: true,
55 id: 'metricservers',
56 proxy: {
57 type: 'proxmox',
d57f8d94 58 url: '/api2/json/cluster/metrics/server',
f257dcec
DC
59 },
60 },
61
62 columns: [
63 {
64 text: gettext('Name'),
65 flex: 2,
66 dataIndex: 'id',
67 },
68 {
69 text: gettext('Type'),
70 flex: 1,
71 dataIndex: 'type',
72 renderer: 'render_type',
73 },
74 {
75 text: gettext('Enabled'),
76 dataIndex: 'disable',
77 width: 100,
78 renderer: Proxmox.Utils.format_neg_boolean,
79 },
80 {
81 text: gettext('Server'),
82 width: 200,
83 dataIndex: 'server',
84 },
85 {
86 text: gettext('Port'),
87 width: 100,
88 dataIndex: 'port',
89 },
90 ],
91
92 tbar: [
93 {
94 text: gettext('Add'),
95 menu: [
96 {
97 text: 'Graphite',
7ba63836 98 iconCls: 'fa fa-fw fa-bar-chart',
d57f8d94 99 handler: 'addServer',
f257dcec
DC
100 },
101 {
102 text: 'InfluxDB',
7ba63836 103 iconCls: 'fa fa-fw fa-bar-chart',
d57f8d94 104 handler: 'addServer',
f257dcec
DC
105 },
106 ],
107 },
108 {
109 text: gettext('Edit'),
110 xtype: 'proxmoxButton',
111 handler: 'editServer',
112 disabled: true,
113 },
114 {
115 xtype: 'proxmoxStdRemoveButton',
d57f8d94 116 baseurl: `/api2/extjs/cluster/metrics/server`,
f257dcec
DC
117 callback: 'reload',
118 },
119 ],
120
121 listeners: {
122 itemdblclick: 'editServer',
123 },
124
125 initComponent: function() {
126 var me = this;
127
128 me.callParent();
129
130 Proxmox.Utils.monStoreErrors(me, me.getStore());
131 },
132});
133
71f5bf0a 134Ext.define('PVE.dc.MetricServerBaseEdit', {
f257dcec
DC
135 extend: 'Proxmox.window.Edit',
136 mixins: ['Proxmox.Mixin.CBind'],
137
f257dcec
DC
138 cbindData: function() {
139 let me = this;
140 me.isCreate = !me.serverid;
141 me.serverid = me.serverid || "";
d57f8d94 142 me.url = `/api2/extjs/cluster/metrics/server/${me.serverid}`;
f257dcec
DC
143 me.method = me.isCreate ? 'POST' : 'PUT';
144 if (!me.isCreate) {
71f5bf0a 145 me.subject = `${me.subject}: ${me.serverid}`;
f257dcec
DC
146 }
147 return {};
148 },
149
d57f8d94
TL
150 submitUrl: function(url, values) {
151 return this.isCreate ? `${url}/${values.id}` : url;
152 },
153
71f5bf0a
TL
154 initComponent: function() {
155 let me = this;
156
157 me.callParent();
158
159 if (me.serverid) {
160 me.load({
161 success: function(response, options) {
162 let values = response.result.data;
163 values.enable = !values.disable;
164 me.down('inputpanel').setValues(values);
165 },
166 });
167 }
168 },
169});
170
171Ext.define('PVE.dc.InfluxDBEdit', {
172 extend: 'PVE.dc.MetricServerBaseEdit',
173 mixins: ['Proxmox.Mixin.CBind'],
174
641105c2
DC
175 onlineHelp: 'metric_server_influxdb',
176
71f5bf0a
TL
177 subject: 'InfluxDB',
178
3ebcbbc5
DC
179 cbindData: function() {
180 let me = this;
181 me.callParent();
182 me.tokenEmptyText = me.isCreate ? '' : gettext('unchanged');
183 return {};
184 },
185
f257dcec
DC
186 items: [
187 {
188 xtype: 'inputpanel',
189
190 onGetValues: function(values) {
191 values.disable = values.enable ? 0 : 1;
192 delete values.enable;
193 return values;
194 },
195
196 column1: [
197 {
198 xtype: 'hidden',
199 name: 'type',
200 value: 'influxdb',
201 cbind: {
202 submitValue: '{isCreate}',
203 },
204 },
205 {
f257dcec
DC
206 xtype: 'pmxDisplayEditField',
207 name: 'id',
eb594f5c 208 fieldLabel: gettext('Name'),
f257dcec
DC
209 allowBlank: false,
210 cbind: {
211 editable: '{isCreate}',
212 value: '{serverid}',
213 },
214 },
1eb6d2bf
TL
215 {
216 xtype: 'proxmoxtextfield',
217 name: 'server',
218 fieldLabel: gettext('Server'),
219 allowBlank: false,
220 },
3ebcbbc5
DC
221 {
222 xtype: 'proxmoxintegerfield',
223 name: 'port',
224 fieldLabel: gettext('Port'),
225 value: 8089,
226 minValue: 1,
227 maximum: 65536,
228 allowBlank: false,
229 },
230 {
231 xtype: 'proxmoxKVComboBox',
232 name: 'influxdbproto',
233 fieldLabel: gettext('Protocol'),
234 value: '__default__',
235 cbind: {
236 deleteEmpty: '{!isCreate}',
237 },
238 comboItems: [
239 ['__default__', 'UDP'],
240 ['http', 'HTTP'],
241 ['https', 'HTTPS'],
242 ],
243 listeners: {
244 change: function(field, value) {
245 let me = this;
f6717dfc 246 let view = me.up('inputpanel');
3ebcbbc5 247 let isUdp = value !== 'http' && value !== 'https';
f6717dfc
TL
248 view.down('field[name=organization]').setDisabled(isUdp);
249 view.down('field[name=bucket]').setDisabled(isUdp);
250 view.down('field[name=token]').setDisabled(isUdp);
251 view.down('field[name=api-path-prefix]').setDisabled(isUdp);
252 view.down('field[name=mtu]').setDisabled(!isUdp);
253 view.down('field[name=timeout]').setDisabled(isUdp);
254 view.down('field[name=max-body-size]').setDisabled(isUdp);
3ebcbbc5
DC
255 },
256 },
257 },
1eb6d2bf
TL
258 ],
259
260 column2: [
f257dcec 261 {
f257dcec 262 xtype: 'checkbox',
eb594f5c
TL
263 name: 'enable',
264 fieldLabel: gettext('Enabled'),
f257dcec
DC
265 inputValue: 1,
266 uncheckedValue: 0,
267 checked: true,
f257dcec 268 },
3ebcbbc5
DC
269 {
270 xtype: 'proxmoxtextfield',
271 name: 'organization',
272 fieldLabel: gettext('Organization'),
273 emptyText: 'proxmox',
274 disabled: true,
275 cbind: {
276 deleteEmpty: '{!isCreate}',
277 },
278 },
279 {
280 xtype: 'proxmoxtextfield',
281 name: 'bucket',
282 fieldLabel: gettext('Bucket'),
283 emptyText: 'proxmox',
284 disabled: true,
285 cbind: {
286 deleteEmpty: '{!isCreate}',
287 },
288 },
289 {
290 xtype: 'proxmoxtextfield',
291 name: 'token',
292 fieldLabel: gettext('Token'),
293 disabled: true,
294 allowBlank: true,
295 deleteEmpty: false,
296 submitEmpty: false,
297 cbind: {
298 disabled: '{!isCreate}',
299 emptyText: '{tokenEmptyText}',
300 },
301 },
302 ],
303
304 advancedColumn1: [
c69faba3
TL
305 {
306 xtype: 'proxmoxtextfield',
307 name: 'api-path-prefix',
308 fieldLabel: gettext('API Path Prefix'),
309 allowBlank: true,
310 disabled: true,
311 cbind: {
312 deleteEmpty: '{!isCreate}',
313 },
314 },
f257dcec 315 {
f257dcec 316 xtype: 'proxmoxintegerfield',
3ebcbbc5
DC
317 name: 'timeout',
318 fieldLabel: gettext('Timeout (s)'),
319 disabled: true,
320 cbind: {
321 deleteEmpty: '{!isCreate}',
322 },
f257dcec 323 minValue: 1,
3ebcbbc5 324 emptyText: 1,
f257dcec
DC
325 },
326 ],
327
f257dcec 328 advancedColumn2: [
3ebcbbc5
DC
329 {
330 xtype: 'proxmoxintegerfield',
331 name: 'max-body-size',
332 fieldLabel: gettext('Batch Size (b)'),
333 minValue: 1,
334 emptyText: '25000000',
335 submitEmpty: false,
336 cbind: {
337 deleteEmpty: '{!isCreate}',
338 },
339 },
f257dcec 340 {
f257dcec
DC
341 xtype: 'proxmoxintegerfield',
342 name: 'mtu',
eb594f5c 343 fieldLabel: 'MTU',
f257dcec
DC
344 minValue: 1,
345 emptyText: '1500',
346 submitEmpty: false,
347 cbind: {
348 deleteEmpty: '{!isCreate}',
349 },
350 },
351 ],
352 },
353 ],
f257dcec
DC
354});
355
356Ext.define('PVE.dc.GraphiteEdit', {
71f5bf0a 357 extend: 'PVE.dc.MetricServerBaseEdit',
f257dcec
DC
358 mixins: ['Proxmox.Mixin.CBind'],
359
641105c2
DC
360 onlineHelp: 'metric_server_graphite',
361
f257dcec
DC
362 subject: 'Graphite',
363
f257dcec
DC
364 items: [
365 {
366 xtype: 'inputpanel',
367
368 onGetValues: function(values) {
369 values.disable = values.enable ? 0 : 1;
370 delete values.enable;
371 return values;
372 },
373
374 column1: [
375 {
376 xtype: 'hidden',
377 name: 'type',
378 value: 'graphite',
379 cbind: {
380 submitValue: '{isCreate}',
381 },
382 },
383 {
f257dcec
DC
384 xtype: 'pmxDisplayEditField',
385 name: 'id',
eb594f5c 386 fieldLabel: gettext('Name'),
f257dcec
DC
387 allowBlank: false,
388 cbind: {
389 editable: '{isCreate}',
390 value: '{serverid}',
391 },
392 },
1eb6d2bf
TL
393 {
394 xtype: 'proxmoxtextfield',
395 name: 'server',
396 fieldLabel: gettext('Server'),
397 allowBlank: false,
398 },
399 ],
400
401 column2: [
f257dcec 402 {
f257dcec 403 xtype: 'checkbox',
eb594f5c
TL
404 name: 'enable',
405 fieldLabel: gettext('Enabled'),
f257dcec
DC
406 inputValue: 1,
407 uncheckedValue: 0,
408 checked: true,
f257dcec 409 },
f257dcec 410 {
f257dcec 411 xtype: 'proxmoxintegerfield',
eb594f5c
TL
412 name: 'port',
413 fieldLabel: gettext('Port'),
9f4e985d 414 value: 2003,
f257dcec
DC
415 minimum: 1,
416 maximum: 65536,
f257dcec
DC
417 allowBlank: false,
418 },
419 {
420 fieldLabel: gettext('Path'),
421 xtype: 'proxmoxtextfield',
422 emptyText: 'proxmox',
423 name: 'path',
424 cbind: {
425 deleteEmpty: '{!isCreate}',
426 },
427 },
428 ],
429
430 advancedColumn1: [
431 {
f257dcec
DC
432 xtype: 'proxmoxKVComboBox',
433 name: 'proto',
eb594f5c 434 fieldLabel: gettext('Protocol'),
f257dcec
DC
435 value: '__default__',
436 cbind: {
437 deleteEmpty: '{!isCreate}',
438 },
439 comboItems: [
440 ['__default__', 'UDP'],
441 ['tcp', 'TCP'],
442 ],
443 listeners: {
444 change: function(field, value) {
445 let me = this;
446 me.up('inputpanel').down('field[name=timeout]').setDisabled(value !== 'tcp');
447 me.up('inputpanel').down('field[name=mtu]').setDisabled(value === 'tcp');
448 },
449 },
450 },
451 ],
452
453 advancedColumn2: [
454 {
f257dcec
DC
455 xtype: 'proxmoxintegerfield',
456 name: 'mtu',
eb594f5c 457 fieldLabel: 'MTU',
f257dcec
DC
458 minimum: 1,
459 emptyText: '1500',
460 submitEmpty: false,
461 cbind: {
462 deleteEmpty: '{!isCreate}',
463 },
464 },
465 {
f257dcec
DC
466 xtype: 'proxmoxintegerfield',
467 name: 'timeout',
eb594f5c 468 fieldLabel: gettext('TCP Timeout'),
f257dcec
DC
469 disabled: true,
470 cbind: {
471 deleteEmpty: '{!isCreate}',
472 },
473 minValue: 1,
474 emptyText: 1,
475 },
476 ],
477 },
478 ],
f257dcec 479});