]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/ceph/FS.js
ui: ceph/osd: only show at max 5 digits after decimal point for weight
[pve-manager.git] / www / manager6 / ceph / FS.js
CommitLineData
563ed5ee
TL
1/*jslint confusion: true */
2Ext.define('PVE.CephCreateFS', {
3 extend: 'Proxmox.window.Edit',
4 alias: 'widget.pveCephCreateFS',
5
6 showTaskViewer: true,
e8c0ec03 7 onlineHelp: 'pveceph_fs_create',
563ed5ee
TL
8
9 subject: 'Ceph FS',
10 isCreate: true,
11 method: 'POST',
12
13 setFSName: function(fsName) {
14 var me = this;
15
16 if (fsName === '' || fsName === undefined) {
17 fsName = 'cephfs';
18 }
19
20 me.url = "/nodes/" + me.nodename + "/ceph/fs/" + fsName;
21 },
22
23 items: [
24 {
25 xtype: 'textfield',
26 fieldLabel: gettext('Name'),
27 name: 'name',
28 value: 'cephfs',
29 listeners: {
30 change: function(f, value) {
31 this.up('pveCephCreateFS').setFSName(value);
32 }
33 },
34 submitValue: false, // already encoded in apicall URL
35 emptyText: 'cephfs'
36 },
37 {
38 xtype: 'proxmoxintegerfield',
c5a0a1e4 39 fieldLabel: 'Placement Groups',
563ed5ee 40 name: 'pg_num',
6ad70a2b
TL
41 value: 128,
42 emptyText: 128,
563ed5ee
TL
43 minValue: 8,
44 maxValue: 32768,
45 allowBlank: false
46 },
47 {
48 xtype: 'proxmoxcheckbox',
49 fieldLabel: gettext('Add Storage'),
50 value: true,
c5a0a1e4 51 name: 'add-storage'
563ed5ee
TL
52 }
53 ],
54
55 initComponent : function() {
56 var me = this;
57
58 if (!me.nodename) {
59 throw "no node name specified";
60 }
61 me.setFSName();
62
63 me.callParent();
64 }
65});
66
563ed5ee
TL
67Ext.define('PVE.NodeCephFSPanel', {
68 extend: 'Ext.panel.Panel',
69 xtype: 'pveNodeCephFSPanel',
70 mixins: ['Proxmox.Mixin.CBind'],
71
a9d47b2b 72 title: gettext('CephFS'),
e8c0ec03 73 onlineHelp: 'pveceph_fs',
563ed5ee
TL
74
75 border: false,
76 defaults: {
77 border: false,
78 cbind: {
79 nodename: '{nodename}'
80 }
81 },
82
a9d47b2b
TL
83 viewModel: {
84 parent: null,
85 data: {
86 cephfsConfigured: false,
87 mdsCount: 0
88 },
89 formulas: {
90 canCreateFS: function(get) {
91 return (!get('cephfsConfigured') && get('mdsCount') > 0);
92 }
93 }
94 },
95
563ed5ee
TL
96 items: [
97 {
98 xtype: 'grid',
a9d47b2b 99 emptyText: Ext.String.format(gettext('No {0} configured.'), 'CephFS'),
563ed5ee
TL
100 controller: {
101 xclass: 'Ext.app.ViewController',
102
103 init: function(view) {
104 view.rstore = Ext.create('Proxmox.data.UpdateStore', {
105 autoLoad: true,
106 xtype: 'update',
107 interval: 5 * 1000,
108 autoStart: true,
109 storeid: 'pve-ceph-fs',
410f2cb0
TM
110 proxy: {
111 type: 'proxmox',
112 url: '/api2/json/nodes/' + view.nodename + '/ceph/fs'
113 },
563ed5ee
TL
114 model: 'pve-ceph-fs'
115 });
116 view.setStore(Ext.create('Proxmox.data.DiffStore', {
117 rstore: view.rstore,
118 sorters: {
119 property: 'name',
120 order: 'DESC'
121 }
122 }));
4616a55b
TM
123 var regex = new RegExp("not (installed|initialized)", "i");
124 PVE.Utils.handleStoreErrorOrMask(view, view.rstore, regex, function(me, error){
125 me.rstore.stopUpdate();
126 PVE.Utils.showCephInstallOrMask(me.ownerCt, error.statusText, view.nodename,
127 function(win){
128 me.mon(win, 'cephInstallWindowClosed', function(){
129 me.rstore.startUpdate();
130 });
131 }
132 );
133 });
563ed5ee
TL
134 view.rstore.on('load', this.onLoad, this);
135 view.on('destroy', view.rstore.stopUpdate);
136 },
137
138 onCreate: function() {
139 var view = this.getView();
140 view.rstore.stopUpdate();
141 var win = Ext.create('PVE.CephCreateFS', {
142 autoShow: true,
143 nodename: view.nodename,
144 listeners: {
145 destroy: function() {
146 view.rstore.startUpdate();
147 }
148 }
149 });
150 },
151
152 onLoad: function(store, records, success) {
153 var vm = this.getViewModel();
154 if (!(success && records && records.length > 0)) {
155 vm.set('cephfsConfigured', false);
156 return;
157 }
158 vm.set('cephfsConfigured', true);
159 }
160 },
161 tbar: [
162 {
163 text: gettext('Create CephFS'),
164 reference: 'createButton',
165 handler: 'onCreate',
166 bind: {
167 // only one CephFS per Ceph cluster makes sense for now
a9d47b2b 168 disabled: '{!canCreateFS}'
563ed5ee
TL
169 }
170 }
171 ],
172 columns: [
173 {
174 header: gettext('Name'),
175 flex: 1,
176 dataIndex: 'name'
177 },
178 {
179 header: 'Data Pool',
180 flex: 1,
181 dataIndex: 'data_pool'
182 },
183 {
184 header: 'Metadata Pool',
185 flex: 1,
186 dataIndex: 'metadata_pool'
187 }
188 ],
189 cbind: {
190 nodename: '{nodename}'
191 }
192 },
193 {
7a1aa33b 194 xtype: 'pveNodeCephServiceList',
563ed5ee 195 title: gettext('Metadata Servers'),
7a1aa33b
DC
196 stateId: 'grid-ceph-mds',
197 type: 'mds',
198 storeLoadCallback: function(store, records, success) {
199 var vm = this.getViewModel();
200 if (!success || !records) {
201 vm.set('mdsCount', 0);
202 return;
563ed5ee 203 }
7a1aa33b 204 vm.set('mdsCount', records.length);
563ed5ee 205 },
563ed5ee
TL
206 cbind: {
207 nodename: '{nodename}'
208 }
209 }
210 ]
211}, function() {
563ed5ee
TL
212 Ext.define('pve-ceph-fs', {
213 extend: 'Ext.data.Model',
214 fields: [ 'name', 'data_pool', 'metadata_pool' ],
215 proxy: {
216 type: 'proxmox',
217 url: "/api2/json/nodes/localhost/ceph/fs"
218 },
219 idProperty: 'name'
220 });
221});