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

diff --git a/www/manager6/ceph/Monitor.js b/www/manager6/ceph/Monitor.js
new file mode 100644 (file)
index 0000000..f92a761
--- /dev/null
@@ -0,0 +1,207 @@
+Ext.define('PVE.CephCreateMon', {
+    extend: 'PVE.window.Edit',
+    alias: ['widget.pveCephCreateMon'],
+
+    subject: 'Ceph Monitor',
+
+    showProgress: true,
+    setNode: function(nodename) {
+        var me = this;
+
+       me.nodename = nodename;
+        me.url = "/nodes/" + nodename + "/ceph/mon";
+    },
+
+    initComponent : function() {
+        /*jslint confusion: true */
+        var me = this;
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+       me.setNode(me.nodename);
+
+       me.create = true;
+
+        Ext.applyIf(me, {
+            method: 'POST',
+            items: [
+               {
+                  xtype: 'PVE.form.NodeSelector',
+                  submitValue: false,
+                  fieldLabel: gettext('Host'),
+                  selectCurNode: true,
+                  allowBlank: false,
+                  listeners: {
+                      change: function(f, value) {
+                          me.setNode(value);
+                      }
+                  }
+              }
+            ]
+        });
+
+        me.callParent();
+    }
+});
+
+Ext.define('PVE.node.CephMonList', {
+    extend: 'Ext.grid.GridPanel',
+    alias: ['widget.pveNodeCephMonList'],
+
+    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-mon-list',
+           model: 'ceph-mon-list',
+           proxy: {
+                type: 'pve',
+                url: "/api2/json/nodes/" + nodename + "/ceph/mon"
+           }
+       });
+
+       var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
+
+       PVE.Utils.monStoreErrors(me, rstore);
+
+       var service_cmd = function(cmd) {
+           var rec = sm.getSelection()[0];
+           if (!rec.data.host) {
+               Ext.Msg.alert(gettext('Error'), "entry has no host");
+               return;
+           }
+           PVE.Utils.API2Request({
+               url: "/nodes/" + rec.data.host + "/ceph/" + cmd,
+               method: 'POST',
+               params: { service: "mon." + rec.data.name },
+               success: function(response, options) {
+                   var upid = response.result.data;
+                   var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
+                   win.show();
+               },
+               failure: function(response, opts) {
+                   Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+               }
+           });
+       };
+
+       var start_btn = new PVE.button.Button({
+           text: gettext('Start'),
+           selModel: sm,
+           disabled: true,
+           handler: function(){
+               service_cmd("start");
+           }
+       });
+
+       var stop_btn = new PVE.button.Button({
+           text: gettext('Stop'),
+           selModel: sm,
+           disabled: true,
+           handler: function(){
+               service_cmd("stop");
+           }
+       });
+
+       var create_btn = new Ext.Button({
+           text: gettext('Create'),
+           handler: function(){
+               var win = Ext.create('PVE.CephCreateMon', {
+                    nodename: nodename
+               });
+               win.show();
+           }
+       });
+
+       var remove_btn = new PVE.button.Button({
+           text: gettext('Remove'),
+           selModel: sm,
+           disabled: true,
+           handler: function() {
+               var rec = sm.getSelection()[0];
+
+               if (!rec.data.host) {
+                   Ext.Msg.alert(gettext('Error'), "entry has no host");
+                   return;
+               }
+
+               PVE.Utils.API2Request({
+                   url: "/nodes/" + rec.data.host + "/ceph/mon/" + 
+                       rec.data.name,
+                   method: 'DELETE',
+                   success: function(response, options) {
+                       var upid = response.result.data;
+                       var win = Ext.create('PVE.window.TaskProgress', { upid: upid });
+                       win.show();
+                   },
+                   failure: function(response, opts) {
+                       Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+                   }
+               });
+           }
+       });
+
+       Ext.apply(me, {
+           store: store,
+           selModel: sm,
+           stateful: false,
+           tbar: [ start_btn, stop_btn, create_btn, remove_btn ],
+           columns: [
+               {
+                   header: gettext('Name'),
+                   width: 50,
+                   sortable: true,
+                   renderer: function(v) { return "mon." + v; },
+                   dataIndex: 'name'
+               },
+               {
+                   header: gettext('Host'),
+                   width: 100,
+                   sortable: true,
+                   renderer: function(v) {
+                       return v || 'unknown';
+                   },
+                   dataIndex: 'host'
+               },
+               {
+                   header: gettext('Quorum'),
+                   width: 50,
+                   sortable: false,
+                   renderer: PVE.Utils.format_boolean,
+                   dataIndex: 'quorum'
+               },
+               {
+                   header: gettext('Address'),
+                   flex: 1,
+                   sortable: true,
+                   dataIndex: 'addr'
+               }
+           ],
+           listeners: {
+               show: rstore.startUpdate,
+               hide: rstore.stopUpdate,
+               destroy: rstore.stopUpdate
+           }
+       });
+
+       me.callParent();
+    }
+}, function() {
+
+    Ext.define('ceph-mon-list', {
+       extend: 'Ext.data.Model',
+       fields: [ 'addr', 'name', 'rank', 'host', 'quorum' ],
+       idProperty: 'name'
+    });
+});