]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/ceph/ServiceList.js
1 Ext
.define('PVE.CephCreateService', {
2 extend
: 'Proxmox.window.Edit',
3 xtype
: 'pveCephCreateService',
7 setNode: function(nodename
) {
10 me
.nodename
= nodename
;
11 me
.url
= "/nodes/" + nodename
+ "/ceph/" + me
.type
+ "/" + nodename
;
19 xtype
: 'pveNodeSelector',
21 fieldLabel
: gettext('Host'),
25 change: function(f
, value
) {
26 var me
= this.up('pveCephCreateService');
33 initComponent : function() {
37 throw "no node name specified";
41 throw "no type specified";
44 me
.setNode(me
.nodename
);
50 Ext
.define('PVE.node.CephServiceList', {
51 extend
: 'Ext.grid.GridPanel',
52 xtype
: 'pveNodeCephServiceList',
54 onlineHelp
: 'chapter_pveceph',
55 emptyText
: gettext('No such service configured.'),
59 // will be called when the store loads
60 storeLoadCallback
: Ext
.emptyFn
,
62 // if set to true, does shows the ceph install mask if needed
63 showCephInstallMask
: false,
66 xclass
: 'Ext.app.ViewController',
68 init: function(view
) {
69 if (view
.pveSelNode
) {
70 view
.nodename
= view
.pveSelNode
.data
.node
;
73 throw "no node name specified";
77 throw "no type specified";
80 view
.rstore
= Ext
.create('Proxmox.data.UpdateStore', {
84 storeid
: 'ceph-' + view
.type
+ '-list' + view
.nodename
,
85 model
: 'ceph-service-list',
88 url
: "/api2/json/nodes/" + view
.nodename
+ "/ceph/" + view
.type
92 view
.setStore(Ext
.create('Proxmox.data.DiffStore', {
94 sorters
: [{ property
: 'name' }]
97 if (view
.storeLoadCallback
) {
98 view
.rstore
.on('load', view
.storeLoadCallback
, this);
100 view
.on('destroy', view
.rstore
.stopUpdate
);
102 if (view
.showCephInstallMask
) {
103 var regex
= new RegExp("not (installed|initialized)", "i");
104 PVE
.Utils
.handleStoreErrorOrMask(view
, view
.rstore
, regex
, function(me
, error
) {
105 view
.rstore
.stopUpdate();
106 PVE
.Utils
.showCephInstallOrMask(view
.ownerCt
, error
.statusText
, view
.nodename
,
108 me
.mon(win
, 'cephInstallWindowClosed', function(){
109 view
.rstore
.startUpdate();
117 service_cmd: function(rec
, cmd
) {
118 var view
= this.getView();
119 if (!rec
.data
.host
) {
120 Ext
.Msg
.alert(gettext('Error'), "entry has no host");
123 Proxmox
.Utils
.API2Request({
124 url
: "/nodes/" + rec
.data
.host
+ "/ceph/" + cmd
,
126 params
: { service
: view
.type
+ '.' + rec
.data
.name
},
127 success: function(response
, options
) {
128 var upid
= response
.result
.data
;
129 var win
= Ext
.create('Proxmox.window.TaskProgress', {
131 taskDone: function() {
137 failure: function(response
, opts
) {
138 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
142 onChangeService: function(btn
) {
144 var view
= this.getView();
145 var cmd
= btn
.action
;
146 var rec
= view
.getSelection()[0];
147 me
.service_cmd(rec
, cmd
);
150 showSyslog: function() {
151 var view
= this.getView();
152 var rec
= view
.getSelection()[0];
153 var servicename
= 'ceph-' + view
.type
+ '@' + rec
.data
.name
;
154 var url
= "/api2/extjs/nodes/" + rec
.data
.host
+ "/syslog?service=" + encodeURIComponent(servicename
);
155 var win
= Ext
.create('Ext.window.Window', {
156 title
: gettext('Syslog') + ': ' + servicename
,
162 xtype
: 'proxmoxLogView',
164 log_select_timespan
: 1
170 onCreate: function() {
171 var view
= this.getView();
172 var win
= Ext
.create('PVE.CephCreateService', {
174 nodename
: view
.nodename
,
175 subject
: view
.getTitle(),
177 taskDone: function() {
186 xtype
: 'proxmoxButton',
187 text
: gettext('Start'),
188 iconCls
: 'fa fa-play',
191 enableFn: function(rec
) {
192 return rec
.data
.state
=== 'stopped' ||
193 rec
.data
.state
=== 'unknown';
195 handler
: 'onChangeService'
198 xtype
: 'proxmoxButton',
199 text
: gettext('Stop'),
200 iconCls
: 'fa fa-stop',
202 enableFn: function(rec
) {
203 return rec
.data
.state
!== 'stopped';
206 handler
: 'onChangeService'
209 xtype
: 'proxmoxButton',
210 text
: gettext('Restart'),
211 iconCls
: 'fa fa-refresh',
214 enableFn: function(rec
) {
215 return rec
.data
.state
!== 'stopped';
217 handler
: 'onChangeService'
221 text
: gettext('Create'),
222 reference
: 'createButton',
226 text
: gettext('Destroy'),
227 xtype
: 'proxmoxStdRemoveButton',
228 getUrl: function(rec
) {
229 var view
= this.up('grid');
230 if (!rec
.data
.host
) {
231 Ext
.Msg
.alert(gettext('Error'), "entry has no host");
234 return "/nodes/" + rec
.data
.host
+ "/ceph/" + view
.type
+ "/" + rec
.data
.name
;
236 callback: function(options
, success
, response
) {
237 var view
= this.up('grid');
239 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
242 var upid
= response
.result
.data
;
243 var win
= Ext
.create('Proxmox.window.TaskProgress', {
245 taskDone: function() {
254 xtype
: 'proxmoxButton',
255 text
: gettext('Syslog'),
257 handler
: 'showSyslog'
263 header
: gettext('Name'),
266 renderer: function(v
) {
267 return this.type
+ '.' + v
;
272 header
: gettext('Host'),
275 renderer: function(v
) {
276 return v
|| Proxmox
.Utils
.unknownText
;
281 header
: gettext('Status'),
287 header
: gettext('Address'),
290 renderer: function(v
) {
291 return v
|| Proxmox
.Utils
.unknownText
;
296 header
: gettext('Version'),
303 initComponent: function() {
306 if (me
.additionalColumns
) {
307 me
.columns
= me
.columns
.concat(me
.additionalColumns
);
315 Ext
.define('ceph-service-list', {
316 extend
: 'Ext.data.Model',
317 fields
: [ 'addr', 'name', 'rank', 'host', 'quorum', 'state',
318 'ceph_version', 'ceph_version_short',
319 { type
: 'string', name
: 'version', calculate: function(data
) {
320 return PVE
.Utils
.parse_ceph_version(data
);