public static function findAllLineEcharts()
 {
     #获得所有错误类型
     $allErrorsType = \common\models\ApplicateName::find()->asArray()->select('appname')->where('logtype=0')->all();
     foreach ($allErrorsType as $oneDate) {
         $fitAllErrorsType[] = $oneDate['appname'];
     }
     $whereString = implode(',', $fitAllErrorsType);
     #获得最近五天的数据
     $fitDate = date('Y-m-d 00:00:00');
     $after5Date = date('Y-m-d 00:00:00', strtotime('-5 day', strtotime($fitDate)));
     $fiveDateLists = \common\models\ErrorLogDay::find()->where(["ApplicationId" => $fitAllErrorsType])->andWhere('Date>:sd AND Date<=:ed', [':sd' => $after5Date, ':ed' => $fitDate])->asArray()->orderBy("Date desc")->All();
     //如果为空,就取最后一个时间,以最后一个时间点为准
     //标记是否为最新的数据
     $isToday = true;
     if (empty($fiveDateLists)) {
         $lastDay = \common\models\ErrorLogDay::find()->orderBy("Id desc")->one();
         if (empty($lastDay)) {
             return [];
         }
         $fitDate = date('Y-m-d 00:00:00', strtotime($lastDay->Date));
         $after5Date = date('Y-m-d 00:00:00', strtotime('-5 day', strtotime($fitDate)));
         $fiveDateLists = \common\models\ErrorLogDay::find()->where(["ApplicationId" => $fitAllErrorsType])->andWhere('Date>:sd AND Date<=:ed', [':sd' => $after5Date, ':ed' => $fitDate])->asArray()->orderBy("Date desc")->All();
         if (empty($fiveDateLists)) {
             return [];
         }
         $isToday = false;
     }
     #//开始处理这五天的数据
     $fitdates = [];
     foreach ($fiveDateLists as $key => $oneDate) {
         //处理成2016-5-6形式的日期
         $toIntDay = date("Y-m-d", strtotime($oneDate['Date']));
         $fitdates[$oneDate['ApplicationId']][$toIntDay] = floatval($oneDate['Number']);
     }
     #对处理了的数据再处理一遍,不存在的数据加上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\ErrorLog::find()->select("count(*) nums,ApplicationId")->where('AddDate>:sd AND AddDate<=:ed', [':sd' => $fitDate, ':ed' => $after1Date])->groupBy('ApplicationId')->indexBy('ApplicationId')->asArray()->all();
         //对上面的数组进行处理
         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;
 }
Esempio n. 2
0
 private static function errorLogItems($search_time, $times, $appname_list, $add_type)
 {
     $item_arr = array();
     for ($i = 1; $i <= $times; $i++) {
         $format_search_time = date("Y-m-d", $search_time);
         foreach ($appname_list as $appname) {
             $item_arr[$format_search_time][$appname] = 0;
         }
         if ($add_type == 'month') {
             $cur_time_format = date("Ym", $search_time);
             $datas = ErrorLogMonth::find()->where("Month=:cur_time", [":cur_time" => $cur_time_format])->orderBy("id asc")->all();
         } else {
             $format_time = date("Y-m-d H:i:s", $search_time);
             $datas = ErrorLogDay::find()->where(["Date" => $format_time])->all();
         }
         foreach ($datas as $data) {
             if (in_array($data['ApplicationId'], $appname_list)) {
                 $item_arr[$format_search_time][$data['ApplicationId']] = $data['Number'];
             }
         }
         if ($add_type == 'month') {
             $search_time = strtotime("+1 month", $search_time);
         } else {
             $search_time = strtotime("+1 day", $search_time);
         }
     }
     return $item_arr;
 }