]> git.proxmox.com Git - pve-manager.git/blob - www/new/node/ServiceView.js
imported from svn 'pve-manager/pve2'
[pve-manager.git] / www / new / node / ServiceView.js
1 Ext.define('PVE.node.ServiceView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveNodeServiceView'],
5
6 initComponent : function() {
7 var me = this;
8
9 var nodename = me.pveSelNode.data.node;
10 if (!nodename)
11 throw "no node name specified";
12
13 var rstore = Ext.create('PVE.data.UpdateStore', {
14 interval: 1000,
15 storeid: 'pve-services',
16 model: Ext.define('pve-services', {
17 extend: 'Ext.data.Model',
18 fields: [ 'service', 'name', 'desc', 'state' ],
19 idProperty: 'service',
20 proxy: {
21 type: 'pve',
22 url: "/api2/json/nodes/" + nodename + "/services",
23 }
24 })
25 });
26
27 var store = Ext.create('PVE.data.DiffStore', { rstore: rstore });
28
29 var service_cmd = function(cmd) {
30 var sm = me.getSelectionModel();
31 var rec = sm.getLastSelected();
32 PVE.Utils.API2Request({
33 url: "/nodes/" + nodename + "/services/" + rec.data.service,
34 params: { command: cmd },
35 method: 'PUT',
36 failure: function(response, opts) {
37 Ext.Msg.alert('Error', response.htmlStatus);
38 me.loading = true;
39 },
40 success: function(response, opts) {
41 rstore.startUpdate();
42 }
43 });
44 };
45
46 var start_btn = new Ext.Button({
47 text: 'Start',
48 disabled: true,
49 handler: function(){
50 service_cmd("start");
51 }
52 });
53
54 var stop_btn = new Ext.Button({
55 text: 'Stop',
56 disabled: true,
57 handler: function(){
58 service_cmd("stop");
59 }
60 });
61
62 var restart_btn = new Ext.Button({
63 text: 'Restart',
64 disabled: true,
65 handler: function(){
66 service_cmd("restart");
67 }
68 });
69
70 var set_button_status = function() {
71 var sm = me.getSelectionModel();
72 var rec = sm.getLastSelected();
73
74 if (!rec) {
75 start_btn.disable();
76 stop_btn.disable();
77 restart_btn.disable();
78 return;
79 }
80 var service = rec.data.service;
81 var state = rec.data.state;
82 if (service == 'apache' ||
83 service == 'pvecluster' ||
84 service == 'pvedaemon') {
85 if (state == 'running') {
86 start_btn.disable();
87 restart_btn.enable();
88 } else {
89 start_btn.enable();
90 restart_btn.disable();
91 }
92 stop_btn.disable();
93 } else {
94 if (state == 'running') {
95 start_btn.disable();
96 restart_btn.enable();
97 stop_btn.enable();
98 } else {
99 start_btn.enable();
100 restart_btn.disable();
101 stop_btn.disable();
102 }
103 }
104 };
105
106 me.mon(store, 'datachanged', set_button_status);
107
108 me.mon(rstore, 'load', function(s, records, success) {
109 if (!success) {
110 me.setLoading("Data load error");
111 return;
112 } else {
113 me.setLoading(false);
114 }
115 });
116
117 Ext.apply(me, {
118 store: store,
119 stateful: false,
120 tbar: [ start_btn, stop_btn, restart_btn ],
121 columns: [
122 {
123 header: 'Name',
124 width: 100,
125 sortable: true,
126 dataIndex: 'name'
127 },
128 {
129 header: 'State',
130 width: 100,
131 sortable: true,
132 dataIndex: 'state'
133 },
134 {
135 header: 'Description',
136 dataIndex: 'desc',
137 flex: 1
138 }
139 ],
140 listeners: {
141 selectionchange: set_button_status,
142 show: rstore.startUpdate,
143 hide: rstore.stopUpdate,
144 destroy: rstore.stopUpdate,
145 }
146 });
147
148 me.callParent();
149 }
150 });
151