vendor/elements/process-manager-bundle/src/ElementsProcessManagerBundle.php line 24

Open in your IDE?
  1. <?php
  2. /**
  3.  * Elements.at
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) elements.at New Media Solutions GmbH (https://www.elements.at)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace Elements\Bundle\ProcessManagerBundle;
  15. use Elements\Bundle\ProcessManagerBundle\Model\Configuration;
  16. use Elements\Bundle\ProcessManagerBundle\Model\MonitoringItem;
  17. use Pimcore\Extension\Bundle\AbstractPimcoreBundle;
  18. use Pimcore\Extension\Bundle\Traits\PackageVersionTrait;
  19. use Pimcore\Extension\Bundle\Traits\StateHelperTrait;
  20. class ElementsProcessManagerBundle extends AbstractPimcoreBundle
  21. {
  22.     use ExecutionTrait;
  23.     use PackageVersionTrait;
  24.     use StateHelperTrait;
  25.     public static $maintenanceOptions = [
  26.         'autoCreate' => true,
  27.         'name' => 'ProcessManager maintenance',
  28.         'loggers' => [
  29.             [
  30.                 'logLevel' => 'DEBUG',
  31.                 'class' => '\Elements\Bundle\ProcessManagerBundle\Executor\Logger\Console',
  32.                 'simpleLogFormat' => true
  33.             ],
  34.             [
  35.                 'logLevel' => 'DEBUG',
  36.                 'filepath' => '/var/logs/process-manager-maintenance.log',
  37.                 'class' => '\Elements\Bundle\ProcessManagerBundle\Executor\Logger\File',
  38.                 'simpleLogFormat' => true,
  39.                 'maxFileSizeMB' => 50
  40.             ]
  41.         ]
  42.     ];
  43.     protected static $_config null;
  44.     protected static $monitoringItem;
  45.     const PLUGIN_NAME 'ProcessManager';
  46.     const TABLE_NAME_CONFIGURATION 'plugin_process_manager_configuration';
  47.     const TABLE_NAME_MONITORING_ITEM 'plugin_process_manager_monitoring_item';
  48.     const TABLE_NAME_CALLBACK_SETTING 'plugin_process_manager_callback_setting';
  49.     const MONITORING_ITEM_ENV_VAR 'monitoringItemId';
  50.     /**
  51.      * @return array
  52.      */
  53.     public function getCssPaths()
  54.     {
  55.         return [
  56.             '/bundles/elementsprocessmanager/css/admin.css'
  57.         ];
  58.     }
  59.     /**
  60.      * @return array
  61.      */
  62.     public function getJsPaths()
  63.     {
  64.         return [
  65.             '/bundles/elementsprocessmanager/js/startup.js',
  66.             '/bundles/elementsprocessmanager/js/window/detailwindow.js',
  67.             '/bundles/elementsprocessmanager/js/helper/form.js',
  68.             '/bundles/elementsprocessmanager/js/panel/config.js',
  69.             '/bundles/elementsprocessmanager/js/panel/general.js',
  70.             '/bundles/elementsprocessmanager/js/panel/monitoringItem.js',
  71.             '/bundles/elementsprocessmanager/js/panel/callbackSetting.js',
  72.             '/bundles/elementsprocessmanager/js/executor/class/abstractExecutor.js',
  73.             '/bundles/elementsprocessmanager/js/executor/class/command.js',
  74.             '/bundles/elementsprocessmanager/js/executor/class/classMethod.js',
  75.             '/bundles/elementsprocessmanager/js/executor/class/pimcoreCommand.js',
  76.             '/bundles/elementsprocessmanager/js/executor/class/exportToolkit.js',
  77.             '/bundles/elementsprocessmanager/js/executor/class/phing.js',
  78.             '/bundles/elementsprocessmanager/js/executor/action/abstractAction.js',
  79.             '/bundles/elementsprocessmanager/js/executor/action/download.js',
  80.             '/bundles/elementsprocessmanager/js/executor/action/openItem.js',
  81.             '/bundles/elementsprocessmanager/js/executor/action/jsEvent.js',
  82.             '/bundles/elementsprocessmanager/js/executor/logger/abstractLogger.js',
  83.             '/bundles/elementsprocessmanager/js/executor/logger/file.js',
  84.             '/bundles/elementsprocessmanager/js/executor/logger/console.js',
  85.             '/bundles/elementsprocessmanager/js/executor/logger/application.js',
  86.             '/bundles/elementsprocessmanager/js/executor/logger/emailSummary.js',
  87.             '/bundles/elementsprocessmanager/js/executor/callback/abstractCallback.js',
  88.             '/bundles/elementsprocessmanager/js/executor/callback/example.js',
  89.             '/bundles/elementsprocessmanager/js/executor/callback/default.js',
  90.             '/bundles/elementsprocessmanager/js/executor/callback/executionNote.js',
  91.             '/bundles/elementsprocessmanager/js/executor/callback/phing.js',
  92.             '/bundles/elementsprocessmanager/js/window/activeProcesses.js',
  93.         ];
  94.     }
  95.     /**
  96.      * If the bundle has an installation routine, an installer is responsible of handling installation related tasks
  97.      *
  98.      * @return InstallerInterface|null
  99.      */
  100.     public function getInstaller()
  101.     {
  102.         return $this->container->get(Installer::class);
  103.     }
  104.     public static function shutdownHandler($arguments)
  105.     {
  106.         /**
  107.          * @var $monitoringItem MonitoringItem
  108.          */
  109.         if ($monitoringItem self::getMonitoringItem()) {
  110.             $error error_get_last();
  111.             Helper::executeMonitoringItemLoggerShutdown($monitoringItem);
  112.             if (in_array($error['type'], [E_WARNINGE_DEPRECATEDE_STRICTE_NOTICE])) {
  113.                 if ($config Configuration::getById($monitoringItem->getConfigurationId())) {
  114.                     $versions $config->getKeepVersions();
  115.                     if (is_numeric($versions)) {
  116.                         $list = new MonitoringItem\Listing();
  117.                         $list->setOrder('DESC')->setOrderKey('id')->setOffset((int)$versions)->setLimit(100000000000); //a limit has to defined otherwise the offset wont work
  118.                         $list->setCondition('status ="finished" AND configurationId=? AND IFNULL(pid,0) != ? AND parentId IS NULL ', [$config->getId(), $monitoringItem->getPid()]);
  119.                         $items $list->load();
  120.                         foreach ($items as $item) {
  121.                             $item->delete();
  122.                         }
  123.                     }
  124.                 }
  125.                 if (!$monitoringItem->getMessage()) {
  126.                     $monitoringItem->setMessage('finished');
  127.                 }
  128.                 $monitoringItem->setCompleted();
  129.                 $monitoringItem->setPid(null)->save();
  130.             } else {
  131.                 $monitoringItem->setMessage('ERROR:' print_r($errortrue) . $monitoringItem->getMessage());
  132.                 $monitoringItem->setPid(null)->setStatus($monitoringItem::STATUS_FAILED)->save();
  133.             }
  134.         }
  135.     }
  136.     public static function startup($arguments)
  137.     {
  138.         $monitoringItem $arguments['monitoringItem'];
  139.         if ($monitoringItem instanceof MonitoringItem) {
  140.             $monitoringItem->resetState()->save();
  141.             $monitoringItem->setPid(getmypid());
  142.             $monitoringItem->setStatus($monitoringItem::STATUS_RUNNING);
  143.             $monitoringItem->save();
  144.         }
  145.     }
  146.     public static function getConfig()
  147.     {
  148.         if (is_null(self::$_config)) {
  149.             $configFile = \Pimcore\Config::locateConfigFile('plugin-process-manager.php');
  150.             self::$_config = include $configFile;
  151.         }
  152.         return self::$_config;
  153.     }
  154.     public static function getLogDir()
  155.     {
  156.         $dir PIMCORE_PRIVATE_VAR '/logs/process-manager/';
  157.         if (!is_dir($dir)) {
  158.             \Pimcore\File::mkdir($dir);
  159.         }
  160.         return $dir;
  161.     }
  162.     public function getDescription()
  163.     {
  164.         return 'Process Manager';
  165.     }
  166.     /**
  167.      * @param mixed $monitoringItem
  168.      */
  169.     public static function setMonitoringItem($monitoringItem)
  170.     {
  171.         self::$monitoringItem $monitoringItem;
  172.     }
  173.     /**
  174.      * @param bool $createDummyObjectIfRequired
  175.      *
  176.      * @return MonitoringItem
  177.      */
  178.     public static function getMonitoringItem($createDummyObjectIfRequired true)
  179.     {
  180.         if ($createDummyObjectIfRequired && !self::$monitoringItem) {
  181.             if(getenv(self::MONITORING_ITEM_ENV_VAR)){
  182.                 self::$monitoringItem MonitoringItem::getById(getenv(self::MONITORING_ITEM_ENV_VAR));
  183.                 self::$monitoringItem->setStatus(MonitoringItem::STATUS_RUNNING)->save();
  184.             }else{
  185.                 self::$monitoringItem = new MonitoringItem();
  186.                 self::$monitoringItem->setIsDummy(true);
  187.             }
  188.         }
  189.         return self::$monitoringItem;
  190.     }
  191.     public static function getPluginWebsitePath()
  192.     {
  193.         $path PIMCORE_PRIVATE_VAR '/bundles/elementsprocessmanager/';
  194.         if (!is_dir($path)) {
  195.             mkdir($path0755true);
  196.         }
  197.         return $path;
  198.     }
  199.     protected function getComposerPackageName()
  200.     {
  201.         return 'elements/process-manager-bundle';
  202.     }
  203.     public function getNiceName()
  204.     {
  205.         return self::PLUGIN_NAME;
  206.     }
  207. }