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"); }
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")); } }); }
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(); }
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); }