dpfaffenbauer/process-manager

进程管理器帮助您查看长时间运行的进程的状态

安装: 76,529

依赖项: 2

建议者: 5

安全: 0

星标: 29

关注者: 4

分支: 20

开放性问题: 7

类型:pimcore-bundle

4.0.0-beta.2 2023-10-12 12:41 UTC

README

需求

  • Pimcore 11

Software License

进程管理插件跟踪您所有的“长时间运行作业”。它为您的仪表板添加了原生GUI和一个新的组件。您还可以创建可执行文件并一键运行。(计划集成类似CRON的语法以处理重复任务)

使用进程管理器的插件

入门

  • 通过composer安装 composer require dpfaffenbauer/process-manager:^2.0
  • 通过命令行(或在pimcore扩展管理器中)启用:bin/console pimcore:bundle:enable ProcessManagerBundle
  • 通过命令行(或在pimcore扩展管理器中)安装:bin/console pimcore:bundle:install ProcessManagerBundle
  • 重新加载Pimcore
  • 打开工具 -> 进程管理器

集成到您的任务中

创建新的进程

$processFactory = $container->get('process_manager.factory.process');
$process = $processFactory->createProcess(
    sprintf(
        'Process (%s): %s',
        $date->formatLocalized('%A %d %B %Y'),
        'Special Long Running Task'
    ),                                                  //Name
    'special_task',                                     //Type
    'Message',                                          //Message Text
    100,                                                //Total Steps
    0                                                   //Current Step
);
$process->save();                                       //Save

推进进度

$process->progress();
$process->save();

完成进度

$process->setProgress($process->getTotal());
$process->save();

使用进程记录器

进程管理器还提供了记录您的进度中确切发生情况的日志的能力。

$logger = $container->get('process_manager.logger');

//Logs a emergency message
$logger->emergency($process, 'Total of 100 entries found');

//Logs a alert message
$logger->alert($process, 'Total of 100 entries found');

//Logs a critical message
$logger->critical($process, 'Total of 100 entries found');

//Logs a error message
$logger->error($process, 'Total of 100 entries found');

//Logs a warning message
$logger->warning($process, 'Total of 100 entries found');

//Logs a notice message
$logger->notice($process, 'Total of 100 entries found');

//Logs a info message
$logger->info($process, 'Total of 100 entries found');

//Logs a debug message
$logger->debug($process, 'Total of 100 entries found');

报告

您还可以进一步处理日志以创建漂亮的报告。为此,您必须创建一个新服务并实现接口 ProcessManagerBundle\Report\ReportInterface。导入定义有一个示例实现 导入定义报告

添加新的进程类型

  • 向您的Bundle添加一个新的类并实现 ``ProcessManagerBundle\Process\ProcessInterface``` 接口
  • 向您的Bundle添加一个新的表单类型并向其中添加所需字段
  • 添加一个新的服务,带有标签 process_manager.process
      import_definition.process_manager.process:
          class: Wvision\Bundle\ImportDefinitionsBundle\ProcessManager\ImportDefinitionProcess
          tags:
          - { name: 'process_manager.process', type: 'importdefinition', form-type: 'Wvision\Bundle\ImportDefinitionsBundle\Form\Type\ProcessManager\ImportDefinitionsType' }
  • 这就完成了。(您仍需要在您的Bundle中自己处理进程创建,其中没有魔法)

可停止的进程

您可以通过管理面板让用户停止您的进程。您需要将进程的可停止标志设置为true,并将其状态设置为 ProcessManagerBundle::STATUS_RUNNING 以显示停止按钮

$process->setStoppable(true);
$process->setStatus(ProcessManagerBundle::STATUS_RUNNING);
$process->save();

此外,您还需要在您的进程中实现停止逻辑。跟踪进程状态,并在其设置为 ProcessManagerBundle::STATUS_STOPPING 时停止您的进程

$process = $this->processRepository->find($processId);
if ($process->getStatus() == ProcessManagerBundle::STATUS_STOPPING) {
    // Here goes your process stop and cleanup logic
    ...
    
    $process->setStatus(ProcessManagerBundle::STATUS_STOPPED); // remember to set the status to stopped.
    $process->save();    
}

清理命令

您可以从控制台执行清理命令以删除旧进程条目和日志文件。要定期执行此操作,您可以将其添加为cron作业。

# delete all process entries from the database and log files older than 604800 seconds (7 days)
$ ./bin/console process-manager:cleanup-process-data
 
# delete all process entries from the database and log files older than 86400 seconds (1 days)
$ ./bin/console process-manager:cleanup-process-data --seconds=86400

# delete only process entries from the database older than 604800 seconds (7 days) and keep the log files
$ ./bin/console process-manager:cleanup-process-data --keeplogs

版权和许可

版权: lineofcode.at 关于许可详情,请访问 LICENSE.md

Interface Interface Interface