public function search($params)
 {
     $query = AccessLogErrorStatus::find();
     $dataProvider = new ActiveDataProvider(['query' => $query, 'sort' => ['defaultOrder' => ['request_time' => SORT_DESC]]]);
     $this->load($params);
     if (!$this->validate()) {
         return $dataProvider;
     }
     if ($this->request_time) {
         $this->start_date = $this->request_time;
         $this->end_date = date('Y-m-d 00:00:00', strtotime('+1 day', strtotime($this->start_date)));
     }
     $query->andFilterWhere(['error_status' => $this->error_status]);
     $query->andFilterWhere(['user_ip' => $this->user_ip]);
     $query->andFilterWhere(['source' => $this->source]);
     $query->andFilterWhere(['log_type' => $this->log_type]);
     $query->andFilterWhere(['>=', 'request_time', $this->start_date]);
     $query->andFilterWhere(['<', 'request_time', $this->end_date]);
     return $dataProvider;
 }
예제 #2
0
 public static function addErrorStatusLog($status, $access_address, $user_ip1, $source, $short_name, $request_time)
 {
     if ($status < 400) {
         return;
     }
     $as = new AccessLogErrorStatus();
     $as->error_status = $status;
     $as->request_url = $access_address;
     $as->user_ip = $user_ip1;
     $as->source = strval($source);
     $as->log_type = $short_name;
     $as->request_time = $request_time;
     $as->add_time = date("Y-m-d H:i:s");
     $as->save();
 }
 /**
  * 获得最近五天的错误状态进行展示
  * @return type
  */
 public static function findAllLineEcharts()
 {
     #获得最近五天的数据
     $fitDate = date('Y-m-d 00:00:00');
     $after5Date = date('Y-m-d 00:00:00', strtotime('-5 day', strtotime($fitDate)));
     $fiveDateLists = AccessLogErrorStatusDay::find()->Where('StatisticDate>:sd AND StatisticDate<=:ed', [':sd' => $after5Date, ':ed' => $fitDate])->asArray()->orderBy("StatisticDate desc")->All(\Yii::$app->db1);
     //如果为空,就取最后一个时间,以最后一个时间点为准
     //标记是否为最新的数据
     $isToday = true;
     if (empty($fiveDateLists)) {
         $lastDay = AccessLogErrorStatusDay::find()->orderBy("Id desc")->one(\Yii::$app->db1);
         if (empty($lastDay)) {
             return [];
         }
         $fitDate = date('Y-m-d 00:00:00', strtotime($lastDay->StatisticDate));
         $after5Date = date('Y-m-d 00:00:00', strtotime('-5 day', strtotime($fitDate)));
         $fiveDateLists = AccessLogErrorStatusDay::find()->Where('StatisticDate>:sd AND StatisticDate<=:ed', [':sd' => $after5Date, ':ed' => $fitDate])->asArray()->orderBy("StatisticDate desc")->All(\Yii::$app->db1);
         if (empty($fiveDateLists)) {
             return [];
         }
         $isToday = false;
     }
     #//开始处理这五天的数据
     $fitdates = [];
     foreach ($fiveDateLists as $key => $oneDate) {
         //处理成2016-5-6形式的日期
         $toIntDay = date("Y-m-d", strtotime($oneDate['StatisticDate']));
         $fitdates[$oneDate['error_status']][$toIntDay] = floatval($oneDate['Amount']);
     }
     #对处理了的数据再处理一遍,不存在的数据加上0
     $outCharts = [];
     $outCharts['categories'] = [];
     $outCharts['series'] = [];
     foreach ($fitdates as $key => $oneDate) {
         $start_date = date('Y-m-d', strtotime($fitDate));
         for ($i = 1; $i <= 5; $i++) {
             if (!in_array($start_date, $outCharts['categories'])) {
                 $outCharts['categories'][] = $start_date;
             }
             if (!isset($oneDate[$start_date])) {
                 $fitdates[$key][$start_date] = 0;
             }
             $start_date = date('Y-m-d', strtotime("-1 day", strtotime($start_date)));
         }
         ksort($fitdates[$key]);
     }
     foreach ($fitdates as $key => $oneDate) {
         $outCharts['series'][] = ['name' => '' . $key, 'type' => 'line', 'smooth' => true, 'data' => array_values($oneDate)];
         $outCharts['toptip'][] = '' . $key;
     }
     $outCharts['categories'] = array_reverse($outCharts['categories']);
     //标记是否为今天的数据,如果是今天的数据,那么对今天的数据进行实时统计处理
     if ($isToday) {
         $fitDate = date('Y-m-d 00:00:00');
         $after1Date = date('Y-m-d 00:00:00', strtotime('+1 day', strtotime($fitDate)));
         //因为上面已经做了判断,所以今天的数据肯定会存在
         //获得今天最新的数据
         $errorstatusLists = \common\models\AccessLogErrorStatus::find()->select("count(*) nums,error_status")->where('request_time>:sd AND request_time<=:ed', [':sd' => $fitDate, ':ed' => $after1Date])->groupBy('error_status')->indexBy('error_status')->asArray()->all(\Yii::$app->db1);
         //对上面的数组进行处理
         foreach ($outCharts['series'] as $key => $oneVaue) {
             //把最近一个元素推出
             array_pop($outCharts['series'][$key]['data']);
             //推入一个新元素
             //如果没有这个数组就推入一个0的数据
             if (!isset($errorstatusLists[$oneVaue['name']]['nums'])) {
                 array_push($outCharts['series'][$key]['data'], 0);
             } else {
                 array_push($outCharts['series'][$key]['data'], floatval($errorstatusLists[$oneVaue['name']]['nums']));
             }
         }
     }
     return $outCharts;
 }