-
Notifications
You must be signed in to change notification settings - Fork 32
Expand file tree
/
Copy pathServiceEventHandler.php
More file actions
105 lines (98 loc) · 3.23 KB
/
ServiceEventHandler.php
File metadata and controls
105 lines (98 loc) · 3.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
namespace DreamFactory\Core\Handlers\Events;
use DreamFactory\Core\Events\ApiEvent;
use DreamFactory\Core\Events\BaseServiceEvent;
use DreamFactory\Core\Events\GenerateReportEvent;
use DreamFactory\Core\Events\ServiceDeletedEvent;
use DreamFactory\Core\Events\ServiceAssignedEvent;
use DreamFactory\Core\Events\ServiceModifiedEvent;
use DreamFactory\Core\Models\BaseModel;
use DreamFactory\Core\Models\ServiceEventMap;
use DreamFactory\Core\Services\BaseRestService;
use Cache;
use Config;
use Event;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Database\Events\QueryExecuted;
use Log;
use ServiceManager;
class ServiceEventHandler
{
/**
* Register the listeners for the subscriber.
*
* @param Dispatcher $events
*/
public function subscribe($events)
{
$events->listen(
[
ApiEvent::class,
],
static::class . '@handleApiEvent'
);
$events->listen(
[
ServiceModifiedEvent::class,
ServiceDeletedEvent::class,
],
static::class . '@handleServiceChangeEvent'
);
if (config('df.db.query_log_enabled')) {
$events->listen(
[
QueryExecuted::class,
],
static::class . '@handleQueryExecutedEvent'
);
}
if (config('df.generate_report')) {
$events->listen(
[GenerateReportEvent::class],
GenerateReportHandler::class
);
}
}
/**
* Handle API events.
*
* @param ApiEvent $event
*/
public function handleApiEvent($event)
{
$eventName = str_replace('.queued', null, $event->name);
$ckey = 'event:' . $eventName;
$records = Cache::remember($ckey, Config::get('df.default_cache_ttl'), function () use ($eventName) {
return ServiceEventMap::whereEvent($eventName)->get()->all();
});
if (empty($records)) {
// Look for wildcard events by service (example: user.*)
$serviceName = substr($eventName, 0, strpos($eventName, '.'));
$wildcardEvent = $serviceName . '.*';
$ckey = 'event:' . $wildcardEvent;
$records = Cache::remember($ckey, Config::get('df.default_cache_ttl'), function () use ($wildcardEvent) {
return ServiceEventMap::whereEvent($wildcardEvent)->get()->all();
});
}
/** @var BaseModel $record */
foreach ($records as $record) {
Log::debug('Service event handled: ' . $eventName);
/** @var BaseRestService $service */
$service = \ServiceManager::getServiceById($record->service_id);
Event::dispatch(new ServiceAssignedEvent($service, $event, $record->toArray()));
}
}
/**
* Handle service change events.
*
* @param BaseServiceEvent $event
*/
public function handleServiceChangeEvent($event)
{
ServiceManager::purge($event->service->name); // clear out any old config
}
public function handleQueryExecutedEvent($event)
{
Log::debug($event->connectionName . ': ' . $event->sql . ': ' . $event->time);
}
}