view = idx($data, 'view'); } public function processRequest() { $request = $this->getRequest(); $nav = new AphrontSideNavView(); $links = array( 'calls' => 'All Calls', ); if (empty($links[$this->view])) { $this->view = key($links); } foreach ($links as $slug => $name) { $nav->addNavItem( phutil_render_tag( 'a', array( 'href' => '/conduit/log/view/'.$slug.'/', 'class' => ($slug == $this->view) ? 'aphront-side-nav-selected' : null, ), phutil_escape_html($name))); } $conn_table = new PhabricatorConduitConnectionLog(); $call_table = new PhabricatorConduitMethodCallLog(); $conn_r = $call_table->establishConnection('r'); $pager = new AphrontPagerView(); $pager->setOffset($request->getInt('page')); $calls = $call_table->loadAllWhere( '1 = 1 ORDER BY id DESC LIMIT %d, %d', $pager->getOffset(), $pager->getPageSize() + 1); $calls = $pager->sliceResults($calls); $pager->setURI(new PhutilURI('/conduit/log/view/'.$this->view.'/'), 'page'); $pager->setEnableKeyboardShortcuts(true); $min = $pager->getOffset() + 1; $max = ($min + count($calls) - 1); $conn_ids = array_filter(mpull($calls, 'getConnectionID')); $conns = array(); if ($conn_ids) { $conns = $conn_table->loadAllWhere( 'id IN (%Ld)', $conn_ids); } $table = $this->renderCallTable($calls, $conns); $panel = new AphrontPanelView(); $panel->setHeader('Conduit Method Calls ('.$min.'-'.$max.')'); $panel->appendChild($table); $panel->appendChild($pager); $nav->appendChild($panel); return $this->buildStandardPageResponse( $nav, array( 'title' => 'Conduit Logs', 'tab' => 'logs', )); } private function renderCallTable(array $calls, array $conns) { $user = $this->getRequest()->getUser(); $rows = array(); foreach ($calls as $call) { $conn = idx($conns, $call->getConnectionID()); if (!$conn) { // If there's no connection, use an empty object. $conn = new PhabricatorConduitConnectionLog(); } $rows[] = array( $call->getConnectionID(), phutil_escape_html($conn->getUserName()), phutil_escape_html($call->getMethod()), phutil_escape_html($call->getError()), number_format($call->getDuration()).' us', phabricator_datetime($call->getDateCreated(), $user), ); } $table = new AphrontTableView($rows); $table->setHeaders( array( 'Connection', 'User', 'Method', 'Error', 'Duration', 'Date', )); $table->setColumnClasses( array( '', '', 'wide', '', 'n', 'right', )); return $table; } }