]> git.proxmox.com Git - pve-manager.git/blob - www/old/StatusPanel.js
imported from svn 'pve-manager/pve2'
[pve-manager.git] / www / old / StatusPanel.js
1 Ext.ns("PVE");
2
3 PVE.LogViewer = Ext.extend(Ext.list.ListView, {
4
5 initComponent : function() {
6 var self = this;
7
8 var fields = [
9 { name: 'time', type : 'date', dateFormat: 'timestamp' },
10 { name: 'pri', type: 'int' },
11 { name: 'pid', type: 'int' },
12 'node', 'user', 'tag', 'msg' ];
13
14 var logstore = new PVE.data.UpdateStore({
15 itype: 'log',
16 autoDestroy: true,
17 url: self.url,
18 fields: fields
19 });
20
21 Ext.apply(self, {
22 store: logstore,
23 startUpdate: function() { logstore.startUpdate(); },
24 stopUpdate: function() { logstore.stopUpdate(); },
25 columnSort: false,
26 columns: [
27 { header: "Time", width: 0.10, dataIndex: 'time',
28 tpl: '{time:date("M d H:i:s")}'
29 },
30 { header: "Node", width: 0.05, dataIndex: 'node' },
31 { header: "Tag", width: 0.05, dataIndex: 'tag' },
32 { header: "PID", width: 0.05, dataIndex: 'pid' },
33 { header: "User", width: 0.05, dataIndex: 'user' },
34 { header: "Severity", width: 0.05, dataIndex: 'pri',
35 tpl: '{[ PVE.Utils.render_serverity(values.pri) ]}'
36 },
37 { header: "Message", dataIndex: 'msg' }
38 ]});
39
40 var move_to_end = true;
41
42 logstore.on("load", function() {
43 if (move_to_end) {
44 move_to_end = false;
45 var count = logstore.getCount();
46 if (count) {
47 var item = self.getNode(count - 1);
48 if (item)
49 Ext.fly(item).scrollIntoView(self.innerBody.dom.parentNode);
50 }
51 }
52 });
53
54 PVE.LogViewer.superclass.initComponent.call(self);
55 }
56 });
57
58
59 PVE.ClusterTasks = Ext.extend(Ext.grid.GridPanel, {
60
61 initComponent : function() {
62 var self = this;
63
64 var fields = [
65 { name: 'starttime', type : 'date', dateFormat: 'timestamp' },
66 { name: 'endtime', type : 'date', dateFormat: 'timestamp' },
67 { name: 'pid', type: 'int' },
68 'node', 'upid', 'user', 'status', 'type', 'id'];
69
70 // fixme: use/define a storage which append new values, but
71 // defer removing old values until a maximum numer of entries
72 // is reached
73 var taskstore = new PVE.data.UpdateStore({
74 itype: 'tasks',
75 autoDestroy: true,
76 url: '/api2/json/cluster/tasks',
77 idProperty: 'upid',
78 fields: fields
79 });
80
81 Ext.apply(self, {
82 store: taskstore,
83 border: false,
84 startUpdate: function() { taskstore.startUpdate(); },
85 stopUpdate: function() { taskstore.stopUpdate(); },
86 columnSort: false,
87 autoExpandColumn: 'status',
88 viewConfig: {
89 getRowClass: function(record, index) {
90 var status = record.get('status');
91
92 if (status && status != 'OK')
93 return "x-form-invalid";
94 }
95 },
96 columns: [
97 { header: "Start Time", dataIndex: 'starttime',
98 width: 100,
99 renderer: function(value) { return value.format("M d H:i:s"); }
100 },
101 { header: "End Time", dataIndex: 'endtime',
102 width: 100,
103 renderer: function(value, metaData, record) {
104 if (record.data.pid) {
105 metaData.css = "x-grid-row-loading";
106 return "";
107 }
108 return value.format("M d H:i:s");
109 }
110 },
111 { header: "Node", dataIndex: 'node',
112 width: 100
113 },
114 { header: "User", dataIndex: 'user',
115 width: 150
116 },
117 { id: 'desc', header: "Description", dataIndex: 'upid',
118 width: 400,
119 renderer: PVE.Utils.render_upid
120 },
121 { id: 'status', header: "Status", dataIndex: 'status',
122 width: 200,
123 renderer: function(value, metaData, record) {
124 if (record.data.pid) {
125 metaData.css = "x-grid-row-loading";
126 return "";
127 }
128 if (value == 'OK')
129 return 'OK';
130 // metaData.attr = 'style="color:red;"';
131 return "ERROR: " + value;
132 }
133 }
134 ]});
135
136 PVE.ClusterTasks.superclass.initComponent.call(self);
137 }
138 });
139
140 PVE.StatusPanel = Ext.extend(Ext.Panel, {
141
142 initComponent : function() {
143 var self = this;
144
145 self.title = "Realtime logfile viewer";
146 self.layout = 'fit';
147
148 var syslogview = new PVE.LogViewer({
149 url: '/api2/json/nodes/localhost/syslog'
150 });
151 var cllogview = new PVE.LogViewer({
152 url: '/api2/json/cluster/log',
153 });
154 var tasklist = new PVE.ClusterTasks();
155
156 self.items = {
157 xtype: 'tabpanel',
158 border: false,
159 tabPosition: 'bottom',
160 activeTab: 0,
161
162 defaults: { layout: 'fit' },
163
164 items: [
165 {
166 title: 'Cluster Log',
167 items: cllogview,
168 listeners: {
169 show: function() {
170 cllogview.startUpdate();
171 },
172 hide: function() {
173 cllogview.stopUpdate();
174 }
175 }
176 },
177 {
178 title: 'System Log',
179 items: syslogview,
180 listeners: {
181 show: function() {
182 syslogview.startUpdate();
183 },
184 hide: function() {
185 syslogview.stopUpdate();
186 }
187 }
188 },
189 {
190 title: 'Task list',
191 items: tasklist,
192 listeners: {
193 show: function() {
194 tasklist.startUpdate();
195 },
196 hide: function() {
197 tasklist.stopUpdate();
198 }
199 }
200 }
201 ]
202 };
203
204 PVE.StatusPanel.superclass.initComponent.call(self);
205
206 }
207 });
208
209 Ext.reg('pveStatusPanel', PVE.StatusPanel);
210