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
|
|
|
|