1
|
|
|
<?php namespace Comodojo\Extender\Socket\Commands\Scheduler; |
2
|
|
|
|
3
|
|
|
use \Comodojo\Extender\Schedule\Manager; |
4
|
|
|
use \Comodojo\Daemon\Daemon; |
5
|
|
|
use \Comodojo\RpcServer\Request\Parameters; |
6
|
|
|
use \Comodojo\Extender\Socket\Messages\Task\Request as TaskRequestMessage; |
7
|
|
|
use \Comodojo\Extender\Socket\Messages\Scheduler\Schedule as ScheduleMessage; |
8
|
|
|
use \Comodojo\Extender\Task\Request as TaskRequest; |
9
|
|
|
use \Comodojo\Extender\Orm\Entities\Schedule; |
10
|
|
|
use \Cron\CronExpression; |
11
|
|
|
use \Comodojo\Exception\RpcException; |
12
|
|
|
use \Exception; |
13
|
|
|
|
14
|
|
|
class Add { |
15
|
|
|
|
16
|
|
|
public static function execute(Parameters $params, Daemon $daemon) { |
17
|
|
|
|
18
|
|
|
$schedule_message = $params->get('schedule'); |
19
|
|
|
$request_message = $params->get('request'); |
20
|
|
|
|
21
|
|
View Code Duplication |
if (empty($schedule_message['name']) || empty($schedule_message['expression'])) { |
|
|
|
|
22
|
|
|
throw new RpcException("Missing schedule name or invalid expression", -32600); |
23
|
|
|
} |
24
|
|
|
|
25
|
|
|
try { |
26
|
|
|
|
27
|
|
|
$request = TaskRequest::createFromMessage( |
28
|
|
|
TaskRequestMessage::createFromExport($request_message) |
29
|
|
|
); |
30
|
|
|
|
31
|
|
|
} catch (Exception $e) { |
32
|
|
|
throw new RpcException("Invalid message payload in request", -32600); |
33
|
|
|
} |
34
|
|
|
|
35
|
|
|
try { |
36
|
|
|
|
37
|
|
|
$schedule = new Schedule(); |
38
|
|
|
$schedule->setName($schedule_message['name']); |
39
|
|
|
$schedule->setExpression(CronExpression::factory($schedule_message['expression'])); |
40
|
|
|
$schedule->setDescription($schedule_message['description']); |
41
|
|
|
$schedule->setEnabled($schedule_message['enabled']); |
42
|
|
|
$schedule->setRequest($request); |
43
|
|
|
|
44
|
|
|
} catch (Exception $e) { |
45
|
|
|
throw new RpcException("Invalid message payload in schedule", -32600); |
46
|
|
|
} |
47
|
|
|
|
48
|
|
|
$manager = new Manager( |
49
|
|
|
$daemon->getConfiguration(), |
|
|
|
|
50
|
|
|
$daemon->getLogger(), |
51
|
|
|
$daemon->getEvents() |
52
|
|
|
); |
53
|
|
|
|
54
|
|
|
try { |
55
|
|
|
$id = $manager->add($schedule); |
56
|
|
|
} catch (Exception $e) { |
57
|
|
|
throw new RpcException($e->getMessage(), -32500); |
58
|
|
|
} |
59
|
|
|
|
60
|
|
|
$refresh = Refresh::execute($params, $daemon); |
|
|
|
|
61
|
|
|
|
62
|
|
|
// should method ignore invalid refresh message here? |
63
|
|
|
|
64
|
|
|
return $id; |
65
|
|
|
|
66
|
|
|
} |
67
|
|
|
|
68
|
|
|
} |
69
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.