Example #1
0
 public static function getProcessWindowHierarchy($winIdCluster, $fromTime, $toTime = null)
 {
     $query = Record::find();
     StatsHelper::whereFromTo($query, $fromTime, $toTime);
     $query->joinWith(['window', 'window.process']);
     $query->groupBy('window_id');
     $query->select(['SUM(duration) as duration', 'process_id', 'window_id', 'window.title']);
     $data = $query->createCommand()->queryAll();
     /** @var Process[] $processMap */
     //        $processMap = self::processMap();
     $groups = ['children' => [], 'name' => 'root'];
     // build tree of processes
     foreach ($data as $window) {
         if ((int) $window['duration'] == 0) {
             continue;
         }
         $clusterId = isset($winIdCluster[$window['window_id']]) ? $winIdCluster[$window['window_id']] : '-1';
         if (!isset($groups['children'][$clusterId])) {
             $groups['children'][$clusterId] = ['name' => 'Cluster #' . $clusterId, 'sector_id' => $clusterId, 'process_id' => $window['process_id'], 'children' => [], 'size' => 0];
         }
         $groups['children'][$clusterId]['children'][] = ['name' => $window['title'], 'window_id' => $window['window_id'], 'size' => (int) $window['duration'] / 1000];
         $groups['children'][$clusterId]['size'] += (int) $window['duration'] / 1000;
     }
     $groups['children'] = array_values($groups['children']);
     foreach ($groups['children'] as $key => $process) {
         usort($groups['children'][$key]['children'], function ($a, $b) {
             return $b['size'] - $a['size'];
         });
     }
     usort($groups['children'], function ($a, $b) {
         return $b['size'] - $a['size'];
     });
     return $groups;
 }
 public function clusterChart($searchModel)
 {
     $from = strtotime('today', $searchModel->timestampFrom);
     $to = strtotime('tomorrow', $searchModel->timestampTo);
     $query = Window::find()->select(['title'])->joinWith('records')->distinct(true)->orderBy('title');
     StatsHelper::whereFromTo($query, $from, $to);
     $titles = $query->createCommand()->queryColumn();
     $titles = array_filter($titles, function ($a) {
         return trim($a) != '';
     });
     $clusters = ClusterHelper::clusterizeStrings($titles);
     $clustersList = array_map(function ($a) {
         return ['id' => $a, 'name' => $a];
     }, array_unique(array_values($clusters)));
     $this->view->registerJs('var dashboardClusters = ' . json_encode($clustersList), View::POS_HEAD);
     $durations = ClusterHelper::getProcessWindowHierarchy($clusters, $from, $to);
     $this->view->registerJs('var dashboardClustersDurations = ' . json_encode($durations), View::POS_HEAD);
     $this->view->registerAssetBundle(SunburstAsset::className());
 }
Example #3
0
 /**
  * Action for data
  * @param array $fields
  * @return array
  * @throws BadRequestHttpException
  */
 public function actionData($fields = [])
 {
     Yii::$app->response->format = Response::FORMAT_JSON;
     $filter = new DateFilterForm();
     $reply = [];
     if (Yii::$app->request->isPost && $filter->load(Yii::$app->request->bodyParams, '') && $filter->validate()) {
         $from = strtotime('today', $filter->date ? $filter->date : time());
         $to = strtotime('tomorrow', $filter->date ? $filter->date : time());
         $reply = ['processList' => StatsHelper::getProcessList($from, $to)];
         if (empty($fields) || in_array('timeLine', $fields)) {
             $reply['timeLine'] = StatsHelper::timeline($from, $to);
         }
         if (empty($fields) || in_array('durationProcess', $fields)) {
             $reply['durationProcess'] = StatsHelper::getProcessWindowHierarchy($from, $to);
         }
         if (empty($fields) || in_array('durationTask', $fields)) {
             $reply['durationTask'] = StatsHelper::getTaskWindowHierarchy($from, $to);
         }
         if (empty($fields) || in_array('keys', $fields)) {
             $reply['keys'] = StatsHelper::keysActivity($from, $to);
         }
         if (empty($fields) || in_array('durationCluster', $fields)) {
             $clusterData = $this->clusterData($from, $to);
             $reply['clusterList'] = $clusterData['clusters'];
             $reply['durationCluster'] = $clusterData['durations'];
         }
     } else {
         throw new BadRequestHttpException();
     }
     return $reply;
 }
 public function actionTransitionMatrix()
 {
     $from = strtotime('today');
     $to = strtotime('tomorrow');
     $matrix = StatsHelper::transitionMatrix($from, $to);
     $windows = StatsHelper::windows($from, $to);
     $flattenMatrix = StatsHelper::flattenTransitionMatrix($matrix, $windows);
     foreach ($flattenMatrix as $key => $value) {
         echo $value['source'] . "\t" . $value['target'] . "\t" . $value['value'] . PHP_EOL;
     }
 }