Skip to content

Commit

Permalink
Merge 74abe33 into bec5e39
Browse files Browse the repository at this point in the history
  • Loading branch information
ekkinox committed Mar 23, 2021
2 parents bec5e39 + 74abe33 commit dc60218
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 11 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
CHANGELOG
=========

1.1.0
-----

* Added automatic logs on checkers execution
* Updated documentation

1.0.0
-----

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ foreach ($results as $result) {
}
```

**Notes**:
- you can provide to the `HealthChecker` (as 2nd constructor parameter) a [LoggerInterface](https://www.php-fig.org/psr/psr-3/#3-psrlogloggerinterface) instance to customise its logging behaviour.
- by default, the `NullLogger` will be used

## Tests

To run tests:
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"type": "library",
"license": "GPL-2.0-only",
"require": {
"php": ">=7.2.0"
"php": ">=7.2.0",
"psr/log": "^1.0"
},
"require-dev": {
"phpunit/phpunit": "8.5.14",
Expand Down
16 changes: 15 additions & 1 deletion src/HealthChecker.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,25 @@
use OAT\Library\HealthCheck\Checker\CheckerInterface;
use OAT\Library\HealthCheck\Result\CheckerResult;
use OAT\Library\HealthCheck\Result\CheckerResultCollection;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Throwable;

class HealthChecker
{
/** @var CheckerInterface[] */
private $checkers;

public function __construct(iterable $checkers = [])
/** @var LoggerInterface */
private $logger;

public function __construct(iterable $checkers = [], ?LoggerInterface $logger = null)
{
foreach ($checkers as $index => $checker) {
$this->registerChecker($checker, is_string($index) ? $index : null);
}

$this->logger = $logger ?? new NullLogger();
}

public function registerChecker(CheckerInterface $checker, string $identifier = null): self
Expand All @@ -53,7 +60,14 @@ public function performChecks(): CheckerResultCollection
foreach ($this->checkers as $identifier => $checker) {
try {
$result = $checker->check();

if ($result->isSuccess()) {
$this->logger->info($result->getMessage());
} else {
$this->logger->error($result->getMessage());
}
} catch (Throwable $exception) {
$this->logger->error($exception->getMessage());
$result = new CheckerResult(false, $exception->getMessage());
}

Expand Down
50 changes: 41 additions & 9 deletions tests/Unit/HealthCheckerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,14 @@
use OAT\Library\HealthCheck\HealthChecker;
use OAT\Library\HealthCheck\Result\CheckerResult;
use PHPUnit\Framework\TestCase;
use Psr\Log\Test\TestLogger;

class HealthCheckerTest extends TestCase
{
public function testItCanBeConstructedWithPreRegisteredCheckers(): void
{
$logger = new TestLogger();

$subject = new HealthChecker(
[
$this->buildChecker('successChecker', function () {
Expand All @@ -40,39 +43,49 @@ public function testItCanBeConstructedWithPreRegisteredCheckers(): void
$this->buildChecker('failureChecker', function () {
throw new Exception('failure message');
})
]
],
$logger
);

$results = $subject->performChecks();

$this->assertCount(2, $results);
$this->assertTrue($logger->hasInfo('success message'));
$this->assertTrue($logger->hasError('failure message'));
}

public function testItCanBeConstructedWithTwiceTheSameCheckerUnderDifferentIdentifier(): void
{
$logger = new TestLogger();

$checker = $this->buildChecker('checker', function () {
return new CheckerResult();
return new CheckerResult(true, 'success message');
});

$subject = new HealthChecker(
[
'checker1' => $checker,
'checker2' => $checker,
]
],
$logger
);

$results = $subject->performChecks();

$this->assertCount(2, $results);

$this->assertTrue($logger->hasInfo('success message'));
}

public function testItCanRegisterTwiceTheSameCheckerUnderDifferentIdentifier(): void
{
$logger = new TestLogger();

$checker = $this->buildChecker('checker', function () {
return new CheckerResult();
return new CheckerResult(true, 'success message');
});

$subject = new HealthChecker();
$subject = new HealthChecker([], $logger);

$subject
->registerChecker($checker, 'checker1')
Expand All @@ -81,11 +94,15 @@ public function testItCanRegisterTwiceTheSameCheckerUnderDifferentIdentifier():
$results = $subject->performChecks();

$this->assertCount(2, $results);

$this->assertTrue($logger->hasInfo('success message'));
}

public function testItPerformChecksWithSingleSuccessfulChecker(): void
{
$subject = new HealthChecker();
$logger = new TestLogger();

$subject = new HealthChecker([], $logger);

$subject->registerChecker(
$this->buildChecker('successChecker', function () {
Expand All @@ -109,11 +126,15 @@ public function testItPerformChecksWithSingleSuccessfulChecker(): void
],
$results->jsonSerialize()
);

$this->assertTrue($logger->hasInfo('success message'));
}

public function testItPerformChecksWithSingleExpectedFailingChecker(): void
{
$subject = new HealthChecker();
$logger = new TestLogger();

$subject = new HealthChecker([], $logger);

$subject->registerChecker(
$this->buildChecker('failureChecker', function () {
Expand All @@ -137,11 +158,15 @@ public function testItPerformChecksWithSingleExpectedFailingChecker(): void
],
$results->jsonSerialize()
);

$this->assertTrue($logger->hasError('failure message'));
}

public function testItPerformChecksWithSingleUnexpectedFailingChecker(): void
{
$subject = new HealthChecker();
$logger = new TestLogger();

$subject = new HealthChecker([], $logger);

$subject->registerChecker(
$this->buildChecker('failureChecker', function () {
Expand All @@ -165,11 +190,15 @@ public function testItPerformChecksWithSingleUnexpectedFailingChecker(): void
],
$results->jsonSerialize()
);

$this->assertTrue($logger->hasError('failure message'));
}

public function testItPerformChecksWithSeveralCheckers(): void
{
$subject = new HealthChecker();
$logger = new TestLogger();

$subject = new HealthChecker([], $logger);

$subject
->registerChecker(
Expand Down Expand Up @@ -203,6 +232,9 @@ public function testItPerformChecksWithSeveralCheckers(): void
],
$results->jsonSerialize()
);

$this->assertTrue($logger->hasInfo('success message'));
$this->assertTrue($logger->hasError('failure message'));
}

private function buildChecker(string $identifier, callable $checkerLogic): CheckerInterface
Expand Down

0 comments on commit dc60218

Please sign in to comment.