]> git.proxmox.com Git - pve-manager.git/commitdiff
copy ceph/Pool.js from manager to manager6
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 4 Mar 2016 05:14:50 +0000 (06:14 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 4 Mar 2016 05:14:50 +0000 (06:14 +0100)
www/manager6/ceph/Pool.js [new file with mode: 0644]

diff --git a/www/manager6/ceph/Pool.js b/www/manager6/ceph/Pool.js
new file mode 100644 (file)
index 0000000..0547e88
--- /dev/null
@@ -0,0 +1,220 @@
+Ext.define('PVE.CephCreatePool', {
+    extend: 'PVE.window.Edit',
+    alias: ['widget.pveCephCreatePool'],
+
+    subject: 'Ceph Pool',
+     initComponent : function() {
+        /*jslint confusion: true */
+        var me = this;
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+        Ext.applyIf(me, {
+           create: true,
+           url: "/nodes/" + me.nodename + "/ceph/pools",
+            method: 'POST',
+            items: [
+               {
+                   xtype: 'textfield',
+                   fieldLabel: gettext('Name'),
+                   name: 'name',
+                   allowBlank: false
+               },
+               {
+                   xtype: 'numberfield',
+                   fieldLabel: gettext('Size'),
+                   name: 'size',
+                   value: 2,
+                   minValue: 1,
+                   maxValue: 3,
+                   allowBlank: false
+               },
+               {
+                   xtype: 'numberfield',
+                   fieldLabel: gettext('Min. Size'),
+                   name: 'min_size',
+                   value: 1,
+                   minValue: 1,
+                   maxValue: 3,
+                   allowBlank: false
+               },
+               {
+                   xtype: 'numberfield',
+                   fieldLabel: gettext('Crush RuleSet'),
+                   name: 'crush_ruleset',
+                   value: 0,
+                   minValue: 0,
+                   maxValue: 32768,
+                   allowBlank: false
+               },
+               {
+                   xtype: 'numberfield',
+                   fieldLabel: 'pg_num',
+                   name: 'pg_num',
+                   value: 64,
+                   minValue: 8,
+                   maxValue: 32768,
+                   allowBlank: false
+               }
+            ]
+        });
+
+        me.callParent();
+    }
+});
+
+Ext.define('PVE.node.CephPoolList', {
+    extend: 'Ext.grid.GridPanel',
+    alias: ['widget.pveNodeCephPoolList'],
+
+    initComponent: function() {
+        var me = this;
+
+       var nodename = me.pveSelNode.data.node;
+       if (!nodename) {
+           throw "no node name specified";
+       }
+
+       var sm = Ext.create('Ext.selection.RowModel', {});
+
+       var rstore = Ext.create('PVE.data.UpdateStore', {
+           interval: 3000,
+           storeid: 'ceph-pool-list',
+           model: 'ceph-pool-list',
+           proxy: {
+                type: 'pve',
+                url: "/api2/json/nodes/" + nodename + "/ceph/pools"
+           }
+       });
+
+       var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
+
+       PVE.Utils.monStoreErrors(me, rstore);
+
+       var create_btn = new Ext.Button({
+           text: gettext('Create'),
+           handler: function() {
+               var win = Ext.create('PVE.CephCreatePool', {
+                    nodename: nodename
+               });
+               win.show();
+           }
+       });
+
+       var remove_btn = new PVE.button.Button({
+           text: gettext('Remove'),
+           selModel: sm,
+           disabled: true,
+           confirmMsg: function(rec) {
+               var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
+                                           "'" + rec.data.pool_name + "'");
+               msg += " " + gettext('This will permanently erase all image data.');
+
+               return msg;
+           },
+           handler: function() {
+               var rec = sm.getSelection()[0];
+
+               if (!rec.data.pool_name) {
+                   return;
+               }
+
+               PVE.Utils.API2Request({
+                   url: "/nodes/" + nodename + "/ceph/pools/" + 
+                       rec.data.pool_name,
+                   method: 'DELETE',
+                   failure: function(response, opts) {
+                       Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+                   }
+               });
+           }
+       });
+
+       Ext.apply(me, {
+           store: store,
+           selModel: sm,
+           stateful: false,
+           tbar: [ create_btn, remove_btn ],
+           features: [ { ftype: 'summary' } ],
+           columns: [
+               {
+                   header: gettext('Name'),
+                   width: 100,
+                   sortable: true,
+                   dataIndex: 'pool_name'
+               },
+               {
+                   header: gettext('Size') + '/min',
+                   width: 50,
+                   sortable: false,
+                   renderer: function(v, meta, rec) {
+                       return v + '/' + rec.data.min_size;
+                   },
+                   dataIndex: 'size'
+               },
+               {
+                   header: 'pg_num',
+                   width: 100,
+                   sortable: false,
+                   dataIndex: 'pg_num'
+               },
+               {
+                   header: 'ruleset',
+                   width: 50,
+                   sortable: false,
+                   dataIndex: 'crush_ruleset'
+               },
+               {
+                   header: gettext('Used'),
+                   columns: [
+                       {
+                           header: '%',
+                           width: 80,
+                           sortable: true,
+                           align: 'right',
+                           renderer: Ext.util.Format.numberRenderer('0.00'),
+                           dataIndex: 'percent_used',
+                           summaryType: 'sum',
+                           summaryRenderer: Ext.util.Format.numberRenderer('0.00')
+                       },
+                       {
+                           header: gettext('Total'),
+                           width: 100,
+                           sortable: true,
+                           renderer: PVE.Utils.render_size,
+                           align: 'right',
+                           dataIndex: 'bytes_used',
+                           summaryType: 'sum',
+                           summaryRenderer: PVE.Utils.render_size
+                       }
+                   ]
+               }
+           ],
+           listeners: {
+               show: rstore.startUpdate,
+               hide: rstore.stopUpdate,
+               destroy: rstore.stopUpdate
+           }
+       });
+
+       me.callParent();
+    }
+}, function() {
+
+    Ext.define('ceph-pool-list', {
+       extend: 'Ext.data.Model',
+       fields: [ 'pool_name', 
+                 { name: 'pool', type: 'integer'}, 
+                 { name: 'size', type: 'integer'}, 
+                 { name: 'min_size', type: 'integer'}, 
+                 { name: 'pg_num', type: 'integer'}, 
+                 { name: 'bytes_used', type: 'integer'}, 
+                 { name: 'percent_used', type: 'number'}, 
+                 { name: 'crush_ruleset', type: 'integer'}
+               ],
+       idProperty: 'pool_name'
+    });
+});