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