]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - node/ServiceView.js
grid/ObjectGrid.js: new helper add_combobox_row()
[proxmox-widget-toolkit.git] / node / ServiceView.js
CommitLineData
d7139140
DM
1Ext.define('proxmox-services', {
2 extend: 'Ext.data.Model',
3 fields: [ 'service', 'name', 'desc', 'state' ],
4 idProperty: 'service'
5});
6
7Ext.define('Proxmox.node.ServiceView', {
8 extend: 'Ext.grid.GridPanel',
9
10 alias: ['widget.proxmoxNodeServiceView'],
11
12 startOnlyServices: {},
13
14 initComponent : function() {
15 var me = this;
16
17 if (!me.nodename) {
18 throw "no node name specified";
19 }
20
21 var rstore = Ext.create('Proxmox.data.UpdateStore', {
22 interval: 1000,
23 storeid: 'proxmox-services' + me.nodename,
24 model: 'proxmox-services',
25 proxy: {
26 type: 'proxmox',
27 url: "/api2/json/nodes/" + me.nodename + "/services"
28 }
29 });
30
31 var store = Ext.create('Proxmox.data.DiffStore', {
32 rstore: rstore,
33 sortAfterUpdate: true,
34 sorters: [
35 {
36 property : 'name',
37 direction: 'ASC'
38 }
39 ]
40 });
41
42 var service_cmd = function(cmd) {
43 var sm = me.getSelectionModel();
44 var rec = sm.getSelection()[0];
45 Proxmox.Utils.API2Request({
46 url: "/nodes/" + me.nodename + "/services/" + rec.data.service + "/" + cmd,
47 method: 'POST',
48 failure: function(response, opts) {
49 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
50 me.loading = true;
51 },
52 success: function(response, opts) {
53 rstore.startUpdate();
54 var upid = response.result.data;
55
56 var win = Ext.create('Proxmox.window.TaskProgress', {
57 upid: upid
58 });
59 win.show();
60 }
61 });
62 };
63
64 var start_btn = new Ext.Button({
65 text: gettext('Start'),
66 disabled: true,
67 handler: function(){
68 service_cmd("start");
69 }
70 });
71
72 var stop_btn = new Ext.Button({
73 text: gettext('Stop'),
74 disabled: true,
75 handler: function(){
76 service_cmd("stop");
77 }
78 });
79
80 var restart_btn = new Ext.Button({
81 text: gettext('Restart'),
82 disabled: true,
83 handler: function(){
84 service_cmd("restart");
85 }
86 });
87
88 var set_button_status = function() {
89 var sm = me.getSelectionModel();
90 var rec = sm.getSelection()[0];
91
92 if (!rec) {
93 start_btn.disable();
94 stop_btn.disable();
95 restart_btn.disable();
96 return;
97 }
98 var service = rec.data.service;
99 var state = rec.data.state;
100
101 if (me.startOnlyServices[service]) {
102 if (state == 'running') {
103 start_btn.disable();
104 restart_btn.enable();
105 } else {
106 start_btn.enable();
107 restart_btn.disable();
108 }
109 stop_btn.disable();
110 } else {
111 if (state == 'running') {
112 start_btn.disable();
113 restart_btn.enable();
114 stop_btn.enable();
115 } else {
116 start_btn.enable();
117 restart_btn.disable();
118 stop_btn.disable();
119 }
120 }
121 };
122
123 me.mon(store, 'refresh', set_button_status);
124
125 Proxmox.Utils.monStoreErrors(me, rstore);
126
127 Ext.apply(me, {
128 store: store,
129 stateful: false,
130 tbar: [ start_btn, stop_btn, restart_btn ],
131 columns: [
132 {
133 header: gettext('Name'),
134 width: 100,
135 sortable: true,
136 dataIndex: 'name'
137 },
138 {
139 header: gettext('Status'),
140 width: 100,
141 sortable: true,
142 dataIndex: 'state'
143 },
144 {
145 header: gettext('Description'),
146 renderer: Ext.String.htmlEncode,
147 dataIndex: 'desc',
148 flex: 1
149 }
150 ],
151 listeners: {
152 selectionchange: set_button_status,
153 activate: rstore.startUpdate,
154 destroy: rstore.stopUpdate
155 }
156 });
157
158 me.callParent();
159 }
160});