web-apps/vendor/touch/src/log/writer/Remote.js
Maxim Kadushkin 741b10515d webapps added
2016-03-10 21:48:53 -03:00

74 lines
1.5 KiB
JavaScript

//<feature logger>
Ext.define('Ext.log.writer.Remote', {
extend: 'Ext.log.writer.Writer',
requires: [
'Ext.Ajax'
],
config: {
batchSendDelay: 100,
onFailureRetryDelay: 500,
url: ''
},
isSending: false,
sendingTimer: null,
constructor: function() {
this.queue = [];
this.send = Ext.Function.bind(this.send, this);
return this.callParent(arguments);
},
doWrite: function(event) {
var queue = this.queue;
queue.push(event.message);
if (!this.isSending && this.sendingTimer === null) {
this.sendingTimer = setTimeout(this.send, this.getBatchSendDelay());
}
},
send: function() {
var queue = this.queue,
messages = queue.slice();
queue.length = 0;
this.sendingTimer = null;
if (messages.length > 0) {
this.doSend(messages);
}
},
doSend: function(messages) {
var me = this;
me.isSending = true;
Ext.Ajax.request({
url: me.getUrl(),
method: 'POST',
params: {
messages: messages.join("\n")
},
success: function(){
me.isSending = false;
me.send();
},
failure: function() {
setTimeout(function() {
me.doSend(messages);
}, me.getOnFailureRetryDelay());
},
scope: me
});
}
});
//</feature>