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