2017 © Pedro Peláez
 

library health-json

Health JSON Schema implementation

image

potfur/health-json

Health JSON Schema implementation

  • Saturday, December 10, 2016
  • by potfur
  • Repository
  • 1 Watchers
  • 2 Stars
  • 0 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Health

Travis CI, (*1)

Lets say there is a service that needs to be checked periodically if is running. Simplest solution would be to ping main site and if it responds with 200 everything is fine., (*2)

But, in reality service can not connect to database and response is served from outdated cache. Other case would be when everything works but mailing service is unreachable., (*3)

And this is where Health comes on stage. Health is an implementation of Health JSON Schema which standardises responses structure for monitoring endpoints., (*4)

How to use

Create instance of Health where all services requiring monitoring will be registered, (*5)

use Health\Health;
use Health\Service\CallableService;

$health = new Health(
    'some-app',  // application name
    'healthy-server.com',  // host name
    '1.2.3',  // currently deployed version
    new \DateTime('2016-12-05T12:45:11+00:00')  // deployment date
);

$health->addService(
    'database',  // service group
    new CallableService(
        'postgres', // service name
        function () use ($pdo) { $pdo->exec('SELECT 1'); }, // validating function
        true // true if service is essential
    )
);

When all services were registered, Health can create status snapshots. Such snapshot can be used to expose service health as simple true/false endpoint:, (*6)

$state = $health->state();
$state->isHealthy();  // returns true if all services are working
$state->summary(); // returns array with detailed information about all registered services

Example

In Symfony, for example - /ping endpoint that returns 200 when essential services are working properly and 500 otherwise, - /health endpoint that shows summary for all services, response status code is reflectin its health, (*7)

class HealthController extends Controller
{
    /**
     * @Route("/ping", name="health_ping")
     */
    public function pingAction(): Response
    {
        return (new Response())->setStatusCode($this->get('health')->status()->isHealthy(true) ? 200 : 500);
    }

    /**
     * @Route("/health", name="health_summary")
     */
    public function healthAction(string $sku): Response
    {
        $status = $this->get('health')->status();

        $response = new JsonResponse();
        $response->setData($status->summary());
        $response->setStatusCode($status->isHealthy() ? 200 : 500);

        return $response;
    }
}

The Versions

10/12 2016

dev-master

9999999-dev

Health JSON Schema implementation

  Sources   Download

MIT

The Requires

  • php ^7.1

 

The Development Requires