You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
5.8 KiB
143 lines
5.8 KiB
/*
|
|
* Begin Logger
|
|
* @author Robert Strutts
|
|
* @copyright 2019
|
|
* @license MIT
|
|
*/
|
|
|
|
tts.time = function () {
|
|
var now = new Date(), hours = now.getHours() % 12 || 12, minutes = now.getMinutes(), seconds = now.getSeconds(), XM = (now.getHours() < 12) ? "AM" : "PM", formmated = hours + ":" + minutes + ":" + seconds + " " + XM;
|
|
return formmated;
|
|
};
|
|
tts.debugMode = true;
|
|
tts.doTrace = false;
|
|
var startTimer = [], endTimer = [], time = [], beginCodeTimer = 0, loggerData = [{message: navigator.userAgent, kind: "userAgent", option: ""}];
|
|
tts.allowedElapsedTime = 4000;
|
|
tts.completedCodeTimer = 0;
|
|
tts.startCodeTimer = function () {
|
|
beginCodeTimer = Date.now();
|
|
};
|
|
tts.endCodeTimer = function () {
|
|
tts.completedCodeTimer = Date.now() - beginCodeTimer;
|
|
loggerData.push({message: "Toal Code Time Elapsed", kind: "MainTimer", option: tts.completedCodeTimer});
|
|
if (tts.completedCodeTimer > tts.allowedElapsedTime) {
|
|
tts.sendReport();
|
|
}
|
|
};
|
|
tts.getLoggerData = loggerData;
|
|
tts.logger = function (message, level, option) {
|
|
if (typeof level === "undefined") {
|
|
level = "info";
|
|
}
|
|
if (typeof option === "undefined") {
|
|
option = "";
|
|
}
|
|
if (tts.debugMode === false || !window.console) {
|
|
return false;
|
|
}
|
|
if (typeof message === "object") {
|
|
message = `[ ${tts.time()} ] ` + JSON.stringify(message);
|
|
} else {
|
|
message = `[ ${tts.time()} ] ${message}`;
|
|
}
|
|
if (level === "microStart" || level === "start") {
|
|
console.group(message, option);
|
|
} else if (level === "microStop" || level === "stop") {
|
|
console.groupEnd(message, option);
|
|
} else {
|
|
loggerData.push({message: message, kind: level, option: option});
|
|
}
|
|
if (tts.doTrace && (level === "warn" || level === "error")) {
|
|
console.trace();
|
|
}
|
|
if (level === "info" && console.info) {
|
|
console.info(message);
|
|
} else if (level === "microStart" && performance.now) {
|
|
startTimer[option] = performance.now();
|
|
} else if (level === "microStop" && performance.now) {
|
|
endTimer[option] = performance.now();
|
|
var data = endTimer[option] - startTimer[option];
|
|
console.info(data);
|
|
loggerData.push({message: message, kind: level, option: data});
|
|
} else if (level === "warn" && console.warn) {
|
|
console.warn(message);
|
|
} else if (level === "error" && console.error) {
|
|
console.error(message);
|
|
} else if (level === "table" && console.table) {
|
|
console.table(message, option); /* option = Table Column */
|
|
} else if (level === "group" && console.group) {
|
|
console.group(message, option); /* option = Group Label */
|
|
} else if (level === "end" && console.groupEnd) {
|
|
console.groupEnd(message, option); /* option = Group Label */
|
|
} else if (level === "trace" && console.trace) {
|
|
console.trace();
|
|
} else if (level === "start" && console.time) {
|
|
console.time(option);
|
|
time[option] = Date.now();
|
|
} else if (level === "stop" && console.timeEnd) {
|
|
console.timeEnd(option);
|
|
var data = Date.now() - time[option];
|
|
loggerData.push({message: message, kind: level, option: data});
|
|
} else if (console.log) {
|
|
console.log(message); /* for Chorme Console is enabled */
|
|
}
|
|
};
|
|
tts.ReportsURL = "";
|
|
tts.sendReport = function (markComplete) {
|
|
return new Promise((resolve, reject) => {
|
|
if (tts.ReportsURL === "") {
|
|
reject();
|
|
} else {
|
|
var strValues = "&logs=" + encodeURI(JSON.stringify(loggerData));
|
|
if (sent_errors_yet === false) {
|
|
if (typeof markComplete === 'undefined') {
|
|
markComplete = false;
|
|
}
|
|
if (markComplete === true) {
|
|
sent_errors_yet = true;
|
|
}
|
|
tts.Post(tts.ReportsURL, strValues).then(values => {
|
|
resolve(values);
|
|
}).catch(errors => {
|
|
reject(errors);
|
|
});
|
|
}
|
|
}
|
|
});
|
|
};
|
|
var sent_errors_yet = false;
|
|
function errorReports(errorMsg, url, lineNumber, column, errorObj) {
|
|
if (tts.ReportsURL === "") {
|
|
return false;
|
|
}
|
|
if (errorMsg.indexOf('Script error.') > -1 || typeof errorMsg === "null") {
|
|
return; /* At the moment, we filter out the exceptions for iOS Safari and older Androids by checking if the error message is equal to “Script error.”. */
|
|
}
|
|
|
|
var strValues = "errMessage=" + encodeURI(errorMsg);
|
|
strValues += "&errLine=" + encodeURI(lineNumber);
|
|
if (typeof column !== "undeinfed" && typeof column !== "null") {
|
|
strValues += "&errColumn=" + encodeURI(column);
|
|
}
|
|
if (typeof errorObj !== "undeinfed" && typeof errorObj !== "null") {
|
|
strValues += "&errObject=" + encodeURI(errorObj);
|
|
}
|
|
strValues += "&queryString=" + encodeURI(location.search);
|
|
strValues += "&Url=" + encodeURI(url);
|
|
strValues += "&Path=" + encodeURI(location.pathname);
|
|
strValues += "&Hash=" + encodeURI(location.hash);
|
|
strValues += "&HTTPRef=" + encodeURI(document.referrer);
|
|
strValues += "&logs=" + encodeURI(JSON.stringify(loggerData));
|
|
if (sent_errors_yet === false) {
|
|
tts.Post(tts.ReportsURL, strValues);
|
|
}
|
|
sent_errors_yet = true;
|
|
}
|
|
try {
|
|
window.onerror = errorReports;
|
|
} catch (er) {
|
|
}
|
|
|
|
/*
|
|
* End of Logger
|
|
*/
|
|
|