1. Go to this page and download the library: Download pbmedia/laravel-api-health library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
pbmedia / laravel-api-health example snippets
namespace App\Checkers;
use GuzzleHttp\Client;
use Illuminate\Console\Scheduling\Event;
use ProtoneMedia\ApiHealth\Checkers\AbstractHttpChecker;
class LaravelDocumentationChecker extends AbstractHttpChecker
{
/*
* The URL you want to request.
*/
protected $url = 'https://laravel.com/docs/6.0';
/*
* The method you want to use.
*/
protected $method = 'GET';
/*
* Here you can specify the Guzzle HTTP options.
*
* @return \ProtoneMedia\ApiHealth\Checkers\AbstractHttpChecker
*/
public static function create()
{
return new static(new Client, [
// 'headers' => [
// 'X-Foo' => ['Bar', 'Baz'],
// ],
// 'json' => ['foo' => 'bar'],
// 'timeout' => 5,
]);
}
/**
* Defines the checker's schedule.
*
* @param \Illuminate\Console\Scheduling\Event $event
* @return null
*/
public function schedule(Event $event)
{
$event->everyMinute();
// $event->evenInMaintenanceMode();
// $event->onOneServer();
}
}
namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
//
protected function schedule(Schedule $schedule)
{
$schedule->command('api-health:run-checkers')->everyMinute();
}
//
}
use App\Checkers\LaravelDocumentationChecker;
use ProtoneMedia\ApiHealth\Facades\ApiHealth;
ApiHealth::isFailing(LaravelDocumentationChecker::class);
ApiHealth::isPassing(LaravelDocumentationChecker::class);
ApiHealth::fresh()->isFailing(LaravelDocumentationChecker::class);
ApiHealth::fresh()->isPassing(LaravelDocumentationChecker::class);
namespace App\Checkers;
use Illuminate\Console\Scheduling\Event;
use ProtoneMedia\ApiHealth\Checkers\AbstractChecker;
use ProtoneMedia\ApiHealth\Checkers\CheckerHasFailed;
class GetIpAddressByHost extends AbstractChecker
{
public static function create()
{
return new static;
}
public function schedule(Event $event)
{
$event->everyMinute();
}
public function run()
{
$ip = gethostbyname('www.protone.media');
if (!filter_var($ip, FILTER_VALIDATE_IP)) {
throw new CheckerHasFailed("Host www.protone.media did not return a valid IP Address.");
}
}
}
return [
//
'notifications' => [
/**
* Number of minutes until send the failed notification again.
*/
'resend_failed_notification_after_minutes' => 60,
/**
* Class name of the failed notification.
*/
'default_failed_notification' => \ProtoneMedia\ApiHealth\Notifications\CheckerHasFailed::class,
/**
* Class name of the recovered notification.
*/
'default_recovered_notification' => \ProtoneMedia\ApiHealth\Notifications\CheckerHasRecovered::class,
],
//
]
// config/api-health.php
return [
//
'retries' => [
/**
* The number of allowed retries.
*/
'allowed_retries' => 0,
/**
* Here you can specify the configuration of the retry job.
*/
'job' => [
'job' => \ProtoneMedia\ApiHealth\Jobs\RetryChecker::class,
'connection' => null,
'delay' => null,
'queue' => null,
],
],
//
]
class MyChecker extends AbstractChecker
{
protected $allowedRetries = 2;
protected $retryJob = \App\Jobs\RetryChecker::class;
public function withRetryJob($job)
{
$job->delay(now()->addMinutes(3));
}
}
class Server extends Model
{
public function isOnline(): bool
{
//
}
}
namespace App\Checkers;
use App\Models\Server;
use ProtoneMedia\ApiHealth\Checkers\AbstractChecker;
use ProtoneMedia\ApiHealth\Checkers\CheckerHasFailed;
class ServerChecker extends AbstractChecker
{
public $server;
public function __construct(Server $server)
{
$this->server = $server;
}
public static function create(Server $server)
{
return new static($server);
}
public function id(): string
{
return 'server_' . $this->server->id;
}
public function run()
{
if (!$this->server->isOnline()) {
throw new CheckerHasFailed("Server {$this->server->name} is offline.");
}
}
}
use App\Models\Server;
use ProtoneMedia\ApiHealth\Runner;
$serverA = Server::whereIpAddress('1.1.1.1')->first();
$serverB = Server::whereIpAddress('8.8.8.8')->first();
$runner = new Runner([$serverA, $serverB]);
// or
$runner = new Runner(Server::all());
$onlineServers = $runner->passes();
$offlineServers = $runner->failed();
namespace App\Tests;
use App\Checkers\FailingChecker;
use App\Checkers\PassingChecker;
use ProtoneMedia\ApiHealth\Facades\ApiHealth;
class MyTest extends TestCase
{
/** @test */
public function it_can_make_the_passing_checker_fail()
{
ApiHealth::fake();
ApiHealth::mustFail(PassingChecker::class);
ApiHealth::mustPass(FailingChecker::class);
$this->assertTrue(ApiHealth::isFailing(PassingChecker::class));
$this->assertTrue(ApiHealth::isPassing(FailingChecker::class));
}
}