]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - node/ServiceView.js
bump version to 2.0-4
[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
ecb07824
DM
42 var view_service_log = function() {
43 var sm = me.getSelectionModel();
44 var rec = sm.getSelection()[0];
f21840aa 45 var win = Ext.create('Ext.window.Window', {
c47f5f46 46 title: gettext('Syslog') + ': ' + rec.data.service,
f21840aa
DM
47 modal: true,
48 items: {
49 xtype: 'proxmoxLogView',
50 width: 800,
51 height: 400,
52 url: "/api2/extjs/nodes/" + me.nodename + "/syslog?service=" +
53 rec.data.service,
54 log_select_timespan: 1
55 }
56 });
57 win.show();
58 };
59
d7139140
DM
60 var service_cmd = function(cmd) {
61 var sm = me.getSelectionModel();
62 var rec = sm.getSelection()[0];
63 Proxmox.Utils.API2Request({
64 url: "/nodes/" + me.nodename + "/services/" + rec.data.service + "/" + cmd,
65 method: 'POST',
66 failure: function(response, opts) {
67 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
68 me.loading = true;
69 },
70 success: function(response, opts) {
71 rstore.startUpdate();
72 var upid = response.result.data;
73
74 var win = Ext.create('Proxmox.window.TaskProgress', {
75 upid: upid
76 });
77 win.show();
78 }
79 });
80 };
81
82 var start_btn = new Ext.Button({
83 text: gettext('Start'),
84 disabled: true,
85 handler: function(){
86 service_cmd("start");
87 }
88 });
89
90 var stop_btn = new Ext.Button({
91 text: gettext('Stop'),
92 disabled: true,
93 handler: function(){
94 service_cmd("stop");
95 }
96 });
97
98 var restart_btn = new Ext.Button({
99 text: gettext('Restart'),
100 disabled: true,
101 handler: function(){
102 service_cmd("restart");
103 }
104 });
105
ecb07824
DM
106 var syslog_btn = new Ext.Button({
107 text: gettext('Syslog'),
108 disabled: true,
109 handler: view_service_log
110 });
111
d7139140
DM
112 var set_button_status = function() {
113 var sm = me.getSelectionModel();
114 var rec = sm.getSelection()[0];
115
116 if (!rec) {
117 start_btn.disable();
118 stop_btn.disable();
119 restart_btn.disable();
ecb07824 120 syslog_btn.disable();
d7139140
DM
121 return;
122 }
123 var service = rec.data.service;
124 var state = rec.data.state;
125
ecb07824
DM
126 syslog_btn.enable();
127
d7139140
DM
128 if (me.startOnlyServices[service]) {
129 if (state == 'running') {
130 start_btn.disable();
131 restart_btn.enable();
132 } else {
133 start_btn.enable();
134 restart_btn.disable();
135 }
136 stop_btn.disable();
137 } else {
138 if (state == 'running') {
139 start_btn.disable();
140 restart_btn.enable();
141 stop_btn.enable();
142 } else {
143 start_btn.enable();
144 restart_btn.disable();
145 stop_btn.disable();
146 }
147 }
148 };
149
150 me.mon(store, 'refresh', set_button_status);
151
152 Proxmox.Utils.monStoreErrors(me, rstore);
153
154 Ext.apply(me, {
155 store: store,
156 stateful: false,
ecb07824 157 tbar: [ start_btn, stop_btn, restart_btn, syslog_btn ],
d7139140
DM
158 columns: [
159 {
160 header: gettext('Name'),
ab29b73d 161 flex: 1,
d7139140
DM
162 sortable: true,
163 dataIndex: 'name'
164 },
165 {
166 header: gettext('Status'),
167 width: 100,
168 sortable: true,
169 dataIndex: 'state'
170 },
171 {
172 header: gettext('Description'),
173 renderer: Ext.String.htmlEncode,
174 dataIndex: 'desc',
ab29b73d 175 flex: 2
d7139140
DM
176 }
177 ],
178 listeners: {
179 selectionchange: set_button_status,
f21840aa 180 itemdblclick: view_service_log,
d7139140
DM
181 activate: rstore.startUpdate,
182 destroy: rstore.stopUpdate
183 }
184 });
185
186 me.callParent();
187 }
188});