|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
declare(strict_types=1); |
|
4
|
|
|
|
|
5
|
|
|
namespace Darkilliant\ProcessBundle\Step; |
|
6
|
|
|
|
|
7
|
|
|
use Darkilliant\ProcessBundle\State\ProcessState; |
|
8
|
|
|
use Symfony\Component\OptionsResolver\OptionsResolver; |
|
9
|
|
|
|
|
10
|
|
|
class FilesystemEventWaitingStep extends AbstractConfigurableStep |
|
11
|
|
|
{ |
|
12
|
1 |
|
public function configureOptionResolver(OptionsResolver $resolver): OptionsResolver |
|
13
|
|
|
{ |
|
14
|
1 |
|
$resolver->setRequired(['folder', 'event_name', 'timeout', 'recursive']); |
|
15
|
1 |
|
$resolver->setDefault('timeout', 0); |
|
16
|
1 |
|
$resolver->setDefault('recursive', false); |
|
17
|
|
|
|
|
18
|
1 |
|
$resolver->setAllowedValues('event_name', [ |
|
19
|
1 |
|
'access', 'modify', 'attrib', 'close_write', |
|
20
|
|
|
'close_nowrite', 'close', 'open', 'moved_to', |
|
21
|
|
|
'moved_from', 'move', 'create', 'delete', |
|
22
|
|
|
'delete_self', 'unmount', |
|
23
|
|
|
]); |
|
24
|
|
|
|
|
25
|
1 |
|
return parent::configureOptionResolver($resolver); |
|
26
|
|
|
} |
|
27
|
|
|
|
|
28
|
1 |
|
public function execute(ProcessState $state) |
|
29
|
|
|
{ |
|
30
|
1 |
|
$state->info('filesystem -> wait event {event_name} on folder {folder}', $state->getOptions()); |
|
31
|
|
|
|
|
32
|
1 |
|
$command = sprintf( |
|
33
|
1 |
|
'inotifywait %s -q --timeout=%s -e %s %s', |
|
34
|
1 |
|
$state->getOptions()['recursive'] ? '-r' : '', |
|
35
|
1 |
|
$state->getOptions()['timeout'], |
|
36
|
1 |
|
$state->getOptions()['event_name'], |
|
37
|
1 |
|
$state->getOptions()['folder'] |
|
38
|
|
|
); |
|
39
|
|
|
|
|
40
|
1 |
|
exec($command); |
|
41
|
1 |
|
} |
|
42
|
|
|
} |
|
43
|
|
|
|