rn-blockmonitor
Version:
block monitor
1 lines • 5.03 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});exports.StartMonitor=StartMonitor;var _MessageQueue=require('react-native/Libraries/BatchedBridge/MessageQueue');var _MessageQueue2=_interopRequireDefault(_MessageQueue);var _reactNative=require('react-native');var _houseMiddlewareSdk=require('house-middleware-sdk');var _houseMiddlewareSdk2=_interopRequireDefault(_houseMiddlewareSdk);var _BMLinkList=require('./BMLinkList');var _reactNativeDeviceInfo=require('react-native-device-info');var _reactNativeDeviceInfo2=_interopRequireDefault(_reactNativeDeviceInfo);function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}var JSEventLoopWatchdog=require('./BMJSEventLoopWatchdog');var isPause=false;_reactNative.AppState.addEventListener('change',function(nextAppState){if(nextAppState=='background'||nextAppState=='inactive'){console.log('========================view_pause========================');isPause=true;}else if(nextAppState=='active'){console.log('========================view_resume========================');if(isPause){JSEventLoopWatchdog.reset();isPause=false;}}});var blockStack=[];function saveStall(busyTime,lastInterval,now){if(global.origin){if(!showBroserLog)return;}if(!global.callStack){return;}if(!uploadStackUrl||uploadStackUrl.length===0)return;var stack=void 0;if(global.callStack&&global.callStack.getUploadData){stack=global.callStack.getUploadData(busyTime,lastInterval,now,thresholdInterval);}if(stack){blockStack.push({type:'BLOCK',blockTime:busyTime,callStack:stack,pageName:global.CURRENT_PAGE});}}function buildHeader(data){var header={};if(!data||!data.os){header.imei=_reactNativeDeviceInfo2.default.getUniqueId();header.device=_reactNativeDeviceInfo2.default.getBrand()+'-'+_reactNativeDeviceInfo2.default.getModel();header.version=_reactNativeDeviceInfo2.default.getVersion();data={os:Platform.OS,osv:_reactNativeDeviceInfo2.default.getSystemVersion()};}else{header.imei=global.IS_ANDROID?data.imei:data.openudid;header.device=global.IS_ANDROID?data.brand+'-'+data.ua:data.ua.split('_')[0];header.version=data.version;}header.insectVersion='2.1.0';header.appName=global.CURRENT_PACKAGE;header.os='RN-'+data.os+'-'+data.osv;header['Content-Type']='application/x-www-form-urlencoded';return header;}function buildBody(){var dataList=[];blockStack.map(function(v){var dataObject={};dataObject.page=global.CURRENT_PAGE;dataObject.type='4';dataObject.stackInfo=v.callStack;dataObject.blockTime=v.blockTime;dataObject.ext1='';dataObject.ext2={bundleId:global.BUNDLE_ID};dataList.push(dataObject);return false;});return'data='+JSON.stringify(dataList);}function status(response){if(response.status>=200&&response.status<300){return Promise.resolve(response);}return Promise.reject(new Error(response.statusText));}function toJson(response){return new Promise(function(resolve,reject){response.json().then(function(jsonData){resolve(jsonData);}).catch(function(e){reject(e);});});}function error(e){return Promise.reject(e);}function uploadBlock(){if(global.origin){return;}if(__DEV__){if(!offlineUploadStackSwitchOn)return;}else if(!onlineUploadStackSwitchOn)return;if(!uploadStackUrl||uploadStackUrl.length===0)return;setTimeout(function(){if(blockStack.length>0){Promise.race([new Promise(function(resolve){_houseMiddlewareSdk2.default.initNativeParams(function(initParams){resolve(initParams);},true);}).then(function(initParams){return fetch(uploadStackUrl,{method:'POST',headers:buildHeader(initParams.httpHeader),body:buildBody()});}).then(status).then(toJson).catch(error),new Promise(function(resolve,reject){return setTimeout(function(){reject(new Error('网络超时'));},10000);})]).then(function(res){if(res.status===0){blockStack.splice(0,blockStack.length);}}).catch();}uploadBlock();},5000);}var BMMonitor={register:function register(){global.CURRENT_PAGE='INIT';console.log('Index','start');JSEventLoopWatchdog.install({thresholdMS:thresholdInterval});uploadBlock();var spyBuffer=[];_MessageQueue2.default.spy(function(data){spyBuffer.push(data);});JSEventLoopWatchdog.addHandler({onStall:function onStall(_ref){var busyTime=_ref.busyTime,lastInterval=_ref.lastInterval,now=_ref.now;if(isPause)return;saveStall(busyTime,lastInterval,now);},onIterate:function onIterate(){spyBuffer=[];}});}};var thresholdInterval=global.origin?200:200;var uploadStackUrl=null;var onlineUploadStackSwitchOn=true;var offlineUploadStackSwitchOn=false;var stopWatchdog=false;var showBroserLog=false;function StartMonitor(config){if(!config){return;}stopWatchdog=config.stopWatchdog;if(stopWatchdog){JSEventLoopWatchdog.stop();return;}uploadStackUrl=config.uploadStackUrl;onlineUploadStackSwitchOn=config.onlineUploadStackSwitchOn;offlineUploadStackSwitchOn=config.offlineUploadStackSwitchOn;showBroserLog=config.showBroserLog;if(!global.callStack){global.callStack=new _BMLinkList.BMLinkList();global.callStack.setMaxStackSize(config.recordLength);global.callStack.setShowLocalConsoleLogByTimeInterval(config.showLocalConsoleLogByTimeInterval);}BMMonitor.register();}