<?php
/**
  * @method 监控
  * @author soul
  * @copyright 2017/6/15
  */
class OthMonitor
{
	/**
	  * @method 获取统计的限制规则
	  * @author soul
	  * @copyright 2020/1/16
	  * @return 
	  */
	public function getTjReg($cache = true)
	{
		$expire = 120;
		$apiActReg = [];
		$file = mvc::$cfg['AUTOLOAD']['Oth']['path'].'cache/tjActReg.php';
		if(!file_exists($file) || !$cache || filemtime($file) < (time()-$expire))
		{
			$LibYpApi = new LibYpApi();
			$res = $LibYpApi->Get('rabbit/getTjReg');
			$apiActReg = $res['data'];
			LibFc::ArraySave($apiActReg, $file);
		}
		else
		{//括起来为了防止读取文件失败
			$apiActReg = include($file);
		}
		return LibFc::ReturnData(true, $apiActReg);
	}


	/**
	  * @method 检测是否可以通过请求
	  * @param  $funName  
	  * @param  $tokenArr  
	  * @author soul
	  * @copyright 2017/6/15
	  * @return 
	  */
	public function checkPjDMainPass($funName, $tokenArr)
	{
		$_SESSION['MAIN_MONITOR'] = ['tj'=>false, 'tj_act'=>$funName, 'data'=>[]];
		$arr = ['pass'=>0, 'tj'=>0]; 
		$res = $this->buidPjlMainTjData($funName, $tokenArr, 0);
		$tjArr = $res['data'];
	
		$res = $this->getTjReg();
		$tjRegArr = $res['data'];
		
		$uact = trim(strtoupper($funName));
		if(mvc::$cfg['MAIN_MONITOR']['status'] && !empty($tjRegArr[$tjArr['tj_site']][$uact]))
		{
			$arr['tj'] = 1; 
			$postArr = [
				'act'=>mvc::$cfg['MAIN_MONITOR']['act'],
				'msg'=>$tjArr
			];
			$LibYpApi = new LibYpApi();
			$res = $LibYpApi->Get('rabbit/onlyCheckMonitor', [], $postArr);
			$arr = $res['data'];
			if(!$arr['pass'])
			{
				return LibFc::ReturnData(false, $arr['msg'], $arr['code']);
			}
		}
		else
		{
			$arr['pass'] = 1; 
		}
		$_SESSION['MAIN_MONITOR']['tj'] = $arr['pass'] && $arr['tj'];
		return LibFc::ReturnData(true, $arr);
	}


	/**
	  * @method 收集统计数据
	  * @param  $cfg  
	  * @param  $funName  
	  * @param  $tokenArr 
	  * @author soul
	  * @copyright 2017/6/15
	  * @return 
	  */
	public function collMainTongji($tokenArr)
	{
		if($_SESSION['MAIN_MONITOR']['tj'])
		{
			if((isset($_SESSION['MAIN_MONITOR']['selftj']) && $_SESSION['MAIN_MONITOR']['selftj']) || !isset($_SESSION['MAIN_MONITOR']['selftj']))
			{
				$res = $this->buidPjlMainTjData($_SESSION['MAIN_MONITOR']['tj_act'], $tokenArr, 1);
				$postArr = [
					'act'=>mvc::$cfg['MAIN_MONITOR']['act'],
					'msg'=>$res['data']
				];
				$LibYpApi = new LibYpApi();
				$LibYpApi->Get('rabbit/collTongji', [], $postArr);
			}
		}
	}


	/**
	  * @method 自动生成API统计数据
	  * @param $funName string [必填] 调用方法 data/vinDecode
	  * @param $tokenArr array [必填] token数据
	  * @param $type int [选填] 0基本信息  1统计信息
	  * @author soul
	  * @copyright 2016/3/30
	  * @return 
	  */
	public function buidPjlMainTjData($funName, $tokenArr, $type = 1)
	{
		$arr = [
			'tj_site'=>'PJD',
			'tj_uid'=>$tokenArr['uid'],	
			'tj_ip'=>$tokenArr['ip'],
			'tj_from'=>$tokenArr['from'],
			'tj_shopid'=>$tokenArr['shopid'],
			'tj_act'=>$funName,
			'tj_devcode'=>$tokenArr['devcode'],
			'tj_time'=>time()
		];
		
		if($type)
		{
			$reqData = !empty($_REQUEST)? $_REQUEST: [];
			if(is_array(mvc::$URL_PARAMS)) $reqData = array_merge(mvc::$URL_PARAMS, $reqData);
			foreach(['from', 'ip', 'devcode', 'token', 'isAjax'] as $filed)
			{
				if(isset($reqData[$filed])) unset($reqData[$filed]);
			}
			$reqData = array_merge($reqData, $_SESSION['MAIN_MONITOR']['data']);
			$reqData['agent'] = $_SERVER['HTTP_USER_AGENT'];
			$reqData['port'] = $tokenArr['port'];
			$arr['tj_param'] = json_encode($reqData);
		}
		return LibFc::ReturnData(true, $arr);
	}
}
?>