]>
Commit | Line | Data |
---|---|---|
1a70cd63 DM |
1 | Ext.define('PVE.CephCreateMon', { |
2 | extend: 'PVE.window.Edit', | |
3 | alias: ['widget.pveCephCreateMon'], | |
4 | ||
5 | subject: 'Ceph Monitor', | |
6 | ||
7 | showProgress: true, | |
8 | ||
9 | setNode: function(nodename) { | |
10 | var me = this; | |
11 | ||
12 | me.nodename = nodename; | |
13 | me.url = "/nodes/" + nodename + "/ceph/mon"; | |
14 | }, | |
15 | ||
16 | initComponent : function() { | |
17 | /*jslint confusion: true */ | |
18 | var me = this; | |
19 | ||
20 | if (!me.nodename) { | |
21 | throw "no node name specified"; | |
22 | } | |
23 | ||
24 | me.setNode(me.nodename); | |
25 | ||
26 | me.create = true; | |
27 | ||
28 | Ext.applyIf(me, { | |
29 | method: 'POST', | |
30 | items: [ | |
31 | { | |
32 | xtype: 'PVE.form.NodeSelector', | |
33 | submitValue: false, | |
34 | fieldLabel: gettext('Host'), | |
35 | selectCurNode: true, | |
36 | allowBlank: false, | |
37 | listeners: { | |
38 | change: function(f, value) { | |
39 | me.setNode(value); | |
40 | } | |
41 | } | |
42 | } | |
43 | ] | |
44 | }); | |
45 | ||
46 | me.callParent(); | |
47 | } | |
48 | }); | |
49 | ||
50 | Ext.define('PVE.node.CephMonList', { | |
51 | extend: 'Ext.grid.GridPanel', | |
52 | alias: ['widget.pveNodeCephMonList'], | |
53 | ||
54 | initComponent: function() { | |
55 | var me = this; | |
56 | ||
57 | var nodename = me.pveSelNode.data.node; | |
58 | if (!nodename) { | |
59 | throw "no node name specified"; | |
60 | } | |
61 | ||
62 | var sm = Ext.create('Ext.selection.RowModel', {}); | |
63 | ||
64 | var rstore = Ext.create('PVE.data.UpdateStore', { | |
65 | interval: 3000, | |
66 | storeid: 'ceph-mon-list', | |
67 | model: 'ceph-mon-list', | |
68 | proxy: { | |
69 | type: 'pve', | |
70 | url: "/api2/json/nodes/" + nodename + "/ceph/mon" | |
71 | } | |
72 | }); | |
73 | ||
74 | var store = Ext.create('PVE.data.DiffStore', { rstore: rstore }); | |
75 | ||
76 | PVE.Utils.monStoreErrors(me, rstore); | |
77 | ||
78 | var service_cmd = function(cmd) { | |
79 | var rec = sm.getSelection()[0]; | |
80 | if (!rec.data.host) { | |
81 | Ext.Msg.alert(gettext('Error'), "entry has no host"); | |
82 | return; | |
83 | } | |
84 | PVE.Utils.API2Request({ | |
85 | url: "/nodes/" + rec.data.host + "/ceph/" + cmd, | |
86 | method: 'POST', | |
87 | params: { service: "mon." + rec.data.name }, | |
88 | success: function(response, options) { | |
89 | var upid = response.result.data; | |
90 | var win = Ext.create('PVE.window.TaskProgress', { upid: upid }); | |
91 | win.show(); | |
92 | }, | |
93 | failure: function(response, opts) { | |
94 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
95 | } | |
96 | }); | |
97 | }; | |
98 | ||
99 | var start_btn = new PVE.button.Button({ | |
100 | text: gettext('Start'), | |
101 | selModel: sm, | |
102 | disabled: true, | |
103 | handler: function(){ | |
104 | service_cmd("start"); | |
105 | } | |
106 | }); | |
107 | ||
108 | var stop_btn = new PVE.button.Button({ | |
109 | text: gettext('Stop'), | |
110 | selModel: sm, | |
111 | disabled: true, | |
112 | handler: function(){ | |
113 | service_cmd("stop"); | |
114 | } | |
115 | }); | |
116 | ||
117 | var create_btn = new Ext.Button({ | |
118 | text: gettext('Create'), | |
119 | handler: function(){ | |
120 | var win = Ext.create('PVE.CephCreateMon', { | |
121 | nodename: nodename | |
122 | }); | |
123 | win.show(); | |
124 | } | |
125 | }); | |
126 | ||
127 | var remove_btn = new PVE.button.Button({ | |
128 | text: gettext('Remove'), | |
129 | selModel: sm, | |
130 | disabled: true, | |
131 | handler: function() { | |
132 | var rec = sm.getSelection()[0]; | |
133 | ||
134 | if (!rec.data.host) { | |
135 | Ext.Msg.alert(gettext('Error'), "entry has no host"); | |
136 | return; | |
137 | } | |
138 | ||
139 | PVE.Utils.API2Request({ | |
140 | url: "/nodes/" + rec.data.host + "/ceph/mon/" + | |
141 | rec.data.name, | |
142 | method: 'DELETE', | |
143 | success: function(response, options) { | |
144 | var upid = response.result.data; | |
145 | var win = Ext.create('PVE.window.TaskProgress', { upid: upid }); | |
146 | win.show(); | |
147 | }, | |
148 | failure: function(response, opts) { | |
149 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
150 | } | |
151 | }); | |
152 | } | |
153 | }); | |
154 | ||
155 | Ext.apply(me, { | |
156 | store: store, | |
157 | selModel: sm, | |
158 | stateful: false, | |
159 | tbar: [ start_btn, stop_btn, create_btn, remove_btn ], | |
160 | columns: [ | |
161 | { | |
162 | header: gettext('Name'), | |
163 | width: 50, | |
164 | sortable: true, | |
165 | renderer: function(v) { return "mon." + v; }, | |
166 | dataIndex: 'name' | |
167 | }, | |
168 | { | |
169 | header: gettext('Host'), | |
170 | width: 100, | |
171 | sortable: true, | |
172 | renderer: function(v) { | |
173 | return v || 'unknown'; | |
174 | }, | |
175 | dataIndex: 'host' | |
176 | }, | |
177 | { | |
178 | header: gettext('Quorum'), | |
179 | width: 50, | |
180 | sortable: false, | |
181 | renderer: PVE.Utils.format_boolean, | |
182 | dataIndex: 'quorum' | |
183 | }, | |
184 | { | |
185 | header: gettext('Address'), | |
186 | flex: 1, | |
187 | sortable: true, | |
188 | dataIndex: 'addr' | |
189 | } | |
190 | ], | |
191 | listeners: { | |
192 | show: rstore.startUpdate, | |
193 | hide: rstore.stopUpdate, | |
194 | destroy: rstore.stopUpdate | |
195 | } | |
196 | }); | |
197 | ||
198 | me.callParent(); | |
199 | } | |
200 | }, function() { | |
201 | ||
202 | Ext.define('ceph-mon-list', { | |
203 | extend: 'Ext.data.Model', | |
204 | fields: [ 'addr', 'name', 'rank', 'host', 'quorum' ], | |
205 | idProperty: 'name' | |
206 | }); | |
207 | }); |