]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/MetricServerView.js
ui: metrics: add server base edit window
[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
19 addInfluxDB: function() {
20 let me = this;
21 Ext.create(`PVE.dc.InfluxDBEdit`, {
22 url: `/api2/extjs/cluster/metricserver`,
23 autoShow: true,
24 listeners: {
25 destroy: () => me.reload(),
26 },
27 });
28 },
29
30 addGraphite: function() {
31 let me = this;
32 Ext.create(`PVE.dc.GraphiteEdit`, {
33 url: `/api2/extjs/cluster/metricserver`,
34 autoShow: true,
35 listeners: {
36 destroy: () => me.reload(),
37 },
38 });
39 },
40
41 editServer: function() {
42 let me = this;
43 let view = me.getView();
44 let selection = view.getSelection();
45 if (!selection || selection.length < 1) {
46 return;
47 }
48
49 let rec = selection[0];
50
51 let xtype = me.render_type(rec.data.type);
52 Ext.create(`PVE.dc.${xtype}Edit`, {
53 url: `/api2/extjs/cluster/metricserver/${rec.data.id}`,
54 serverid: rec.data.id,
55 autoShow: true,
56 listeners: {
57 destroy: () => me.reload(),
58 },
59 });
60 },
61
62 reload: function() {
63 this.getView().getStore().load();
64 },
65 },
66
67 store: {
68 autoLoad: true,
69 id: 'metricservers',
70 proxy: {
71 type: 'proxmox',
72 url: '/api2/json/cluster/metricserver',
73 },
74 },
75
76 columns: [
77 {
78 text: gettext('Name'),
79 flex: 2,
80 dataIndex: 'id',
81 },
82 {
83 text: gettext('Type'),
84 flex: 1,
85 dataIndex: 'type',
86 renderer: 'render_type',
87 },
88 {
89 text: gettext('Enabled'),
90 dataIndex: 'disable',
91 width: 100,
92 renderer: Proxmox.Utils.format_neg_boolean,
93 },
94 {
95 text: gettext('Server'),
96 width: 200,
97 dataIndex: 'server',
98 },
99 {
100 text: gettext('Port'),
101 width: 100,
102 dataIndex: 'port',
103 },
104 ],
105
106 tbar: [
107 {
108 text: gettext('Add'),
109 menu: [
110 {
111 text: 'Graphite',
112 handler: 'addGraphite',
113 },
114 {
115 text: 'InfluxDB',
116 handler: 'addInfluxDB',
117 },
118 ],
119 },
120 {
121 text: gettext('Edit'),
122 xtype: 'proxmoxButton',
123 handler: 'editServer',
124 disabled: true,
125 },
126 {
127 xtype: 'proxmoxStdRemoveButton',
128 baseurl: `/api2/extjs/cluster/metricserver`,
129 callback: 'reload',
130 },
131 ],
132
133 listeners: {
134 itemdblclick: 'editServer',
135 },
136
137 initComponent: function() {
138 var me = this;
139
140 me.callParent();
141
142 Proxmox.Utils.monStoreErrors(me, me.getStore());
143 },
144});
145
71f5bf0a 146Ext.define('PVE.dc.MetricServerBaseEdit', {
f257dcec
DC
147 extend: 'Proxmox.window.Edit',
148 mixins: ['Proxmox.Mixin.CBind'],
149
f257dcec
DC
150 cbindData: function() {
151 let me = this;
152 me.isCreate = !me.serverid;
153 me.serverid = me.serverid || "";
154 me.method = me.isCreate ? 'POST' : 'PUT';
155 if (!me.isCreate) {
71f5bf0a 156 me.subject = `${me.subject}: ${me.serverid}`;
f257dcec
DC
157 }
158 return {};
159 },
160
71f5bf0a
TL
161 initComponent: function() {
162 let me = this;
163
164 me.callParent();
165
166 if (me.serverid) {
167 me.load({
168 success: function(response, options) {
169 let values = response.result.data;
170 values.enable = !values.disable;
171 me.down('inputpanel').setValues(values);
172 },
173 });
174 }
175 },
176});
177
178Ext.define('PVE.dc.InfluxDBEdit', {
179 extend: 'PVE.dc.MetricServerBaseEdit',
180 mixins: ['Proxmox.Mixin.CBind'],
181
182 subject: 'InfluxDB',
183
f257dcec
DC
184 items: [
185 {
186 xtype: 'inputpanel',
187
188 onGetValues: function(values) {
189 values.disable = values.enable ? 0 : 1;
190 delete values.enable;
191 return values;
192 },
193
194 column1: [
195 {
196 xtype: 'hidden',
197 name: 'type',
198 value: 'influxdb',
199 cbind: {
200 submitValue: '{isCreate}',
201 },
202 },
203 {
204 fieldLabel: gettext('Name'),
205 xtype: 'pmxDisplayEditField',
206 name: 'id',
207 allowBlank: false,
208 cbind: {
209 editable: '{isCreate}',
210 value: '{serverid}',
211 },
212 },
213 {
214 fieldLabel: gettext('Enabled'),
215 xtype: 'checkbox',
216 inputValue: 1,
217 uncheckedValue: 0,
218 checked: true,
219 name: 'enable',
220 },
221 ],
222
223 column2: [
224 {
225 fieldLabel: gettext('Server'),
226 xtype: 'proxmoxtextfield',
227 name: 'server',
228 allowBlank: false,
229 },
230 {
231 fieldLabel: gettext('Port'),
232 xtype: 'proxmoxintegerfield',
233 minValue: 1,
234 maximum: 65536,
235 name: 'port',
236 allowBlank: false,
237 },
238 ],
239
240 advancedColumn1: [], // has to exists to render any advanced columns
241
242 advancedColumn2: [
243 {
244 fieldLabel: 'MTU',
245 xtype: 'proxmoxintegerfield',
246 name: 'mtu',
247 minValue: 1,
248 emptyText: '1500',
249 submitEmpty: false,
250 cbind: {
251 deleteEmpty: '{!isCreate}',
252 },
253 },
254 ],
255 },
256 ],
f257dcec
DC
257});
258
259Ext.define('PVE.dc.GraphiteEdit', {
71f5bf0a 260 extend: 'PVE.dc.MetricServerBaseEdit',
f257dcec
DC
261 mixins: ['Proxmox.Mixin.CBind'],
262
263 subject: 'Graphite',
264
f257dcec
DC
265 items: [
266 {
267 xtype: 'inputpanel',
268
269 onGetValues: function(values) {
270 values.disable = values.enable ? 0 : 1;
271 delete values.enable;
272 return values;
273 },
274
275 column1: [
276 {
277 xtype: 'hidden',
278 name: 'type',
279 value: 'graphite',
280 cbind: {
281 submitValue: '{isCreate}',
282 },
283 },
284 {
285 fieldLabel: gettext('Name'),
286 xtype: 'pmxDisplayEditField',
287 name: 'id',
288 allowBlank: false,
289 cbind: {
290 editable: '{isCreate}',
291 value: '{serverid}',
292 },
293 },
294 {
295 fieldLabel: gettext('Enabled'),
296 xtype: 'checkbox',
297 inputValue: 1,
298 uncheckedValue: 0,
299 checked: true,
300 name: 'enable',
301 },
302 ],
303
304 column2: [
305 {
306 fieldLabel: gettext('Server'),
307 xtype: 'proxmoxtextfield',
308 name: 'server',
309 allowBlank: false,
310 },
311 {
312 fieldLabel: gettext('Port'),
313 xtype: 'proxmoxintegerfield',
314 minimum: 1,
315 maximum: 65536,
316 name: 'port',
317 allowBlank: false,
318 },
319 {
320 fieldLabel: gettext('Path'),
321 xtype: 'proxmoxtextfield',
322 emptyText: 'proxmox',
323 name: 'path',
324 cbind: {
325 deleteEmpty: '{!isCreate}',
326 },
327 },
328 ],
329
330 advancedColumn1: [
331 {
332 fieldLabel: gettext('Protocol'),
333 xtype: 'proxmoxKVComboBox',
334 name: 'proto',
335 value: '__default__',
336 cbind: {
337 deleteEmpty: '{!isCreate}',
338 },
339 comboItems: [
340 ['__default__', 'UDP'],
341 ['tcp', 'TCP'],
342 ],
343 listeners: {
344 change: function(field, value) {
345 let me = this;
346 me.up('inputpanel').down('field[name=timeout]').setDisabled(value !== 'tcp');
347 me.up('inputpanel').down('field[name=mtu]').setDisabled(value === 'tcp');
348 },
349 },
350 },
351 ],
352
353 advancedColumn2: [
354 {
355 fieldLabel: 'MTU',
356 xtype: 'proxmoxintegerfield',
357 name: 'mtu',
358 minimum: 1,
359 emptyText: '1500',
360 submitEmpty: false,
361 cbind: {
362 deleteEmpty: '{!isCreate}',
363 },
364 },
365 {
366 fieldLabel: gettext('TCP Timeout'),
367 xtype: 'proxmoxintegerfield',
368 name: 'timeout',
369 disabled: true,
370 cbind: {
371 deleteEmpty: '{!isCreate}',
372 },
373 minValue: 1,
374 emptyText: 1,
375 },
376 ],
377 },
378 ],
f257dcec 379});