]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/Monitor.js
use UpdateStore from widget toolkit
[pve-manager.git] / www / manager6 / ceph / Monitor.js
1 Ext.define('PVE.CephCreateMon', {
2 extend: 'PVE.window.Edit',
3 alias: ['widget.pveCephCreateMon'],
4
5 subject: 'Ceph Monitor/Manager',
6 onlineHelp: 'pve_ceph_monitors',
7
8 showProgress: true,
9
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() {
18
19 var me = this;
20
21 if (!me.nodename) {
22 throw "no node name specified";
23 }
24
25 me.setNode(me.nodename);
26
27 me.isCreate = true;
28
29 Ext.applyIf(me, {
30 method: 'POST',
31 items: [
32 {
33 xtype: 'pveNodeSelector',
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
51 Ext.define('PVE.node.CephMonList', {
52 extend: 'Ext.grid.GridPanel',
53 alias: ['widget.pveNodeCephMonList'],
54
55 onlineHelp: 'chapter_pveceph',
56
57 stateful: true,
58 stateId: 'grid-ceph-monitor',
59
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
70 var rstore = Ext.create('Proxmox.data.UpdateStore', {
71 interval: 3000,
72 storeid: 'ceph-mon-list' + nodename,
73 model: 'ceph-mon-list',
74 proxy: {
75 type: 'pve',
76 url: "/api2/json/nodes/" + nodename + "/ceph/mon"
77 }
78 });
79
80 var store = Ext.create('PVE.data.DiffStore', {
81 rstore: rstore,
82 sorters: [{ property: 'name'}]
83 });
84
85 PVE.Utils.monStoreErrors(me, rstore);
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 }
93 PVE.Utils.API2Request({
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;
99 var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
100 win.show();
101 },
102 failure: function(response, opts) {
103 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
104 }
105 });
106 };
107
108 var start_btn = new PVE.button.Button({
109 text: gettext('Start'),
110 selModel: sm,
111 disabled: true,
112 handler: function(){
113 service_cmd("start");
114 }
115 });
116
117 var stop_btn = new PVE.button.Button({
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
136 var remove_btn = new PVE.button.Button({
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
148 PVE.Utils.API2Request({
149 url: "/nodes/" + rec.data.host + "/ceph/mon/" +
150 rec.data.name,
151 method: 'DELETE',
152 success: function(response, options) {
153 var upid = response.result.data;
154 var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
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,
167 tbar: [ start_btn, stop_btn, create_btn, remove_btn ],
168 columns: [
169 {
170 header: gettext('Name'),
171 width: 100,
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'),
187 width: 70,
188 sortable: false,
189 renderer: PVE.Utils.format_boolean,
190 dataIndex: 'quorum'
191 },
192 {
193 header: gettext('Address'),
194 flex: 1,
195 sortable: true,
196 dataIndex: 'addr'
197 }
198 ],
199 listeners: {
200 activate: rstore.startUpdate,
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 });