Path: blob/master/src/applications/config/controller/services/PhabricatorConfigClusterSearchController.php
12262 views
<?php12final class PhabricatorConfigClusterSearchController3extends PhabricatorConfigServicesController {45public function handleRequest(AphrontRequest $request) {6$title = pht('Search Servers');7$doc_href = PhabricatorEnv::getDoclink('Cluster: Search');89$button = id(new PHUIButtonView())10->setIcon('fa-book')11->setHref($doc_href)12->setTag('a')13->setText(pht('Documentation'));1415$header = $this->buildHeaderView($title, $button);1617$search_status = $this->buildClusterSearchStatus();1819$crumbs = $this->newCrumbs()20->addTextCrumb($title);2122$content = id(new PHUITwoColumnView())23->setHeader($header)24->setFooter($search_status);2526$nav = $this->newNavigation('search-servers');2728return $this->newPage()29->setTitle($title)30->setCrumbs($crumbs)31->setNavigation($nav)32->appendChild($content);33}3435private function buildClusterSearchStatus() {36$viewer = $this->getViewer();3738$services = PhabricatorSearchService::getAllServices();39Javelin::initBehavior('phabricator-tooltips');4041$view = array();42foreach ($services as $service) {43$view[] = $this->renderStatusView($service);44}45return $view;46}4748private function renderStatusView($service) {49$head = array_merge(50array(pht('Type')),51array_keys($service->getStatusViewColumns()),52array(pht('Status')));5354$rows = array();5556$status_map = PhabricatorSearchService::getConnectionStatusMap();57$stats = false;58$stats_view = false;5960foreach ($service->getHosts() as $host) {61try {62$status = $host->getConnectionStatus();63$status = idx($status_map, $status, array());64} catch (Exception $ex) {65$status['icon'] = 'fa-times';66$status['label'] = pht('Connection Error');67$status['color'] = 'red';68$host->didHealthCheck(false);69}7071if (!$stats_view) {72try {73$stats = $host->getEngine()->getIndexStats($host);74$stats_view = $this->renderIndexStats($stats);75} catch (Exception $e) {76$stats_view = false;77}78}7980$type_icon = 'fa-search sky';81$type_tip = $host->getDisplayName();8283$type_icon = id(new PHUIIconView())84->setIcon($type_icon);85$status_view = array(86id(new PHUIIconView())->setIcon($status['icon'].' '.$status['color']),87' ',88$status['label'],89);90$row = array(array($type_icon, ' ', $type_tip));91$row = array_merge($row, array_values(92$host->getStatusViewColumns()));93$row[] = $status_view;94$rows[] = $row;95}9697$table = id(new AphrontTableView($rows))98->setNoDataString(pht('No search servers are configured.'))99->setHeaders($head);100101$view = $this->buildConfigBoxView(pht('Search Servers'), $table);102103$stats = null;104if ($stats_view->hasAnyProperties()) {105$stats = $this->buildConfigBoxView(106pht('%s Stats', $service->getDisplayName()),107$stats_view);108}109110return array($stats, $view);111}112113private function renderIndexStats($stats) {114$view = id(new PHUIPropertyListView());115if ($stats !== false) {116foreach ($stats as $label => $val) {117$view->addProperty($label, $val);118}119}120return $view;121}122123}124125126