コード例 #1
0
ファイル: Remote.php プロジェクト: nkammah/Crash-Analytics
 /**
  * (non-PHPdoc)
  * @see \Bootstrap\Button::getHtml()
  */
 public function getHtml()
 {
     if (sizeof($this->params) > 0) {
         $this->data('params', base64_encode(\Koldy\Json::encode($this->params)));
     }
     return parent::getHtml();
 }
コード例 #2
0
ファイル: Remote.php プロジェクト: nkammah/Crash-Analytics
 /**
  * (non-PHPdoc)
  * @see \Bootstrap\HtmlElement::getHtml()
  */
 public function getHtml()
 {
     if ($this->searchEnabled) {
         $search = '<form class="form-inline x-remote-search-form" role="form">' . '<div class="form-group">' . '<label class="sr-only" for="search">Search</label>' . '<input type="search" class="form-control input-sm animate-width" id="search" placeholder="Search" style="width:80px;">' . '<button type="reset" class="btn btn-xs btn-link">' . \Bootstrap::icon('remove-circle') . '</button>' . '</div>' . '</form>';
         $this->panel->addHeaderElement($search);
     }
     if ($this->collapsible !== null) {
         $this->panel->collapsible($this->collapsible);
     }
     $footer = '<div class="row">' . '<div class="col-md-6 x-remote-table-info"></div>' . '<div class="col-md-6 x-remote-table-pagination text-right"></div>' . '</div>';
     $this->panel->footer($footer);
     $this->table->data('url', $this->url === null ? $_SERVER['REQUEST_URI'] : $this->url);
     $this->table->data('page', $this->startPage);
     $this->table->data('limit', 10);
     $this->table->data('field', $this->sortField === null ? $this->table->getPrimaryKey() : $this->sortField);
     $this->table->data('dir', $this->sortDirection);
     $this->table->data('extra-params', base64_encode(Json::encode($this->extraParams)));
     $this->panel->content($this->table);
     return $this->panel->getHtml();
 }
コード例 #3
0
 public function getStackTraceAjax()
 {
     $params = Input::requireParams('id');
     $id = (int) $params->id;
     if ($id <= 0) {
         throw new Exception('Invalid ID');
     }
     $submit = Crash\Submit::fetchOne('id', $id);
     if ($submit === false) {
         throw new Exception('Can not find stack trace');
     }
     return Json::create(array('success' => true, 'stack_trace' => $submit->stack_trace));
 }
コード例 #4
0
ファイル: Model.php プロジェクト: nkammah/Crash-Analytics
 public function __toString()
 {
     return \Koldy\Json::encode($this->getData());
 }
コード例 #5
0
ファイル: Submit.php プロジェクト: nkammah/Crash-Analytics
 /**
  * Process the request
  * @param string $os 'Android','iOS' or 'Windows'
  *
  * TODO: This logic shouldn't be in the model
  */
 public static function processRequest($os)
 {
     if (!isset($_POST['PACKAGE_NAME'])) {
         Log::warning('Package name is not set! UAS=' . Request::userAgent() . ' POST=' . Json::encode($_POST));
     }
     $time = time();
     $ip = $_SERVER['REMOTE_ADDR'];
     $host = gethostbyaddr($ip);
     $country = null;
     $provider = null;
     if ($host != $ip && strpos($host, '.') !== false) {
         $country = strtolower(substr($host, strrpos($host, '.') + 1));
         if (strlen($country) != 2) {
             $country = null;
         }
         $provider = \Provider::normalizeHostName($host);
     }
     Log::notice("Got request time={$time} host={$host} country={$country}");
     $values = array('created_at', 'package_name', 'app_version_code', 'app_version_name', 'brand', 'phone_model', 'product', 'stack_trace', 'android_version', 'file_path', 'total_mem_size', 'available_mem_size', 'user_comment', 'user_app_start_date', 'user_crash_date', 'installation_id', 'report_id', 'user_email');
     $data = array();
     $vals = $_POST;
     foreach ($values as $key) {
         $key = strtoupper($key);
         if (isset($vals[$key])) {
             $data[$key] = trim($vals[$key]);
             unset($vals[$key]);
         }
     }
     if (isset($data['user_email']) && ($data['user_email'] == 'N/A' || trim($data['user_email']) == '')) {
         $data['user_email'] = null;
     }
     $data['created_at'] = gmdate('Y-m-d H:i:s');
     $data['country'] = $country;
     $data['provider'] = $provider;
     $data['os'] = $os;
     $secureCount = 0;
     do {
         $submit = static::create($data);
         if ($submit === false) {
             Db::getAdapter()->close();
             Log::info("Failed to insert crash submit report for time={$time}, waiting 5 seconds");
             set_time_limit(60);
             sleep(5);
             Db::getAdapter()->reconnect();
             Log::info("Retry {$secureCount} insert crash submit report for time={$time}");
         }
     } while ($submit === false && $secureCount++ < 3);
     if ($submit !== false) {
         foreach ($vals as $metaName => $metaValue) {
             if ($metaValue !== null) {
                 $metaValue = trim($metaValue);
                 if (strlen($metaValue) > 0) {
                     $secureCount = 0;
                     do {
                         $dbMeta = $submit->insertMeta(strtolower($metaName), trim($metaValue));
                         if ($dbMeta === false) {
                             Db::getAdapter()->close();
                             Log::info("Failed to insert submit meta for meta={$metaName} time={$time}, waiting 5 seconds");
                             set_time_limit(60);
                             sleep(5);
                             Db::getAdapter()->reconnect();
                             Log::info("Retry {$secureCount} meta insert for meta={$metaName} time={$time}");
                         }
                     } while ($dbMeta === false && $secureCount++ < 2);
                 }
             }
         }
     }
     \Email\Trigger::processRequest($_POST);
     Log::notice("Done request time={$time}");
 }
コード例 #6
0
 /**
  * I'm sure you sometimes want to show nice error to user! Well, if you call
  * Application::error(404), then it will end up here. This kind of errors are meant
  * only to show nice error to user. If you also want to log this or alert anyone that
  * this happened, then do that before calling Application::error() method.
  * 
  * @param int $code The HTTP error code
  * @param string $message Optional message that will be visible to user
  * @param \Exception $e Optional exception, if any. Be careful, you might not
  * want to show the exceptions to users, but you would like to show it to developers? Then
  * use Application::inDevelopment() and inProduction() methods.
  */
 public function error($code, $message = null, \Exception $e = null)
 {
     if (!headers_sent()) {
         switch ($code) {
             case 400:
                 header('HTTP/1.0 400 Bad Request', true, 400);
                 if ($message === null) {
                     $message = 'Bad request';
                 }
                 break;
             case 403:
                 header('HTTP/1.0 403 Forbidden', true, 403);
                 if ($message === null) {
                     $message = 'Forbidden';
                 }
                 break;
             case 404:
                 header('HTTP/1.0 404 Not Found', true, 404);
                 if ($message === null) {
                     $message = 'Page Not Found';
                 }
                 break;
             case 500:
                 header('HTTP/1.0 500 Internal Server Error', true, 500);
                 if ($message === null) {
                     $message = 'Internal Server Error';
                 }
                 break;
             case 503:
                 header('HTTP/1.1 503 Service Temporarily Unavailable', true, 503);
                 header('Status: 503 Service Temporarily Unavailable');
                 header('Retry-After: 300');
                 // 300 seconds / 5 minutes
                 if ($message === null) {
                     $message = 'Service Temporarily Unavailable';
                 }
                 break;
         }
     }
     if ($message === null) {
         $message = 'Page Not Found';
     }
     if ($this->isAjax()) {
         $data = array('success' => false, 'type' => 'http', 'code' => $code, 'message' => $message, 'exception' => $e !== null && Application::inDevelopment() ? $e->getMessage() : null);
         Json::create($data)->flush();
     } else {
         $path = Application::getPublicPath("{$code}.php");
         if (file_exists($path)) {
             $exception = $e;
             include $path;
         } else {
             // i don't know how to handle this message now!?
             throw new Exception($message === null ? 'Error ' . $code : $message);
         }
     }
     exit(0);
 }