TTS Framework - JavaScript assets.
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.
 
tts_js/core/addons/logger.js

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
*/