public function dbscanDataAction() { $db = $this->container->getDBUtils(); $jobid = Utils::get_GET_string("jobid"); $metric_x = Utils::get_GET_int("metric_x") !== null ? Utils::get_GET_int("metric_x") : 0; $metric_y = Utils::get_GET_int("metric_y") !== null ? Utils::get_GET_int("metric_y") : 1; $task_type = $db->get_task_type(Utils::get_GET_string("task_type")); $heuristic = Utils::get_GET_int("heuristic") !== null ? Utils::get_GET_int("heuristic") : 1; $eps = Utils::get_GET_float("eps") !== null ? Utils::get_GET_float("eps") : 250000; $minPoints = Utils::get_GET_int("minPoints") !== null ? Utils::get_GET_int("minPoints") : 1; // Heuristic: let DBSCAN choose the parameters if ($heuristic) { $eps = $minPoints = null; } $dbscan = $db->get_dbscan($jobid, $metric_x, $metric_y, $task_type, $eps, $minPoints); $seriesData = array(); foreach ($dbscan->getClusters() as $cluster) { $data = array(); foreach ($cluster as $point) { $task_id = $point->info['task_id']; $task_value_x = $point->x; $task_value_y = $point->y; $data[] = array('x' => $task_value_x, 'y' => $task_value_y, 'task_id' => $task_id); } if ($data) { $seriesData[] = array('points' => $data, 'size' => $cluster->count(), 'x_min' => $cluster->getXMin(), 'x_max' => $cluster->getXMax(), 'y_min' => $cluster->getYMin(), 'y_max' => $cluster->getYMax()); } } $noiseData = array(); foreach ($dbscan->getNoise() as $point) { $task_id = $point->info['task_id']; $task_value_x = $point->x; $task_value_y = $point->y; $noiseData[] = array('x' => $task_value_x, 'y' => $task_value_y, 'task_id' => $task_id); } $result = ['seriesData' => $seriesData, 'noiseData' => $noiseData, 'heuristic' => $heuristic, 'eps' => $dbscan->getEps(), 'minPoints' => $dbscan->getMinPoints()]; header('Content-Type: application/json'); ob_start('ob_gzhandler'); echo json_encode($result, JSON_NUMERIC_CHECK); }