]> git.proxmox.com Git - proxmox-widget-toolkit.git/commitdiff
add ServiceView widget
authorDietmar Maurer <dietmar@proxmox.com>
Tue, 31 Jan 2017 14:21:37 +0000 (15:21 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 31 Jan 2017 14:21:37 +0000 (15:21 +0100)
Makefile
node/ServiceView.js [new file with mode: 0644]
window/TaskViewer.js

index 05274793d003c88dcc67cea79b3865c405b09e36..8d1c7f5cc5a022a358f73fbb61af44373ebba92b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -24,6 +24,7 @@ JSSRC=                                        \
        window/Edit.js                  \
        window/TaskViewer.js            \
        node/Tasks.js                   \
+       node/ServiceView.js             \
        node/TimeEdit.js                \
        node/TimeView.js
 
diff --git a/node/ServiceView.js b/node/ServiceView.js
new file mode 100644 (file)
index 0000000..0b4acda
--- /dev/null
@@ -0,0 +1,160 @@
+Ext.define('proxmox-services', {
+    extend: 'Ext.data.Model',
+    fields: [ 'service', 'name', 'desc', 'state' ],
+    idProperty: 'service'
+});
+
+Ext.define('Proxmox.node.ServiceView', {
+    extend: 'Ext.grid.GridPanel',
+
+    alias: ['widget.proxmoxNodeServiceView'],
+
+    startOnlyServices: {},
+
+    initComponent : function() {
+       var me = this;
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+       var rstore = Ext.create('Proxmox.data.UpdateStore', {
+           interval: 1000,
+           storeid: 'proxmox-services' + me.nodename,
+           model: 'proxmox-services',
+           proxy: {
+                type: 'proxmox',
+                url: "/api2/json/nodes/" + me.nodename + "/services"
+           }
+       });
+
+       var store = Ext.create('Proxmox.data.DiffStore', {
+           rstore: rstore,
+           sortAfterUpdate: true,
+           sorters: [
+               {
+                   property : 'name',
+                   direction: 'ASC'
+               }
+           ]
+       });
+
+       var service_cmd = function(cmd) {
+           var sm = me.getSelectionModel();
+           var rec = sm.getSelection()[0];
+           Proxmox.Utils.API2Request({
+               url: "/nodes/" + me.nodename + "/services/" + rec.data.service + "/" + cmd,
+               method: 'POST',
+               failure: function(response, opts) {
+                   Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+                   me.loading = true;
+               },
+               success: function(response, opts) {
+                   rstore.startUpdate();
+                   var upid = response.result.data;
+
+                   var win = Ext.create('Proxmox.window.TaskProgress', {
+                       upid: upid
+                   });
+                   win.show();
+               }
+           });
+       };
+
+       var start_btn = new Ext.Button({
+           text: gettext('Start'),
+           disabled: true,
+           handler: function(){
+               service_cmd("start");
+           }
+       });
+
+       var stop_btn = new Ext.Button({
+           text: gettext('Stop'),
+           disabled: true,
+           handler: function(){
+               service_cmd("stop");
+           }
+       });
+
+       var restart_btn = new Ext.Button({
+           text: gettext('Restart'),
+           disabled: true,
+           handler: function(){
+               service_cmd("restart");
+           }
+       });
+
+       var set_button_status = function() {
+           var sm = me.getSelectionModel();
+           var rec = sm.getSelection()[0];
+
+           if (!rec) {
+               start_btn.disable();
+               stop_btn.disable();
+               restart_btn.disable();
+               return;
+           }
+           var service = rec.data.service;
+           var state = rec.data.state;
+
+           if (me.startOnlyServices[service]) {
+               if (state == 'running') {
+                   start_btn.disable();
+                   restart_btn.enable();
+               } else {
+                   start_btn.enable();
+                   restart_btn.disable();
+               }
+               stop_btn.disable();
+           } else {
+               if (state == 'running') {
+                   start_btn.disable();
+                   restart_btn.enable();
+                   stop_btn.enable();
+               } else {
+                   start_btn.enable();
+                   restart_btn.disable();
+                   stop_btn.disable();
+               }
+           }
+       };
+
+       me.mon(store, 'refresh', set_button_status);
+
+       Proxmox.Utils.monStoreErrors(me, rstore);
+
+       Ext.apply(me, {
+           store: store,
+           stateful: false,
+           tbar: [ start_btn, stop_btn, restart_btn ],
+           columns: [
+               {
+                   header: gettext('Name'),
+                   width: 100,
+                   sortable: true,
+                   dataIndex: 'name'
+               },
+               {
+                   header: gettext('Status'),
+                   width: 100,
+                   sortable: true,
+                   dataIndex: 'state'
+               },
+               {
+                   header: gettext('Description'),
+                   renderer: Ext.String.htmlEncode,
+                   dataIndex: 'desc',
+                   flex: 1
+               }
+           ],
+           listeners: {
+               selectionchange: set_button_status,
+               activate: rstore.startUpdate,
+               destroy: rstore.stopUpdate
+           }
+       });
+
+       me.callParent();
+    }
+});
index 7a2ada4f8c37cdd6d53f97f1624afe89e72273a4..189268b9655e95c27372bad7c408c6dc506d4b2e 100644 (file)
@@ -50,7 +50,7 @@ Ext.define('Proxmox.window.TaskProgress', {
        var descr = Proxmox.Utils.format_task_description(task.type, task.id);
 
        Ext.apply(me, {
-           title: gettetx('Task') + ': ' + descr,
+           title: gettext('Task') + ': ' + descr,
            width: 300,
            layout: 'auto',
            modal: true,