Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/grantstreetgroup/p5-healthcheck-diagnostic-webrequest
Perl HealthCheck Diagnostic for verifying http connectivity - https://grantstreetgroup.github.io/HealthCheck.html
https://github.com/grantstreetgroup/p5-healthcheck-diagnostic-webrequest
Last synced: about 1 month ago
JSON representation
Perl HealthCheck Diagnostic for verifying http connectivity - https://grantstreetgroup.github.io/HealthCheck.html
- Host: GitHub
- URL: https://github.com/grantstreetgroup/p5-healthcheck-diagnostic-webrequest
- Owner: GrantStreetGroup
- License: other
- Created: 2020-04-28T15:35:14.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-09-16T16:57:44.000Z (4 months ago)
- Last Synced: 2024-09-17T16:26:59.974Z (4 months ago)
- Language: Perl
- Size: 78.1 KB
- Stars: 0
- Watchers: 15
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# NAME
HealthCheck::Diagnostic::WebRequest - Make HTTP/HTTPS requests to web servers to check connectivity
# VERSION
version v1.4.4
# SYNOPSIS
# site: https://foo.example
# content: This is my contentuse HealthCheck::Diagnostic::WebRequest;
# Look for a 200 status code and pass.
my $diagnostic = HealthCheck::Diagnostic::WebRequest->new(
url => 'https://foo.example',
);
my $result = $diagnostic->check;
print $result->{status}; # OK# Look for a 200 status code and verify request takes no more than 10 seconds.
my $diagnostic = HealthCheck::Diagnostic::WebRequest->new(
url => 'https://foo.example',
response_time_threshold => 10,
);
my $result = $diagnostic->check;
print $result->{status}; # OK if no more than 10, WARNING if more than 10# Look for a 401 status code and fail.
$diagnostic = HealthCheck::Diagnostic::WebRequest->new(
url => 'https://foo.example',
status_code => 401,
);
$result = $diagnostic->check;
print $result->{status}; # CRITICAL# Look for any status code less than 500.
$diagnostic = HealthCheck::Diagnostic::WebRequest->new(
url => 'https://foo.example',
status_code => '<500',
);
$result = $diagnostic->check;
print $result->{status}; # CRITICAL# Look for any 403, 405, or any 2xx range code
$diagnostic = HealthCheck::Diagnostic::WebRequest->new(
url => 'https://foo.example',
status_code => '403, 405, >=200, <300',
);
$result = $diagnostic->check;
print $result->{status}; # CRITICAL# Look for a 200 status code and content matching the string regex.
$diagnostic = HealthCheck::Diagnostic::WebRequest->new(
url => 'https://foo.example',
content_regex => 'is my',
);
$result = $diagnostic->check;
print $result->{status}; # OK# Use a regex as the content_regex.
$diagnostic = HealthCheck::Diagnostic::WebRequest->new(
url => 'https://foo.example',
content_regex => qr/is my/,
);
$result = $diagnostic->check;
print $result->{status}; # OK# POST Method: Look for a 200 status code and content matching the string.
my $data = {
foo => 'tell me something',
};my $encoded_data = encode_utf8(encode_json($data));
my $header = [ 'Content-Type' => 'application/json; charset=UTF-8' ];
my $url = 'https://dev.payment-express.net/dev/env_test';my $request = HTTP::Request->new('POST', $url, $header, $encoded_data);
$diagnostic = HealthCheck::Diagnostic::WebRequest->new(
request => $request,
status_code => 200,
content_regex => "tell me something",
);$result = $diagnostic->check;
print $result->{status}; # OK# DESCRIPTION
Determines if a web request to a `url` or `request` is achievable.
Also has the ability to check if the HTTP response contains the
right content, specified by `content_regex`. Sets the `status` to "OK"
or "CRITICAL" based on the success of the checks.# ATTRIBUTES
## url
The site that is checked during the HealthCheck. It can be any HTTP/S link.
By default, it will send GET requests. Use ["request"](#request) if you want a more
complicated HTTP request.Either this option or ["request"](#request) are required, and are mutually exclusive.
## request
Allows passing in [HTTP::Request](https://metacpan.org/pod/HTTP%3A%3ARequest) object in order to use other HTTP request
methods and form data during the HealthCheck.Either this option or ["url"](#url) are required, and are mutually exclusive.
## status\_code
The expected HTTP response status code, or a string of status code conditions.
Conditions are comma-delimited, and can optionally have an operator prefix. Any
condition without a prefix goes into an `OR` set, while the prefixed ones go
into an `AND` set. As such, `==` is not allowed as a prefix, because it's less
confusing to not use a prefix here, and more than one condition while a `==`
condition exists would not make sense.Some examples:
!500 # Anything besides 500
200, 202 # 200 or 202
200, >=300, <400 # 200 or any 3xx code
<400, 405, !202 # Any code below 400 except 202, or 405,
# ie: (<400 && !202) || 405The default value for this is '200', which means that we expect a successful request.
## response\_time\_threshold
An optional number of seconds to compare the response time to. If it takes no more
than this threshold to receive the response or if the threshold is not provided,
the status is `OK`. If the time exceeds this threshold, the status is `WARNING`.## content\_regex
The content regex to test for in the HTTP response.
This is an optional field and is only checked if the status
code check passes.
This can either be a _string_ or a _regex_.## no\_follow\_redirects
Setting this variable prevents the healthcheck from following redirects.
## ua
An optional attribute to override the default user agent. This must be of type [LWP::UserAgent](https://metacpan.org/pod/LWP%3A%3AUserAgent).
## options
See [LWP::UserAgent](https://metacpan.org/pod/LWP%3A%3AUserAgent) for available options. Takes a hash reference of key/value
pairs in order to configure things like ssl\_opts, timeout, etc.It is optional.
By default provides a custom `agent` string and a default `timeout` of 7.
# METHODS
## Check Methods
Individual HealthCheck results are added in this order as the return value from these methods:
### check\_status
my $result = $self->check_status( $response );
This method takes in a [HTTP::Response](https://metacpan.org/pod/HTTP%3A%3AResponse) object and returns a [healthcheck result](https://grantstreetgroup.github.io/HealthCheck.html#results)
with a `status` key and an `info` key. The status is `CRITICAL` if a successful HTTP status code was not received,
if the `Client-Warning` HTTP response header is 'Internal response', or if the `X-Squid-Error` HTTP response header is set.
Otherwise, it is `OK`.### check\_response\_time
my $result = $self->check_response_time( $elapsed_time );
This method takes in a number of seconds and returns a [healthcheck result](https://grantstreetgroup.github.io/HealthCheck.html#results)
with a `status` key and an `info` key. The status is `WARNING` if the response time exceeds the `response_time_threshold`.
Otherwise, it is `OK`.### check\_content
my $response = $self->check_content( $response );
This method takes in a [HTTP::Response](https://metacpan.org/pod/HTTP%3A%3AResponse) object and returns a [healthcheck result](https://grantstreetgroup.github.io/HealthCheck.html#results)
with a `status` key and an `info` key. The status is `CRITICAL` if the content of the response does not match the `content_regex` attribute.
Otherwise, it is `OK`.Note, this is not called if the result of ["check\_status"](#check_status) is not `OK`.
## send\_request
my $response = $self->send_request;
This is the method called internally to receive a response for the healthcheck. Defaults to calling
the `request` method on the user agent and provided `request` attribute, but this can be overridden in
a subclass.# DEPENDENCIES
[HealthCheck::Diagnostic](https://metacpan.org/pod/HealthCheck%3A%3ADiagnostic)
[LWP::UserAgent](https://metacpan.org/pod/LWP%3A%3AUserAgent)# CONFIGURATION AND ENVIRONMENT
None
# AUTHOR
Grant Street Group
# COPYRIGHT AND LICENSE
This software is Copyright (c) 2018 - 2024 by Grant Street Group.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)