/** * 按ApplicationId统计错误的数量 * @return array */ public static function countErrorByApplicationId() { //查找Error的appname $application_query = new Query(); $application_query->select("id,appname,lastupdatetime,logtotal")->from("ApplicateName")->where("logtype=0"); //1-Error类型 0-trace $application_list = $application_query->all(); $appname_list = array(); foreach ($application_list as $value) { $appname_list[] = $value['appname']; } #更新统计数据 if ($application_list) { foreach ($application_list as $oneAppValue) { if (empty($oneAppValue['lastupdatetime'])) { $oneAppValue['lateupdatetime'] = date('Y-m-d H:i:s'); } #获得最新统计数据 $nums = ErrorLog::find()->where('ApplicationId=:appid AND AddDate>=:addDate', [':appid' => $oneAppValue['appname'], ':addDate' => $oneAppValue['lastupdatetime']])->count(); #更新当前最新统计 $updatenums = $oneAppValue['logtotal'] + $nums; $lastupdatetime = date('Y-m-d H:i:s'); ApplicateName::updateAll(['logtotal' => $updatenums, 'lastupdatetime' => $lastupdatetime], 'id=:id', [':id' => $oneAppValue['id']]); } } #获得没有统计在ApplicateName里的错误信息 #由于有自动任务的处理所以每次更新的时候以前两天的数据再统计一次不存在的数据就可以了,以前两天为了有个时间宽度作保证 $lastvaluetime = date('Y-m-d H:i:s', strtotime('-2 day')); if ($appname_list) { $listString = implode("','", $appname_list); $listString = "'" . $listString . "'"; $sql = "insert into ApplicateName(`appname`,`newname`,`logtotal`,`logtype`,`lastupdatetime`) select ApplicationId,ApplicationId,count(*),0,now() from ErrorLog where ApplicationId not in({$listString}) AND AddDate>='{$lastvaluetime}' group by ApplicationId"; \Yii::$app->db->createCommand($sql)->execute(); } //重新获取ErrorLog的统计数据 $error_query = new Query(); $error_query->select("logtotal as total,appname as ApplicationId")->from("ApplicateName")->where(["in", "appname", $appname_list])->where("logtype=0")->groupBy("appname"); $error_count_list = $error_query->all(); return $error_count_list; }
/** * 错误类型 * @param bool $isReturnData * @return array */ public static function getTraceCategory($isReturnData = true) { if ($isReturnData) { //统计表数据 $appNameTotal = ApplicateName::find()->select("id,appname,logtotal,lastupdatetime")->where(['logtype' => 1])->asArray()->all(); if ($appNameTotal) { foreach ($appNameTotal as $oneAppValue) { if (empty($oneAppValue['lastupdatetime'])) { $oneAppValue['lateupdatetime'] = date('Y-m-d H:i:s'); } #获得最新统计数据 $nums = TraceLog::find()->where('ApplicationId=:appid AND AddDate>=:addDate', [':appid' => $oneAppValue['appname'], ':addDate' => $oneAppValue['lastupdatetime']])->count(); #更新当前最新统计 $updatenums = $oneAppValue['logtotal'] + $nums; $lastupdatetime = date('Y-m-d H:i:s'); ApplicateName::updateAll(['logtotal' => $updatenums, 'lastupdatetime' => $lastupdatetime], 'id=:id', [':id' => $oneAppValue['id']]); } $appname_list = ArrayHelper::map($appNameTotal, 'logtotal', 'appname'); } #获得没有统计在ApplicateName里的错误信息 #由于有自动任务的处理所以每次更新的时候以前两天的数据再统计一次不存在的数据就可以了,以前两天为了有个时间宽度作保证 $lastvaluetime = date('Y-m-d H:i:s', strtotime('-1 day')); if ($appname_list) { $listString = implode("','", $appname_list); $listString = "'" . $listString . "'"; $sql = "insert into ApplicateName(`appname`,`newname`,`logtotal`,`logtype`,`lastupdatetime`) select ApplicationId,ApplicationId,count(*),1,now() from TraceLog where ApplicationId not in({$listString}) AND AddDate>='{$lastvaluetime}' group by ApplicationId"; \Yii::$app->db->createCommand($sql)->execute(); } //重新获取TraceLog的统计数据 $error_query = new Query(); $error_query->select("logtotal as total,appname as ApplicationId")->from("ApplicateName")->where("logtype=1")->groupBy("appname"); $error_count_lists = $error_query->all(); $error_count_list = ArrayHelper::map($error_count_lists, 'ApplicationId', 'total'); //$total['name'] = '跟踪日志列表'; arsort($error_count_list); foreach ($error_count_list as $k => $v) { $category[] = trim($k); $total['data'][] = floatval($v); } return ['category' => $category, 'series' => [$total]]; } else { $ApplicationIds = ApplicateName::find()->select('appname as ApplicationId')->where(['logtype' => 1])->asArray()->all(); foreach ($ApplicationIds as $k => $v) { $category[] = trim($v['ApplicationId']); } if (!$isReturnData) { return $category; } } }