• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

eliashaeussler / typo3-badges / 23913678716

02 Apr 2026 05:38PM UTC coverage: 95.333% (-0.8%) from 96.154%
23913678716

push

github

web-flow
Merge pull request #1225 from eliashaeussler/feature/health-check

99 of 108 new or added lines in 5 files covered. (91.67%)

572 of 600 relevant lines covered (95.33%)

6.63 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

84.62
/src/Controller/HealthController.php
1
<?php
2

3
declare(strict_types=1);
4

5
/*
6
 * This file is part of the Symfony project "eliashaeussler/typo3-badges".
7
 *
8
 * Copyright (C) 2021-2026 Elias Häußler <elias@haeussler.dev>
9
 *
10
 * This program is free software: you can redistribute it and/or modify
11
 * it under the terms of the GNU General Public License as published by
12
 * the Free Software Foundation, either version 3 of the License, or
13
 * (at your option) any later version.
14
 *
15
 * This program is distributed in the hope that it will be useful,
16
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
 * GNU General Public License for more details.
19
 *
20
 * You should have received a copy of the GNU General Public License
21
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
22
 */
23

24
namespace App\Controller;
25

26
use App\Health\HealthCheck;
27
use App\Health\HealthState;
28
use Symfony\Component\DependencyInjection\Attribute\AutowireIterator;
29
use Symfony\Component\HttpFoundation\JsonResponse;
30
use Symfony\Component\HttpFoundation\Response;
31
use Symfony\Component\Routing\Attribute\Route;
32
use Throwable;
33

34
#[Route(path: '/health', methods: ['GET'])]
35
final readonly class HealthController
36
{
37
    /**
38
     * @param iterable<HealthCheck> $healthChecks
39
     */
40
    public function __construct(
2✔
41
        #[AutowireIterator('app.health_check')]
42
        private iterable $healthChecks,
43
    ) {}
2✔
44

45
    public function __invoke(): Response
2✔
46
    {
47
        $statusCode = 200;
2✔
48
        $checks = [];
2✔
49

50
        foreach ($this->healthChecks as $healthCheck) {
2✔
51
            try {
52
                $state = $healthCheck->check();
2✔
NEW
53
            } catch (Throwable $exception) {
×
NEW
54
                $state = HealthState::fromException($exception);
×
55
            }
56

57
            if (!$state->healthy) {
2✔
58
                $statusCode = 424;
1✔
59
            }
60

61
            $checks[$healthCheck->getName()] = $state->toArray();
2✔
62
        }
63

64
        return new JsonResponse($checks, $statusCode);
2✔
65
    }
66
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc