Skip to content

GrantStreetGroup/p5-Plack-Middleware-HealthCheck

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

43 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NAME

Plack::Middleware::HealthCheck - A health check endpoint for your Plack app

VERSION

version v0.2.1

SYNOPSIS

$psgi_app = Plack::Middleware::HealthCheck->wrap( $psgi_app,
    health_check => HealthCheck->new(...),
)

This automatically serves the results as JSON at /healthz.

You can serve the results from different "health_check_paths" than the default, and you can specify which query parameters, other than the always allowed tags, are passed to the check with "allowed_params". Runtime support is enabled by default, but can be overridden by specifying an "allowed_params" configuration, like the one below, that does not include runtime.

$psgi_app = HealthCheck::Diagnostic::LoadAverage->wrap( $psgi_app,
    health_check       => HealthCheck->new(...),
    health_check_paths => ['/_healthcheck'],
    allowed_params     => [ 'foo', 'bar' ],
);

Since you don't want to serve this HealthCheck everywhere on the internet, you should limit its access, for example using Plack::Middleware::Conditional to limit by IP address.

# Using enable_if
use Plack::Builder;

builder {
    enable_if { $_[0]->{REMOTE_ADDR} =~ /^10\./ } 'HealthCheck',
        health_check => HealthCheck->new(...),
    ;
    $psgi_app;
};

# OO interface
$app = Plack::Middleware::Conditional->wrap(
    $psgi_app,
    condition  => sub { $_[0]->{REMOTE_ADDR} =~ /^10\./ },
    builder => sub {
        Plack::Middleware::HealthCheck->wrap( $psgi_app,
            health_check => HealthCheck->new(...),
        )
    },
);

DESCRIPTION

Does a basic health check for your app, by default responding on "health_check_paths" with "serve_health_check".

You must provide your own "health_check" object that the checks will be run against.

NAME

Plack::Middleware::HealthCheck - Health checks for your plack app

ATTRIBUTES

health_check

A HealthCheck object that should have checks with the ecv_test tag.

The default object registers LoadAverage and HideFile checks with the values from "load_limit" and "hide_files".

health_check_paths

A list of URLs to "serve_health_check" from.

Defaults to ['/healthz'].

If you don't want any health check paths, set this to an empty arrayref ([]).

allowed_params

A list of query_params to pass through to check. Parameters are passed with the values in arrayrefs.

Defaults to runtime, and tags are always passed by "serve_health_check".

The runtime parameter defaults to true if pretty is specified, or it is in the query string without a value.

METHODS

serve_health_check

Called with the Plack $env hash as an argument if "should_serve_health_check" returns true.

Reads the query parameters for any tags or other "allowed_params" and then calls the "health_check" check method with those parameters as well as passing $env under the "env" key.

Returns the result of passing the health check $result to "health_check_response".

serve_tags_list

Called with the Plack $env hash as an argument if "should_serve_health_check" returns true.

Calls get_registered_tags on the health_check and returns the result of passing the list of tags to "health_check_response".

should_serve_health_check

Receives the Plack $env as an argument and returns a truthy value if $env->{PATH_INFO} matches any of the "health_check_paths".

should_serve_tags_list

Receives the Plack $env as an argument and returns a truthy value if $env->{PATH_INFO} matches any of the "health_check_paths" followed by /tags.

health_check_response

Takes a health check $result and returns a Plack response arrayref.

Returns a 200 response if the $result->{status} is "OK" or if the result is an array ref (for "serve_tags_list"), otherwise returns a 503.

The body of the response is the $result JSON encoded.

Also takes an optional Plack::Request object as a second argument which it will check for the existence of a pretty query parameter in which case it will make the JSON response both pretty and canonical.

DEPENDENCIES

Plack::Middleware, HealthCheck

SEE ALSO

The GSG Health Check Standard

CONFIGURATION AND ENVIRONMENT

None

AUTHOR

Grant Street Group developers@grantstreet.com

COPYRIGHT AND LICENSE

This software is Copyright (c) 2019 - 2024 by Grant Street Group.

This is free software, licensed under:

The Artistic License 2.0 (GPL Compatible)