]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - panel/LogView.js
2 * Display log entries in a panel with scrollbar
3 * The log entries are automatically refreshed via a background task,
4 * with newest entries comming at the bottom
6 Ext
.define('Proxmox.panel.LogView', {
7 extend
: 'Ext.panel.Panel',
9 alias
: ['widget.proxmoxLogView'],
25 getMaxDown: function(scrollToEnd
) {
28 var target
= me
.getTargetEl();
31 dom
.scrollTop
= dom
.scrollHeight
- dom
.clientHeight
;
34 var maxDown
= dom
.scrollHeight
- dom
.clientHeight
-
40 updateView: function(start
, end
, total
, text
) {
42 var el
= me
.dataCmp
.el
;
44 if (me
.destroyed
) { // return if element is not there anymore
48 if (me
.viewInfo
&& me
.viewInfo
.start
=== start
&&
49 me
.viewInfo
.end
=== end
&& me
.viewInfo
.total
=== total
&&
50 me
.viewInfo
.textLength
=== text
.length
) {
51 return; // same content
54 var maxDown
= me
.getMaxDown();
55 var scrollToEnd
= (maxDown
<= 0) && me
.scrollToEnd
;
57 el
.setStyle('padding-top', (start
*me
.lineHeight
).toString() + 'px');
59 me
.dataCmp
.setHeight(total
*me
.lineHeight
);
69 textLength
: text
.length
73 doAttemptLoad: function(start
) {
81 if (me
.log_select_timespan
) {
82 // always show log until the end of the selected day
83 req_params
.until
= Ext
.Date
.format(me
.until_date
, 'Y-m-d') + ' 23:59:59';
84 req_params
.since
= Ext
.Date
.format(me
.since_date
, 'Y-m-d');
87 Proxmox
.Utils
.API2Request({
91 success: function(response
) {
92 Proxmox
.Utils
.setErrorMask(me
, false);
93 var list
= response
.result
.data
;
94 var total
= response
.result
.total
;
95 var first
= 0, last
= 0;
97 Ext
.Array
.each(list
, function(item
) {
98 if (!first
|| item
.n
< first
) {
101 if (!last
|| item
.n
> last
) {
104 text
= text
+ Ext
.htmlEncode(item
.t
) + "<br>";
107 if (first
&& last
&& total
) {
108 me
.updateView(first
-1 , last
-1, total
, text
);
110 me
.updateView(0, 0, 0, '');
113 failure: function(response
) {
114 var msg
= response
.htmlStatus
;
115 Proxmox
.Utils
.setErrorMask(me
, msg
);
120 attemptLoad: function(start
) {
123 me
.loadTask
= Ext
.create('Ext.util.DelayedTask', me
.doAttemptLoad
, me
, []);
125 me
.loadTask
.delay(200, me
.doAttemptLoad
, me
, [start
]);
128 requestUpdate: function(top
, force
) {
131 if (top
=== undefined) {
132 var target
= me
.getTargetEl();
133 top
= target
.dom
.scrollTop
;
136 var viewStart
= parseInt((top
/ me
.lineHeight
) - 1, 10);
140 var viewEnd
= parseInt(((top
+ me
.getHeight())/ me
.lineHeight
) + 1, 10);
141 var info
= me
.viewInfo
;
143 if (info
&& !force
) {
144 if (viewStart
>= info
.start
&& viewEnd
<= info
.end
) {
149 var line
= parseInt((top
/ me
.lineHeight
) - (me
.pageSize
/ 2) + 10, 10);
154 me
.attemptLoad(line
);
157 afterRender: function() {
160 me
.callParent(arguments
);
162 Ext
.Function
.defer(function() {
163 var target
= me
.getTargetEl();
164 target
.on('scroll', function(e
) {
171 initComponent : function() {
172 /*jslint confusion: true */
177 throw "no url specified";
180 // show logs from today back to 3 days ago per default
181 me
.until_date
= new Date();
182 me
.since_date
= new Date();
183 me
.since_date
.setDate(me
.until_date
.getDate() - 3);
185 me
.dataCmp
= Ext
.create('Ext.Component', {
186 style
: 'font:normal 11px tahoma, arial, verdana, sans-serif;' +
187 'line-height: ' + me
.lineHeight
.toString() + 'px; white-space: pre;'
190 me
.task
= Ext
.TaskManager
.start({
192 if (!me
.isVisible() || !me
.scrollToEnd
|| !me
.viewInfo
) {
196 var maxDown
= me
.getMaxDown();
201 me
.requestUpdate(undefined, true);
209 destroy: function() {
210 Ext
.TaskManager
.stop(me
.task
);
215 if (me
.log_select_timespan
) {
216 me
.tbar
= ['->','Since: ',
219 maxValue
: me
.until_date
,
220 value
: me
.since_date
,
224 select: function(field
, date
) {
225 me
.since_date_selected
= date
;
226 var until_field
= field
.up().down('field[name=until_date]');
227 if (date
> until_field
.getValue()) {
228 until_field
.setValue(date
);
236 maxValue
: me
.until_date
,
237 value
: me
.until_date
,
241 select: function(field
, date
) {
242 var since_field
= field
.up().down('field[name=since_date]');
243 if (date
< since_field
.getValue()) {
244 since_field
.setValue(date
);
252 handler: function() {
253 var until_field
= me
.down('field[name=until_date]');
254 var since_field
= me
.down('field[name=since_date]');
255 if (until_field
.getValue() < since_field
.getValue()) {
256 Ext
.Msg
.alert('Error',
257 'Since date must be less equal than Until date.');
258 until_field
.setValue(me
.until_date
);
259 since_field
.setValue(me
.since_date
);
261 me
.until_date
= until_field
.getValue();
262 me
.since_date
= since_field
.getValue();