]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/ceph/Monitor.js
copy ceph/Monitor.js from manager to manager6
[pve-manager.git] / www / manager6 / ceph / Monitor.js
CommitLineData
1a70cd63
DM
1Ext.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
50Ext.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});