Пример #1
0
 /**
  * Constructor.
  *
  * @param string $name The name of the application
  * @param string $version The version of the application
  *
  * @api
  */
 public function __construct($name = 'UNKNOWN', $version = 'UNKNOWN')
 {
     parent::__construct('Pimcore CLI', Version::getVersion());
     // init default autoload namespaces
     $this->initDefaultAutoloadNamespaces();
     // allow to register commands here (e.g. through plugins)
     \Pimcore::getEventManager()->trigger('system.console.init', $this);
     $dispatcher = new EventDispatcher();
     $this->setDispatcher($dispatcher);
     $dispatcher->addListener(ConsoleEvents::COMMAND, function (ConsoleCommandEvent $event) {
         if ($event->getInput()->getOption("maintenance-mode")) {
             // enable maintenance mode if requested
             $maintenanceModeId = 'cache-warming-dummy-session-id';
             $event->getOutput()->writeln('Activating maintenance mode with ID <comment>' . $maintenanceModeId . '</comment> ...');
             Admin::activateMaintenanceMode($maintenanceModeId);
         }
     });
     $dispatcher->addListener(ConsoleEvents::TERMINATE, function (ConsoleTerminateEvent $event) {
         if ($event->getInput()->getOption("maintenance-mode")) {
             $event->getOutput()->writeln('Deactivating maintenance mode...');
             Admin::deactivateMaintenanceMode();
         }
     });
 }
 /**
  * Enable maintenance mode if --maintenanceMode option was passed
  */
 protected function enableMaintenanceMode()
 {
     // enable maintenance mode if requested
     if ($this->input->getOption('maintenanceMode')) {
         $maintenanceModeId = 'cache-warming-dummy-session-id';
         $this->output->writeln('Activating maintenance mode with ID <comment>%s</comment>...', $maintenanceModeId);
         Admin::activateMaintenanceMode($maintenanceModeId);
         // set the timeout between each iteration to 0 if maintenance mode is on, because
         // we don't have to care about the load on the server
         Warming::setTimoutBetweenIteration(0);
     }
 }
Пример #3
0
 public function maintenanceAction()
 {
     $this->checkPermission("maintenance_mode");
     if ($this->getParam("activate")) {
         Tool\Admin::activateMaintenanceMode();
     }
     if ($this->getParam("deactivate")) {
         Tool\Admin::deactivateMaintenanceMode();
     }
     $this->_helper->json(["success" => true]);
 }
Пример #4
0
chdir(__DIR__);
include_once "startup.php";
use Pimcore\Cache\Tool\Warming as Warmer;
try {
    $opts = new \Zend_Console_Getopt(array('types|t=s' => 'perform warming only for this types of elements (comma separated), valid arguments: document,asset,object (default: all types)', "documentTypes|dt=s" => "only for these types of documents (comma separated), valid arguments: page,snippet,folder,link (default: all types)", "assetTypes|at=s" => "only for these types of assets (comma separated), valid arguments: folder,image,text,audio,video,document,archive,unknown (default: all types)", "objectTypes|ot=s" => "only for these types of objects (comma separated), valid arguments: object,folder,variant (default: all types)", "classes|c=s" => "this is only for objects! filter by class (comma separated), valid arguments: class-names of your classes defined in pimcore", "maintenanceMode|m" => "enable maintenance mode during cache warming", 'verbose|v' => 'show detailed information during the maintenance (for debug, ...)', 'help|h' => 'display this help'));
} catch (Exception $e) {
    echo $e->getMessage();
}
// display help message
if ($opts->getOption("help")) {
    echo $opts->getUsageMessage();
    exit;
}
// enable maintenance mode if requested
if ($opts->getOption("maintenanceMode")) {
    \Pimcore\Tool\Admin::activateMaintenanceMode("cache-warming-dummy-session-id");
    // set the timeout between each iteration to 0 if maintenance mode is on, because we don't have to care about the load on the server
    Warmer::setTimoutBetweenIteration(0);
}
if ($opts->getOption("verbose")) {
    $writer = new \Zend_Log_Writer_Stream('php://output');
    $logger = new \Zend_Log($writer);
    \Logger::addLogger($logger);
    // set all priorities
    \Logger::setVerbosePriorities();
}
// get valid types (default all types)
$types = array("document", "asset", "object");
if ($opts->getOption("types")) {
    $types = explode(",", $opts->getOption("types"));
}
Пример #5
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $currentRevision = null;
     if ($input->getOption("source-build")) {
         $currentRevision = $input->getOption("source-build");
     }
     $availableUpdates = Update::getAvailableUpdates($currentRevision);
     if ($input->getOption("list")) {
         if (count($availableUpdates["releases"])) {
             $rows = [];
             foreach ($availableUpdates["releases"] as $release) {
                 $rows[] = [$release["version"], date("Y-m-d", $release["date"]), $release["id"]];
             }
             $table = new Table($output);
             $table->setHeaders(['Version', 'Date', 'Build'])->setRows($rows);
             $table->render();
         }
         if (count($availableUpdates["revisions"])) {
             $this->output->writeln("The latest available build is: <comment>" . $availableUpdates["revisions"][0]["id"] . "</comment> (" . date("Y-m-d", $availableUpdates["revisions"][0]["date"]) . ")");
         }
         if (!count($availableUpdates["releases"]) && !count($availableUpdates["revisions"])) {
             $this->output->writeln("<info>No updates available</info>");
         }
     }
     if ($input->getOption("update")) {
         $returnMessages = [];
         $build = null;
         $updateInfo = trim($input->getOption("update"));
         if (is_numeric($updateInfo)) {
             $build = $updateInfo;
         } else {
             // get build nr. by version number
             foreach ($availableUpdates["releases"] as $release) {
                 if ($release["version"] == $updateInfo) {
                     $build = $release["id"];
                     break;
                 }
             }
         }
         if (!$build) {
             $this->writeError("Update with build / version " . $updateInfo . " not found.");
             exit;
         }
         if (!Update::isWriteable()) {
             $this->writeError(PIMCORE_PATH . " is not recursivly writable, please check!");
             exit;
         }
         if (!Update::isComposerAvailable()) {
             $this->writeError("Composer is not installed properly, please ensure composer is in your PATH variable.");
             exit;
         }
         $helper = $this->getHelper('question');
         $question = new ConfirmationQuestion("You are going to update to build {$build}! Continue with this action? (y/n)", false);
         if (!$helper->ask($input, $output, $question)) {
             return;
         }
         $this->output->writeln("Starting the update process ...");
         if ($input->getOption("dry-run")) {
             $this->output->writeln("<info>---------- DRY-RUN ----------</info>");
         }
         $jobs = Update::getJobs($build, $currentRevision);
         $steps = count($jobs["parallel"]) + count($jobs["procedural"]);
         $progress = new ProgressBar($output, $steps);
         $progress->start();
         foreach ($jobs["parallel"] as $job) {
             if ($job["type"] == "download") {
                 Update::downloadData($job["revision"], $job["url"]);
             }
             $progress->advance();
         }
         $maintenanceModeId = 'cache-warming-dummy-session-id';
         Admin::activateMaintenanceMode($maintenanceModeId);
         $stoppedByError = false;
         foreach ($jobs["procedural"] as $job) {
             if ($input->getOption("dry-run")) {
                 $job["dry-run"] = true;
             }
             $script = realpath(PIMCORE_PATH . DIRECTORY_SEPARATOR . "cli" . DIRECTORY_SEPARATOR . "console.php");
             $return = Console::runPhpScript($script, "internal:update-processor " . escapeshellarg(json_encode($job)));
             $return = trim($return);
             $returnData = @json_decode($return, true);
             if (is_array($returnData)) {
                 if (trim($returnData["message"])) {
                     $returnMessages[] = [$job["revision"], strip_tags($returnData["message"])];
                 }
                 if (!$returnData["success"]) {
                     $stoppedByError = true;
                     break;
                 }
             } else {
                 $stoppedByError = true;
                 break;
             }
             $progress->advance();
         }
         $progress->finish();
         Update::composerDumpAutoload();
         Admin::deactivateMaintenanceMode();
         $this->output->writeln("\n");
         if ($stoppedByError) {
             $this->output->writeln("<error>Update stopped by error! Please check your logs</error>");
             $this->output->writeln("Last return value was: " . $return);
         } else {
             $this->output->writeln("<info>Update done!</info>");
             if (count($returnMessages)) {
                 $table = new Table($output);
                 $table->setHeaders(['Build', 'Message'])->setRows($returnMessages);
                 $table->render();
             }
         }
     }
 }