Esempio n. 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;
 }
Esempio n. 2
0
 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());
 }