Files
exemone_java_agent/java/data/exem_api_em.js
2024-07-25 10:54:05 +09:00

148 lines
5.0 KiB
JavaScript

(function () {
var _XM_TID = '%{XM_TID}';
var _XM_TRACE_ELAPSE = '%{XM_TRACE_ELAPSE}';
var _XM_CLIENT_API = '_XM_CLIENT_API%{XM_CLIENT_API}';
var _XM_CLIENT_ADDR = '%{XM_CLIENT_ADDR}';
var _XM_TID_HEADER = 'X-Xm-Tid';
var _XM_TRACE_ELAPSE_HEADER = 'X-Xm-ElapseTime';
var openProxied = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function () {
if (arguments[1].indexOf(_XM_CLIENT_API) == -1) {
if (document.removeEventListener) {
this.removeEventListener("loadstart", _xm_loadstart);
this.removeEventListener("loadend", _xm_loadend);
}
else {
this.detachEvent("loadstart", _xm_loadstart);
this.detachEvent("loadend", _xm_loadend);
}
if (this.addEventListener) {
this.addEventListener("loadstart", _xm_loadstart);
this.addEventListener("loadend", _xm_loadend);
}
else if (this.attachEvent) {
this.attachEvent("onloadstart", _xm_loadstart);
this.attachEvent("onloadend", _xm_loadend);
}
}
return openProxied.apply(this, [].slice.call(arguments));
};
var _xm_loadstart = function () {
var eventProxied = this.onreadystatechange;
this.onreadystatechange = function () {
if (this.readyState === XMLHttpRequest.DONE) {
this._xm_clientinfo.es = Date.now();
}
if (eventProxied != null && typeof eventProxied != 'undefined') {
eventProxied.apply(this, [].slice.call(arguments));
}
if (this.readyState === XMLHttpRequest.DONE) {
this._xm_clientinfo.ee = Date.now();
}
};
this._xm_clientinfo = __xm_create_clientinfo();
this._xm_clientinfo.ss = Date.now();
this._xm_clientinfo.se = Date.now();
};
var _xm_loadend = function () {
if (typeof this._xm_clientinfo == 'undefined') return;
if (this._xm_clientinfo.es == 0) {
this._xm_clientinfo.es = Date.now();
this._xm_clientinfo.ee = Date.now();
}
this._xm_clientinfo.tid = this.getResponseHeader(_XM_TID_HEADER);
var traceElapseTime = this.getResponseHeader(_XM_TRACE_ELAPSE_HEADER);
if (typeof traceElapseTime == 'undefined' || typeof this._xm_clientinfo.tid == 'undefined') {
return;
}
if (traceElapseTime > this._xm_clientinfo.ee - this._xm_clientinfo.ss) {
return;
}
var _xm_clientinfo = this._xm_clientinfo;
__xm_send_post(_xm_clientinfo);
};
function __xm_create_clientinfo() {
var clientinfo = {};
clientinfo.tid = 0;
clientinfo.ss = 0;
clientinfo.se = 0;
clientinfo.es = 0;
clientinfo.ee = 0;
return clientinfo;
}
function __xm_send_post(clientinfo) {
try{
var queryParameters = 'tid=' + clientinfo.tid + '&ss=' + clientinfo.ss + "&se=" + clientinfo.se;
queryParameters += '&es=' + clientinfo.es + "&ee=" + clientinfo.ee;
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
if(_XM_CLIENT_ADDR == "") {
xmlhttp.open('GET', './'+_XM_CLIENT_API+'?' + queryParameters, true);
}else{
xmlhttp.open('GET', 'http://' + _XM_CLIENT_ADDR + '/' + _XM_CLIENT_API + '?' + queryParameters, true);
}
xmlhttp.send(null);
if (true) {
var sendElapseTime = clientinfo.se - clientinfo.ss;
var recvElapseTime = clientinfo.ee - clientinfo.es;
var serverElapseTime = clientinfo.es - clientinfo.se;
console.log('__xm_send_post serverElapseTime=' + serverElapseTime + ', sendElapseTime=' + sendElapseTime + ', recvElapseTime=' + recvElapseTime);
}
}
catch(e) {
console.log(e);
}
}
var _xm_window_load = function () {
//return;
setTimeout(function () {
var timing = window.performance.timing;
var clientinfo = __xm_create_clientinfo();
clientinfo.ss = timing.navigationStart;
clientinfo.se = timing.connectEnd;
clientinfo.es = timing.responseEnd;
clientinfo.ee = timing.loadEventEnd;
clientinfo.tid = _XM_TID;
if (_XM_TRACE_ELAPSE > clientinfo.ee - clientinfo.ss) {
return;
}
__xm_send_post(clientinfo);
}, 0);
};
if (!window.performance || !window.performance.timing) {
return;
}
if (this.addEventListener) {
this.addEventListener("load", _xm_window_load);
}
else if (this.attachEvent) {
this.attachEvent("onload", _xm_window_load);
}
})();