Skip to content

Commit ed42287

Browse files
#45 Implement store_in_database & [database|file]_level configuration. Update documentation with full configuration.
1 parent 501b2cd commit ed42287

File tree

5 files changed

+110
-72
lines changed

5 files changed

+110
-72
lines changed

Diff for: docs/index.md

+23-7
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,40 @@ Remember to add the following line to `config/bundles.php` (not required if Symf
1919
CleverAge\UiProcessBundle\CleverAgeUiProcessBundle::class => ['all' => true],
2020
```
2121

22-
## Import routes
22+
## Configuration
23+
24+
### Import routes
2325

2426
```yaml
2527
ui-process-bundle:
2628
resource: '@CleverAgeUiProcessBundle/src/Controller'
2729
type: attribute
2830
```
31+
32+
### Doctrine ORM Configuration
33+
2934
* Run doctrine migration
3035
* Create a user using `cleverage:ui-process:user-create` console.
3136

3237
Now you can access UI Process via http://your-domain.com/process
3338

39+
## Full configuration
40+
41+
```yaml
42+
# config/packages/clever_age_ui_process.yaml
43+
44+
clever_age_ui_process:
45+
security:
46+
roles: ['ROLE_ADMIN'] # Roles displayed inside user edit form
47+
logs:
48+
store_in_database: true # enable/disable store log in database (log_record table)
49+
database_level: Debug (on dev env) or Info # min log level to store log record in database
50+
file_level: Debug (on dev env) or Info # min log level to store log record in file
51+
report_increment_level: Warning # min log level to increment process execution report
52+
design:
53+
logo_path: 'bundles/cleverageuiprocess/logo.jpg' # logo displayed in UI navigation toolbar
54+
```
55+
3456
## Features
3557

3658
### Launch process via UI
@@ -51,7 +73,6 @@ That's all, now you can launch a process via http post request
5173

5274
***Curl sample***
5375
```bash
54-
make bash
5576
curl --location 'http://localhost/http/process/execute' \
5677
--header 'Authorization: Bearer myBearerToken' \
5778
--form 'input=@"/path/to/your/file.csv"' \
@@ -60,7 +81,6 @@ curl --location 'http://localhost/http/process/execute' \
6081
```
6182

6283
```bash
63-
make bash
6484
curl --location 'http://localhost/http/process/execute' \
6585
--header 'Content-Type: application/json' \
6686
--header 'Authorization: Bearer d641d254aed12733758a3a4247559868' \
@@ -154,7 +174,3 @@ On debug environment, profiling too much queries cause memory exhaustion. So, yo
154174
- Increase `memory_limit` in php.ini
155175
- Set `clever_age_ui_process.logs.store_in_database: false` or improve value of `clever_age_ui_process.logs.database_level`
156176
- Use `--no-debug` flag for `cleverage:process:execute`
157-
158-
## Reference
159-
160-
_TODO_

Diff for: src/DependencyInjection/CleverAgeUiProcessExtension.php

+25-45
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
use CleverAge\UiProcessBundle\Controller\Admin\UserCrudController;
1818
use CleverAge\UiProcessBundle\Entity\User;
1919
use CleverAge\UiProcessBundle\Message\ProcessExecuteMessage;
20-
use Monolog\Level;
2120
use Symfony\Component\Config\FileLocator;
2221
use Symfony\Component\DependencyInjection\ContainerBuilder;
2322
use Symfony\Component\DependencyInjection\Extension\Extension;
@@ -31,12 +30,25 @@ public function load(array $configs, ContainerBuilder $container): void
3130
{
3231
$this->findServices($container, __DIR__.'/../../config/services');
3332

34-
$configuration = new Configuration();
33+
/** @var string $env */
34+
$env = $container->getParameter('kernel.environment');
35+
$configuration = new Configuration($env);
3536
$config = $this->processConfiguration($configuration, $configs);
37+
3638
$container->getDefinition(UserCrudController::class)
3739
->setArgument('$roles', array_combine($config['security']['roles'], $config['security']['roles']));
40+
3841
$container->getDefinition('cleverage_ui_process.monolog_handler.process')
39-
->addMethodCall('setReportIncrementLevel', [$config['logs']['report_increment_level']]);
42+
->setArgument('$level', $config['logs']['file_level'])
43+
->addMethodCall('setReportIncrementLevel', [$config['logs']['report_increment_level']])
44+
;
45+
$container->getDefinition('cleverage_ui_process.monolog_handler.doctrine_process')
46+
->setArgument('$level', $config['logs']['database_level']);
47+
if (!$config['logs']['store_in_database']) {
48+
$container->getDefinition('cleverage_ui_process.monolog_handler.doctrine_process')
49+
->addMethodCall('disable');
50+
}
51+
4052
$container->getDefinition(ProcessDashboardController::class)
4153
->setArgument('$logoPath', $config['design']['logo_path']);
4254
}
@@ -46,7 +58,6 @@ public function load(array $configs, ContainerBuilder $container): void
4658
*/
4759
public function prepend(ContainerBuilder $container): void
4860
{
49-
$env = $container->getParameter('kernel.environment');
5061
$container->loadFromExtension(
5162
'monolog',
5263
[
@@ -59,50 +70,19 @@ public function prepend(ContainerBuilder $container): void
5970
'type' => 'service',
6071
'id' => 'cleverage_ui_process.monolog_handler.doctrine_process',
6172
],
73+
'pb_ui_file_filter' => [
74+
'type' => 'filter',
75+
'handler' => 'pb_ui_file',
76+
'channels' => ['cleverage_process', 'cleverage_process_task'],
77+
],
78+
'pb_ui_orm_filter' => [
79+
'type' => 'filter',
80+
'handler' => 'pb_ui_orm',
81+
'channels' => ['cleverage_process', 'cleverage_process_task'],
82+
],
6283
],
6384
]
6485
);
65-
if ('dev' === $env) {
66-
$container->loadFromExtension(
67-
'monolog',
68-
[
69-
'handlers' => [
70-
'pb_ui_file_filter' => [
71-
'type' => 'filter',
72-
'min_level' => Level::Debug->name,
73-
'handler' => 'pb_ui_file',
74-
'channels' => ['cleverage_process', 'cleverage_process_task'],
75-
],
76-
'pb_ui_orm_filter' => [
77-
'type' => 'filter',
78-
'min_level' => Level::Debug->name,
79-
'handler' => 'pb_ui_orm',
80-
'channels' => ['cleverage_process', 'cleverage_process_task'],
81-
],
82-
],
83-
]
84-
);
85-
} else {
86-
$container->loadFromExtension(
87-
'monolog',
88-
[
89-
'handlers' => [
90-
'pb_ui_file_filter' => [
91-
'type' => 'filter',
92-
'min_level' => Level::Info->name,
93-
'handler' => 'pb_ui_file',
94-
'channels' => ['cleverage_process', 'cleverage_process_task'],
95-
],
96-
'pb_ui_orm_filter' => [
97-
'type' => 'filter',
98-
'min_level' => Level::Info->name,
99-
'handler' => 'pb_ui_orm',
100-
'channels' => ['cleverage_process', 'cleverage_process_task'],
101-
],
102-
],
103-
]
104-
);
105-
}
10686
$container->loadFromExtension(
10787
'doctrine_migrations',
10888
[

Diff for: src/DependencyInjection/Configuration.php

+47-18
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,63 @@
2020

2121
class Configuration implements ConfigurationInterface
2222
{
23+
public function __construct(private readonly string $env)
24+
{
25+
}
26+
2327
public function getConfigTreeBuilder(): TreeBuilder
2428
{
25-
$tb = new TreeBuilder('clever_age_ui_process');
29+
$treeBuilder = new TreeBuilder('clever_age_ui_process');
2630
/** @var ArrayNodeDefinition $rootNode */
27-
$rootNode = $tb->getRootNode();
28-
$rootNode
31+
$rootNode = $treeBuilder->getRootNode();
32+
33+
$this->addSecuritySection($rootNode);
34+
$this->addLogSection($rootNode);
35+
$this->addDesignSection($rootNode);
36+
37+
return $treeBuilder;
38+
}
39+
40+
protected function addSecuritySection(ArrayNodeDefinition $node): void
41+
{
42+
$node
2943
->children()
30-
->arrayNode('security')
31-
->addDefaultsIfNotSet()
44+
->arrayNode('security')->addDefaultsIfNotSet()
3245
->children()
33-
->arrayNode('roles')->defaultValue(['ROLE_ADMIN'])->scalarPrototype()->end(); // Roles displayed inside user edit form
34-
$rootNode
46+
->arrayNode('roles')->defaultValue(['ROLE_ADMIN'])->scalarPrototype()->end() // Roles displayed inside user edit form
47+
->end()
48+
->end()
49+
->end()
50+
;
51+
}
52+
53+
protected function addLogSection(ArrayNodeDefinition $node): void
54+
{
55+
$defaultLevel = 'dev' === $this->env ? Level::Debug->name : Level::Info->name;
56+
$node
3557
->children()
36-
->arrayNode('logs')
37-
->addDefaultsIfNotSet()
58+
->arrayNode('logs')->addDefaultsIfNotSet()
3859
->children()
3960
->booleanNode('store_in_database')->defaultValue(true)->end() // enable/disable store log in database (log_record table)
40-
->scalarNode('database_level')->defaultValue(Level::Debug->name)->end() // min log level to store log record in database
61+
->scalarNode('database_level')->defaultValue($defaultLevel)->end() // min log level to store log record in database
62+
->scalarNode('file_level')->defaultValue($defaultLevel)->end() // min log level to store log record in file
4163
->scalarNode('report_increment_level')->defaultValue(Level::Warning->name)->end() // min log level to increment process execution report
42-
->end();
43-
$rootNode
64+
->end()
65+
->end()
66+
->end()
67+
;
68+
}
69+
70+
protected function addDesignSection(ArrayNodeDefinition $node): void
71+
{
72+
$node
4473
->children()
45-
->arrayNode('design')
46-
->addDefaultsIfNotSet()
47-
->children()
74+
->arrayNode('design')->addDefaultsIfNotSet()
75+
->children()
4876
->scalarNode('logo_path')->defaultValue('bundles/cleverageuiprocess/logo.jpg')->end()
49-
->end();
50-
51-
return $tb;
77+
->end()
78+
->end()
79+
->end()
80+
;
5281
}
5382
}

Diff for: src/Monolog/Handler/DoctrineProcessHandler.php

+13-1
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ class DoctrineProcessHandler extends AbstractProcessingHandler
2525
{
2626
/** @var ArrayCollection<int, LogRecord> */
2727
private ArrayCollection $records;
28-
private ?ProcessExecutionManager $processExecutionManager = null;
2928
private ?EntityManagerInterface $em = null;
29+
private ?ProcessExecutionManager $processExecutionManager = null;
30+
private bool $enabled = true;
3031

3132
public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true)
3233
{
@@ -44,6 +45,11 @@ public function setProcessExecutionManager(ProcessExecutionManager $processExecu
4445
$this->processExecutionManager = $processExecutionManager;
4546
}
4647

48+
public function disable(): void
49+
{
50+
$this->enabled = false;
51+
}
52+
4753
public function __destruct()
4854
{
4955
$this->flush();
@@ -52,6 +58,9 @@ public function __destruct()
5258

5359
public function flush(): void
5460
{
61+
if (!$this->enabled) {
62+
return;
63+
}
5564
foreach ($this->records as $record) {
5665
if (($currentProcessExecution = $this->processExecutionManager?->getCurrentProcessExecution()) instanceof ProcessExecution) {
5766
$entity = new \CleverAge\UiProcessBundle\Entity\LogRecord($record, $currentProcessExecution);
@@ -67,6 +76,9 @@ public function flush(): void
6776

6877
protected function write(LogRecord $record): void
6978
{
79+
if (!$this->enabled) {
80+
return;
81+
}
7082
$this->records->add($record);
7183
if (500 === $this->records->count()) {
7284
$this->flush();

Diff for: src/Monolog/Handler/ProcessHandler.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@ class ProcessHandler extends StreamHandler
2525
public function __construct(
2626
private readonly string $directory,
2727
private readonly ProcessExecutionManager $processExecutionManager,
28+
int|string|Level $level = Level::Debug,
2829
) {
29-
parent::__construct($this->directory);
30+
parent::__construct($this->directory, $level);
3031
}
3132

3233
/**

0 commit comments

Comments
 (0)