-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
online_shop.php
60 lines (47 loc) · 1.96 KB
/
online_shop.php
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
<?php declare(strict_types=1);
/**
* Online Shop Example
*
* This is an example of a simple engine responding to events generated by an online store and triggering emails
*
* It includes simple Rules (New Order -> Send Order Received emails)
* Rules with timeouts (CheckOrderPayment -> If Order Payment not received by timeout period emits a timeout event)
*
*/
use Bref\Logger\StderrLogger;
use EdgeTelemetrics\EventCorrelation\Scheduler;
use Psr\Log\LogLevel;
use function EdgeTelemetrics\EventCorrelation\php_cmd;
require __DIR__ . "/../../vendor/autoload.php";
require __DIR__ . "/rules/CheckOrderPayment.php";
require __DIR__ . "/rules/OrderPaidSendCustomerReceipt.php";
require __DIR__ . "/rules/OrderPaymentReminder.php";
require __DIR__ . "/rules/OrderReceivedSendCustomerEmail.php";
require __DIR__ . "/rules/OrderReceivedSendShopEmail.php";
$rules = [
CheckOrderPayment::class,
OrderPaidSendCustomerReceipt::class,
OrderPaymentReminder::class,
OrderReceivedSendCustomerEmail::class,
OrderReceivedSendShopEmail::class,
];
//Delete any statefile that may exist on subsequent runs
if (file_exists("/tmp/php_ec-online-shop-example.state")) {
unlink("/tmp/php_ec-online-shop-example.state");
}
$online_shop_engine = new class($rules) extends Scheduler {
public function __construct(array $rules)
{
parent::__construct($rules);
set_exception_handler([$this, "handle_exception"]);
$this->setLogger(new StderrLogger(LogLevel::DEBUG));
$this->register_input_process('webstore_event_stream', php_cmd(__DIR__ . "/sources/webstore_events.php"));
$this->register_action('send-email', php_cmd(__DIR__ . "/actions/echo.php"));
$this->setSavefileName("/tmp/php_ec-online-shop-example.state");
$this->setSaveStateInterval(1);
}
public function handle_exception(Throwable $exception) {
$this->logger->emergency("Fatal", ['exception' => $exception,]);
}
};
$online_shop_engine->run();