public function renderModuleStatus(AphrontRequest $request)
 {
     $viewer = $request->getViewer();
     $handlers = AphrontRequestExceptionHandler::getAllHandlers();
     $rows = array();
     foreach ($handlers as $key => $handler) {
         $rows[] = array($handler->getRequestExceptionHandlerPriority(), $key, $handler->getRequestExceptionHandlerDescription());
     }
     return id(new AphrontTableView($rows))->setHeaders(array(pht('Priority'), pht('Class'), pht('Description')))->setColumnClasses(array(null, 'pri', 'wide'));
 }
 /**
  * Convert an exception which has escaped the controller into a response.
  *
  * This method delegates exception handling to available subclasses of
  * @{class:AphrontRequestExceptionHandler}.
  *
  * @param Exception Exception which needs to be handled.
  * @return wild Response or response producer, or null if no available
  *   handler can produce a response.
  * @task exception
  */
 private function handleException(Exception $ex)
 {
     $handlers = AphrontRequestExceptionHandler::getAllHandlers();
     $request = $this->getRequest();
     foreach ($handlers as $handler) {
         if ($handler->canHandleRequestException($request, $ex)) {
             $response = $handler->handleRequestException($request, $ex);
             $this->validateErrorHandlerResponse($handler, $response);
             return $response;
         }
     }
     throw $ex;
 }