]>
Commit | Line | Data |
---|---|---|
f257dcec DC |
1 | Ext.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 | 146 | Ext.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 | ||
178 | Ext.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 | ||
259 | Ext.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 | }); |