Giter VIP home page Giter VIP logo

processmanager's Introduction

Pimcore - Process Manager

Looking for the current stable (version 1)? See https://github.com/dpfaffenbauer/ProcessManager/tree/1.1

Requirements

  • Pimcore 5

Software License

Process Manager Plugin keeps track of all your "long running jobs". It adds a nive GUI and a new portlet for your Dashboard. You can also create Executables and run them with one click. (It's planned to integrate a CRON like Syntax for recurring tasks)

Plugins using Process Manager

Getting started

  • Install via composer composer require dpfaffenbauer/process-manager:^2.0
  • Enable via command-line (or inside the pimcore extension manager): bin/console pimcore:bundle:enable ProcessManagerBundle
  • Install via command-line (or inside the pimcore extension manager): bin/console pimcore:bundle:install ProcessManagerBundle
  • Reload Pimcore
  • Open Tools -> Process Manager

Integrate to your Task

Create new Process

$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

Advance the Progress

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

Finish the Progress

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

Using the Process Logger

Process Manager also provides you with the ability to Log what exactly happens in your progress.

$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');

Reports

You can also further process the log to create a pretty report. To do that, you have to create a new service and implement the interface ProcessManagerBundle\Report\ReportInterface. Import Definitions has an example implementation of that Import Definition Report

Add a new Process Type

  • Add a new Class to your Bundle and implement ``ProcessManagerBundle\Process\ProcessInterface``` Interface
  • Add a new Form Type to your Bundle and add required fields to it
  • Add a new Service with tag 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' }
  • Thats it, done. (You still need to handle Process creation within your Bundle yourself, there is no magic behind it)

Stoppable processes

You can implement your process to be stoppable by user via the admin panel. You need to set the stoppable flag of the process to true and it's status to ProcessManagerBundle::STATUS_RUNNING for the stop button to shop up:

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

Additionally, you need to implement stop logic to your process. Track the process status and stop your process if it's set to 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();    
}

Copyright and license

Copyright: lineofcode.at For licensing details please visit LICENSE.md

Interface Interface Interface

processmanager's People

Contributors

dpfaffenbauer avatar dkarlovi avatar roynilsson avatar aarongerig avatar kubaplas avatar wpeisert avatar

Watchers

Piotr Karwatka avatar Kamil Wręczycki avatar James Cloos avatar Michał Filik avatar Piotr Rugala avatar Janusz Żukowicz avatar Michał avatar  avatar Bartosz Picho avatar kkajzar avatar  avatar Mariusz Gomse avatar  avatar Kamil avatar Łukasz Marszałek avatar  avatar Thibault Dehacq avatar Bruno avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.