]>
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
) {
43 if (me
.destroyed
) { // return if element is not there anymore
47 var el
= me
.dataCmp
.el
;
49 if (me
.viewInfo
&& me
.viewInfo
.start
=== start
&&
50 me
.viewInfo
.end
=== end
&& me
.viewInfo
.total
=== total
&&
51 me
.viewInfo
.textLength
=== text
.length
) {
52 return; // same content
55 var maxDown
= me
.getMaxDown();
56 var scrollToEnd
= (maxDown
<= 0) && me
.scrollToEnd
;
58 el
.setStyle('padding-top', (start
*me
.lineHeight
).toString() + 'px');
60 me
.dataCmp
.setHeight(total
*me
.lineHeight
);
70 textLength
: text
.length
74 doAttemptLoad: function(start
) {
82 if (me
.log_select_timespan
) {
83 // always show log until the end of the selected day
84 req_params
.until
= Ext
.Date
.format(me
.until_date
, 'Y-m-d') + ' 23:59:59';
85 req_params
.since
= Ext
.Date
.format(me
.since_date
, 'Y-m-d');
88 Proxmox
.Utils
.API2Request({
92 success: function(response
) {
93 Proxmox
.Utils
.setErrorMask(me
, false);
94 var list
= response
.result
.data
;
95 var total
= response
.result
.total
;
96 var first
= 0, last
= 0;
98 Ext
.Array
.each(list
, function(item
) {
99 if (!first
|| item
.n
< first
) {
102 if (!last
|| item
.n
> last
) {
105 text
= text
+ Ext
.htmlEncode(item
.t
) + "<br>";
108 if (first
&& last
&& total
) {
109 me
.updateView(first
-1 , last
-1, total
, text
);
111 me
.updateView(0, 0, 0, '');
114 failure: function(response
) {
115 var msg
= response
.htmlStatus
;
116 Proxmox
.Utils
.setErrorMask(me
, msg
);
121 attemptLoad: function(start
) {
124 me
.loadTask
= Ext
.create('Ext.util.DelayedTask', me
.doAttemptLoad
, me
, []);
126 me
.loadTask
.delay(200, me
.doAttemptLoad
, me
, [start
]);
129 requestUpdate: function(top
, force
) {
132 if (top
=== undefined) {
133 var target
= me
.getTargetEl();
134 top
= target
.dom
.scrollTop
;
137 var viewStart
= parseInt((top
/ me
.lineHeight
) - 1, 10);
141 var viewEnd
= parseInt(((top
+ me
.getHeight())/ me
.lineHeight
) + 1, 10);
142 var info
= me
.viewInfo
;
144 if (info
&& !force
) {
145 if (viewStart
>= info
.start
&& viewEnd
<= info
.end
) {
150 var line
= parseInt((top
/ me
.lineHeight
) - (me
.pageSize
/ 2) + 10, 10);
155 me
.attemptLoad(line
);
158 afterRender: function() {
161 me
.callParent(arguments
);
163 Ext
.Function
.defer(function() {
164 var target
= me
.getTargetEl();
165 target
.on('scroll', function(e
) {
172 initComponent : function() {
173 /*jslint confusion: true */
178 throw "no url specified";
181 // show logs from today back to 3 days ago per default
182 me
.until_date
= new Date();
183 me
.since_date
= new Date();
184 me
.since_date
.setDate(me
.until_date
.getDate() - 3);
186 me
.dataCmp
= Ext
.create('Ext.Component', {
187 style
: 'font:normal 11px tahoma, arial, verdana, sans-serif;' +
188 'line-height: ' + me
.lineHeight
.toString() + 'px; white-space: pre;'
191 me
.task
= Ext
.TaskManager
.start({
193 if (!me
.isVisible() || !me
.scrollToEnd
|| !me
.viewInfo
) {
197 var maxDown
= me
.getMaxDown();
202 me
.requestUpdate(undefined, true);
210 destroy: function() {
211 Ext
.TaskManager
.stop(me
.task
);
216 if (me
.log_select_timespan
) {
217 me
.tbar
= ['->','Since: ',
220 maxValue
: me
.until_date
,
221 value
: me
.since_date
,
225 select: function(field
, date
) {
226 me
.since_date_selected
= date
;
227 var until_field
= field
.up().down('field[name=until_date]');
228 if (date
> until_field
.getValue()) {
229 until_field
.setValue(date
);
237 maxValue
: me
.until_date
,
238 value
: me
.until_date
,
242 select: function(field
, date
) {
243 var since_field
= field
.up().down('field[name=since_date]');
244 if (date
< since_field
.getValue()) {
245 since_field
.setValue(date
);
253 handler: function() {
254 var until_field
= me
.down('field[name=until_date]');
255 var since_field
= me
.down('field[name=since_date]');
256 if (until_field
.getValue() < since_field
.getValue()) {
257 Ext
.Msg
.alert('Error',
258 'Since date must be less equal than Until date.');
259 until_field
.setValue(me
.until_date
);
260 since_field
.setValue(me
.since_date
);
262 me
.until_date
= until_field
.getValue();
263 me
.since_date
= since_field
.getValue();