public function init($initialiser = null)
 {
     $toolbarConfig = $this->config("bundl\\debugtoolbar");
     $baseUrl = $toolbarConfig->getStr("base_url", '/_debugbar');
     if (starts_with($baseUrl, '/')) {
         $passthroughs = $this->config("dispatch")->getArr("passthrough");
         if (!isset($passthroughs[substr($baseUrl, 1)])) {
             throw new \Exception("Please add the following to your defaults.ini within [dispatch]\n" . "passthrough[" . substr($baseUrl, 1) . "] = " . "../vendor/maximebf/debugbar/src/DebugBar/Resources");
         }
     }
     EventManager::listen(EventManager::CUBEX_WEBPAGE_RENDER_BODY, [$this, "renderBody"]);
     EventManager::listen(EventManager::CUBEX_WEBPAGE_RENDER_HEAD, [$this, "renderHead"]);
     EventManager::listen(EventManager::CUBEX_LOG, [$this, "catchLog"]);
     $this->_debugBar = new DebugBar();
     $this->_debugBar->addCollector(new PhpInfoCollector());
     $this->_debugBar->addCollector(new MessagesCollector());
     $this->_debugBar->addCollector(new TranslationDataCollector());
     $this->_debugBar->addCollector(new RequestDataCollector());
     $this->_debugBar->addCollector(new CubexCoreTimeData());
     $this->_debugBar->addCollector(new CassandraDataCollector());
     $this->_debugBar->addCollector(new QueryDataCollector());
     $this->_debugBar->addCollector(new MemoryCollector());
     $this->_debugBar->addCollector(new ExceptionsCollector());
     $this->_debugRender = $this->_debugBar->getJavascriptRenderer();
     $this->_debugRender->setBaseUrl($baseUrl);
 }
 public function __construct($requestStartTime = null)
 {
     parent::__construct($requestStartTime);
     if (class_exists('\\Cubex\\Cassandra\\ColumnFamily')) {
         EventManager::listen(\Cubex\Cassandra\ColumnFamily::QUERY_EVENT, [$this, "getQuery"]);
     }
 }
 public function __construct()
 {
     $this->_stopwatchCollection = new StopwatchCollection();
     $this->_profilingStats = new ProfilingStats();
     $this->_stopwatchCollection->setDisplayAllInReport(false);
     $this->_addDefaultTimers();
     EventManager::listen(Events::DISPLAY_REPORT_END, [$this, 'displayReport']);
 }
 public function __construct($requestStartTime = null)
 {
     parent::__construct($requestStartTime);
     EventManager::listen(EventManager::CUBEX_TIMETRACK_START, [$this, "trackStart"]);
     EventManager::listen(EventManager::CUBEX_TIMETRACK_END, [$this, "trackEnd"]);
     //$this->addMeasure("Starting Project", PHP_START, microtime(true));
     $this->startMeasure("project.dispatch", "Dispatching Project");
 }
Exemple #5
0
 public function init($initialiser = null)
 {
     EventManager::listen(EventManager::CUBEX_QUERY, function (IEvent $e) {
         if (CUBEX_CLI) {
             Log::debug("Query: " . $e->getStr("query"));
         } else {
             var_dump($e->getStr("query"));
         }
     });
 }
Exemple #6
0
 public function init($initialiser = null)
 {
     $config = Container::config()->get("rollbar", new Config());
     $token = $config->getStr("post_server_item", null);
     $this->_logLevel = $config->getStr("log_level", LogLevel::WARNING);
     $config = ['access_token' => $token, 'environment' => CUBEX_ENV, 'root' => CUBEX_PROJECT_ROOT];
     if (class_exists('\\Bundl\\Sidekix\\SidekixBundl')) {
         $info = SidekixBundl::getDiffuseVersionInfo();
         if ($info && isset($info['version'])) {
             $config['code_version'] = $info['version'];
         }
     }
     // installs global error and exception handlers
     \Rollbar::init($config);
     EventManager::listen(EventManager::CUBEX_LOG, [$this, "log"]);
 }
 private function _generatePrettyReport(TokenRange $currentRange, $now, $rangeStartTime, $rangeTotal, $rangeProcessed, $rangeErrors, $currentRate, $rangeSkipped, $totalSkipped, $totalDuration, $averageRate, $lastKey)
 {
     $t = new TextTable(new ReportTableDecorator());
     $t->appendSubHeading('Current Range ' . Shell::colourText("(" . $currentRange->id() . ")", Shell::COLOUR_FOREGROUND_LIGHT_GREY));
     $t->appendRows([['Start token', $currentRange->startToken], ['End token', $currentRange->endToken], ['First key', $currentRange->firstKey], ['Last key', $currentRange->lastKey]]);
     $t->appendSubHeading('Range statistics');
     $t->appendRows([['Processing time', DateTimeHelper::secondsToTime($now - $rangeStartTime)], ['Total items', number_format($rangeTotal)], ['Processed items', number_format($rangeProcessed)], ['Skipped', number_format($rangeSkipped)], ['Errors', number_format($rangeErrors)], ['Processing rate', number_format($currentRate) . ' items/second']]);
     $t->appendSubHeading('Total');
     $t->appendRows([['Processing time', DateTimeHelper::secondsToTime($totalDuration)], ['Total items', number_format($this->totalItems)], ['Processed items', number_format($this->processedItems)], ['Skipped', number_format($totalSkipped)], ['Errors', number_format($this->errors)], ['Processing rate', number_format($averageRate) . ' items/second']]);
     $t->appendSpacer();
     $t->appendRow(['Last key seen', $lastKey]);
     ob_start();
     echo $_REQUEST['__path__'] . "\n";
     echo $t;
     EventManager::trigger(Events::DISPLAY_REPORT_END);
     return ob_get_clean();
 }
 public function __construct($requestStartTime = null)
 {
     parent::__construct($requestStartTime);
     EventManager::listen(EventManager::CUBEX_QUERY, [$this, "getQuery"]);
 }
 public function saveChanges($validate = false, $processAll = false, $failFirst = false)
 {
     EventManager::trigger(Events::RANGE_SAVE_CHANGES_START);
     parent::saveChanges($validate, $processAll, $failFirst);
     EventManager::trigger(Events::RANGE_SAVE_CHANGES_END);
 }
 private function _generatePrettyReport(BucketRange $currentRange, $now, $rangeStartTime, $rangeTotal, $rangeProcessed, $currentRate, $rangeSkipped, $totalSkipped, $totalDuration, $averageRate, $lastObject)
 {
     $t = new TextTable(new ReportTableDecorator());
     $t->appendSubHeading('Current Range ' . Shell::colourText("(" . $currentRange->id() . ")", Shell::COLOUR_FOREGROUND_LIGHT_GREY));
     $t->appendRow(['Prefix', $currentRange->prefix]);
     $t->appendSubHeading('Range statistics');
     $t->appendRows([['Processing time', DateTimeHelper::secondsToTime($now - $rangeStartTime)], ['Total items', number_format($rangeTotal)], ['Processed items', number_format($rangeProcessed)], ['Skipped', number_format($rangeSkipped)], ['Processing rate', number_format($currentRate) . ' items/second']]);
     $t->appendSubHeading('Total');
     $t->appendRows([['Processing time', DateTimeHelper::secondsToTime($totalDuration)], ['Total items', number_format($this->totalItems)], ['Processed items', number_format($this->processedItems)], ['Skipped', number_format($totalSkipped)], ['Processing rate', number_format($averageRate) . ' items/second']]);
     $t->appendSpacer();
     $t->appendRow(['Last object seen', $lastObject]);
     ob_start();
     EventManager::trigger(Events::DISPLAY_REPORT_START);
     echo $t;
     EventManager::trigger(Events::DISPLAY_REPORT_END);
     return ob_get_clean();
 }
Exemple #11
0
 public function init($initialiser = null)
 {
     EventManager::listen(EventManager::CUBEX_PROJECT_PREPARE, [$this, "projectPrepare"]);
 }
 public function processRange(BucketRange $range)
 {
     Log::info('Processing range ' . $range->id());
     $this->_statsReporter->nextRange($range);
     $this->_processor->resetRangeData();
     $listOpts = ['Bucket' => $this->_bucketName, 'MaxKeys' => $this->_batchSize, 'Prefix' => $range->prefix];
     try {
         if ($this->_processor->shouldSaveProgress() && !empty($range->lastObject)) {
             $lastObject = $range->lastObject;
             Log::info('Continuing from key ' . $lastObject);
         } else {
             $lastObject = "";
         }
         $gcs = $this->_getGCS();
         $finished = false;
         while (!$finished) {
             if ($lastObject != "") {
                 $listOpts['Marker'] = $lastObject;
             }
             EventManager::trigger(Events::LIST_BUCKET_START);
             $objects = $gcs->listObjects($listOpts);
             EventManager::trigger(Events::LIST_BUCKET_END);
             $numObjects = count($objects['Contents']);
             if ($numObjects > 0) {
                 $items = [];
                 foreach ($objects['Contents'] as $object) {
                     $items[] = new ObjectInfo($object['Key'], $object['Size'], $object['ETag'], $object['LastModified']);
                 }
                 $batchProcessed = $this->_processor->processBatch($items);
                 $lastObjectObj = end($items);
                 $lastObject = $lastObjectObj->objectKey;
                 $range->lastObject = $lastObject;
                 $this->_statsReporter->addItems($numObjects, $batchProcessed);
                 if ($this->_processor->shouldSaveProgress()) {
                     $range->rangeData = $this->_processor->getRangeData();
                     $range->saveChanges();
                 }
             } else {
                 Log::info('Finished processing range ' . $range->prefix . ' (' . $this->_statsReporter->rangeTotalItems . ' total items)');
                 $finished = true;
             }
             $this->_statsReporter->displayReport();
         }
         RangeManager::rangeProcessed($range, $this->_statsReporter->rangeStartTime, $this->_processor->getRangeData());
     } catch (\Exception $e) {
         $msg = "Code " . $e->getCode();
         $exMsg = $e->getMessage();
         if ($exMsg != "") {
             $msg .= ": " . $exMsg;
         }
         Log::error('Error processing range: ' . $msg . "\n\nBacktrace:\n" . $e->getTraceAsString());
         if ($this->_processor->isFatalException($e)) {
             RangeManager::rangeFailed($range, $this->_statsReporter->rangeStartTime, $msg);
         } else {
             RangeManager::requeueRange($range, $this->_statsReporter->rangeStartTime, $msg);
         }
     }
 }
 public function processRange(TokenRange $range)
 {
     Log::info("Processing range ID " . $range->id() . " from '" . $range->firstKey . "' to '" . $range->lastKey . "'...");
     $this->_batchSizeTuner->reset();
     $totalItems = 0;
     $processedItems = 0;
     $errors = 0;
     $rangeStartTime = microtime(true);
     $this->_processor->resetRangeData();
     try {
         $cf = $this->_getCF();
         $cols = $this->_processor->requiredColumns();
         if (is_numeric($cols)) {
             $cols = new SlicePredicate(['slice_range' => $cf->makeSlice('', '', false, $cols)]);
         }
         $lastKey = $range->firstKey ? $range->firstKey : "";
         $rangeLastKey = $range->lastKey ? $range->lastKey : "";
         $finished = false;
         while (!$finished) {
             $this->_batchSizeTuner->nextBatch();
             $batchSize = $this->_batchSizeTuner->getBatchSize();
             $items = $this->_getKeysWithRetry($cf, $lastKey, $rangeLastKey, $batchSize, $cols);
             //$items = $cf->getKeys($lastKey, $rangeLastKey, $batchSize, $cols);
             if (!$items) {
                 Log::info("Found no more items in range");
                 break;
             }
             // Skip the last item in the range because this will be the
             // first item in the next range
             if ($rangeLastKey != "" && last_key($items) == $rangeLastKey) {
                 array_pop($items);
             }
             if ($this->_processor->supportsBatchProcessing()) {
                 try {
                     EventManager::trigger(Events::PROCESS_BATCH_START);
                     $batchProcessed = $this->_processor->processBatch($items);
                     EventManager::trigger(Events::PROCESS_BATCH_END);
                     $processedItems += $batchProcessed;
                     $totalItems += count($items);
                     $this->_statsReporter->processedItems += $batchProcessed;
                     $this->_statsReporter->totalItems += count($items);
                 } catch (BatchException $e) {
                     $errors += $e->getErrorCount();
                     $this->_statsReporter->errors += $e->getErrorCount();
                     $msg = $e->getMessage();
                     if ($msg != "") {
                         $msg = 'Error processing batch: ' . $msg;
                     }
                     Log::error($msg);
                     if ($this->_processor->stopOnErrors()) {
                         die;
                     }
                 }
             } else {
                 foreach ($items as $key => $itemData) {
                     try {
                         if ($this->_processor->processItem($key, $itemData)) {
                             $processedItems++;
                             $this->_statsReporter->processedItems++;
                         }
                     } catch (ItemException $e) {
                         $errors++;
                         $this->_statsReporter->errors++;
                         Log::error('Error processing item ' . $key . ' : ' . $e->getMessage());
                         if ($this->_processor->stopOnErrors()) {
                             die;
                         }
                     }
                     $totalItems++;
                     $this->_statsReporter->totalItems++;
                 }
             }
             $lastKey = last_key($items);
             if ($this->_processor->shouldSaveProgress()) {
                 $this->_scriptProgress->save($range->firstKey, $lastKey);
             }
             if ($lastKey == $rangeLastKey || count($items) < $batchSize) {
                 $finished = true;
             }
             $this->_statsReporter->displayReport($finished, $range, $totalItems, $processedItems, $errors, $rangeStartTime, $lastKey);
             if ($errors > 0) {
                 break;
             }
         }
         $rangeData = $this->_processor->getRangeData();
         $range->rangeData = $rangeData ? json_encode($rangeData) : '';
         $range->failed = 0;
         $range->error = "";
     } catch (\Exception $e) {
         $msg = "Code " . $e->getCode();
         $exMsg = $e->getMessage();
         if ($exMsg != "") {
             $msg .= ": " . $exMsg;
         }
         Log::error('Error processing range: ' . $msg . "\n\nBacktrace:\n" . $e->getTraceAsString());
         $range->error = $msg;
         // Check for non-fatal errors (i.e. Cassandra timeouts)
         if ($e instanceof CassandraException && ($e->getCode() == 408 || $e->getCode() == 503 || starts_with($e->getMessage(), 'TSocket: timed out'))) {
             $errors++;
         } else {
             $range->failed = 1;
         }
     }
     if ($errors > 0) {
         $this->_requeueRange($range);
     } else {
         $range->processing = 0;
         $range->processed = 1;
         $range->processingTime = microtime(true) - $rangeStartTime;
         $range->totalItems = $totalItems;
         $range->processedItems = $processedItems;
         $range->errorCount = $errors;
         $range->saveChanges();
     }
 }
 public function __construct()
 {
     EventManager::listen(RequestDataCollector::REQUESTDATACOLLECTOR_ADDITIONAL, [$this, "addAdditionalEvent"]);
 }
 public function __construct()
 {
     EventManager::spy(EventManager::CUBEX_TRANSLATE_T, [$this, "listenT"]);
     EventManager::spy(EventManager::CUBEX_TRANSLATE_P, [$this, "listenP"]);
 }
 public function saveChanges()
 {
     EventManager::trigger(Events::RANGE_SAVE_CHANGES_START);
     parent::saveChanges();
     EventManager::trigger(Events::RANGE_SAVE_CHANGES_END);
 }