gulp-bird
Version:
bird-v2
132 lines (118 loc) • 4.47 kB
JavaScript
/**
* vConsole System Tab
*
* @author WechatFE
*/
import * as tool from '../lib/tool.js';
import VConsoleLogTab from './log.js';
import tplTabbox from './tabbox_system.html';
class VConsoleSystemTab extends VConsoleLogTab {
constructor(...args) {
super(...args);
this.tplTabbox = tplTabbox;
this.allowUnformattedLog = false; // only logs begin with `[system]` can be displayed
}
onInit() {
super.onInit();
this.printSystemInfo();
}
printSystemInfo() {
// print system info
let ua = navigator.userAgent,
logMsg = '';
// device & system
let ipod = ua.match(/(ipod).*\s([\d_]+)/i),
ipad = ua.match(/(ipad).*\s([\d_]+)/i),
iphone = ua.match(/(iphone)\sos\s([\d_]+)/i),
android = ua.match(/(android)\s([\d\.]+)/i);
logMsg = 'Unknown';
if (android) {
logMsg = 'Android ' + android[2];
} else if (iphone) {
logMsg = 'iPhone, iOS ' + iphone[2].replace(/_/g,'.');
} else if (ipad) {
logMsg = 'iPad, iOS ' + ipad[2].replace(/_/g, '.');
} else if (ipod) {
logMsg = 'iPod, iOS ' + ipod[2].replace(/_/g, '.');
}
let templogMsg = logMsg;
// wechat client version
let version = ua.match(/MicroMessenger\/([\d\.]+)/i);
logMsg = 'Unknown';
if (version && version[1]) {
logMsg = version[1];
templogMsg += (', WeChat ' + logMsg);
console.info('[system]', 'System:', templogMsg);
} else {
console.info('[system]', 'System:', templogMsg);
}
// HTTP protocol
logMsg = 'Unknown';
if (location.protocol == 'https:') {
logMsg = 'HTTPS';
} else if (location.protocol == 'http:') {
logMsg = 'HTTP';
} else {
logMsg = location.protocol.replace(':', '');
}
templogMsg = logMsg;
// network type
let network = ua.toLowerCase().match(/ nettype\/([^ ]+)/g);
logMsg = 'Unknown';
if (network && network[0]) {
network = network[0].split('/');
logMsg = network[1];
templogMsg += (', ' + logMsg);
console.info('[system]', 'Network:', templogMsg);
} else {
console.info('[system]', 'Protocol:', templogMsg);
}
// User Agent
console.info('[system]', 'UA:', ua);
// performance related
// use `setTimeout` to make sure all timing points are available
setTimeout(function() {
let performance = window.performance || window.msPerformance || window.webkitPerformance;
// timing
if (performance && performance.timing) {
let t = performance.timing;
if (t.navigationStart) {
console.info('[system]', 'navigationStart:', t.navigationStart);
}
if (t.navigationStart && t.domainLookupStart) {
console.info('[system]', 'navigation:', (t.domainLookupStart - t.navigationStart)+'ms');
}
if (t.domainLookupEnd && t.domainLookupStart) {
console.info('[system]', 'dns:', (t.domainLookupEnd - t.domainLookupStart)+'ms');
}
if (t.connectEnd && t.connectStart) {
if (t.connectEnd && t.secureConnectionStart) {
console.info('[system]', 'tcp (ssl):', (t.connectEnd - t.connectStart)+'ms ('+(t.connectEnd - t.secureConnectionStart)+'ms)');
} else {
console.info('[system]', 'tcp:', (t.connectEnd - t.connectStart)+'ms');
}
}
if (t.responseStart && t.requestStart) {
console.info('[system]', 'request:', (t.responseStart - t.requestStart)+'ms');
}
if (t.responseEnd && t.responseStart) {
console.info('[system]', 'response:', (t.responseEnd - t.responseStart)+'ms');
}
if (t.domComplete && t.domLoading) {
if (t.domContentLoadedEventStart && t.domLoading) {
console.info('[system]', 'domComplete (domLoaded):', (t.domComplete - t.domLoading)+'ms ('+(t.domContentLoadedEventStart - t.domLoading)+'ms)');
} else {
console.info('[system]', 'domComplete:', (t.domComplete - t.domLoading)+'ms');
}
}
if (t.loadEventEnd && t.loadEventStart) {
console.info('[system]', 'loadEvent:', (t.loadEventEnd - t.loadEventStart)+'ms');
}
if (t.navigationStart && t.loadEventEnd) {
console.info('[system]', 'total (DOM):', (t.loadEventEnd - t.navigationStart)+'ms ('+(t.domComplete - t.navigationStart)+'ms)');
}
}
}, 0);
}
} // END class
export default VConsoleSystemTab;