Lines 100.00% 14 / 14
Functions and Methods 100.00% 3 / 3
Classes and Traits 100.00% 1 / 1
Name Lines Functions and Methods CRAP Classes and Traits
AppFailedHandler 100.00% 14 / 14 100.00% 3 / 3 3 100.00% 1 / 1
 __construct 100.00% 1 / 1 100.00% 1 / 1 1
 handledMessageClass 100.00% 1 / 1 100.00% 1 / 1 1
 handle 100.00% 12 / 12 100.00% 1 / 1 1
1<?php
2
3declare(strict_types=1);
4
5namespace Stewart\Runtime\Broker\Message;
6
7use Psr\Log\LoggerInterface;
8use Stewart\Runtime\Broker\AppMetrics;
9use Stewart\Runtime\Broker\WorkerHandle;
10use Stewart\Runtime\Ipc\Message\AppFailed;
11use Stewart\Runtime\Ipc\Message\WorkerMessage;
12use Stewart\Runtime\Model\ExceptionDetails;
13
14/** @implements WorkerMessageHandler<AppFailed> */
15final readonly class AppFailedHandler implements WorkerMessageHandler
16{
17    public function __construct(
18        private LoggerInterface $logger,
19        private AppMetrics $metrics,
20    ) {}
21
22    public function handledMessageClass(): string
23    {
24        return AppFailed::class;
25    }
26
27    /** @param AppFailed $message */
28    public function handle(WorkerHandle $handle, WorkerMessage $message): void
29    {
30        $this->logger->error('App failed', [
31            'app' => $message->scope->wireValue(),
32            'phase' => $message->phase->value,
33            'origin' => $message->origin,
34            'occurrence' => $message->occurrence,
35            'worker' => $handle->id->value,
36            'exception' => $message->class,
37            'error' => $message->message,
38            'trace' => $message->trace,
39            ExceptionDetails::CONTEXT_KEY => $message->details,
40        ]);
41
42        $this->metrics->recordLastFailure($handle->id, $message);
43    }
44}