This composer package allows us to easily integrate PingPing
APIs in your Laravel
project.
What is PingPing ?
PingPing is the simplest uptime monitoring service in the world to get notified, when your website is down or your certificate becomes invalid. No more, no less.
Firstly require this package using following command.
composer require enlight/pingping
This package support's auto discovery but for any reason you need to add ServiceProvider
into providers
array manually then check follow steps below.
Open config/app.php
and, within the providers
array, append:
Enlight\PingPing\Providers\PingPingServiceProvider::class
This will bootstrap the package into Laravel.
Check your .env
file, and ensure that your PING_PING_API_TOKEN
is set with valid token.
You can get the token from below link and make sure it is enabled.
You are all set to use it.
Optionally, You can publish configuration file, so you can modify defaults values.
To Publish Configuration Run
php artisan vendor:publish --provider="Enlight\PingPing\Providers\PingPingServiceProvider" --tag="config"
Exported config you can find in /config
folder as ping-ping.php
.
All methods and API calls will return Illuminate\Http\Client\Response
instance. That mean's, you have access to
following methods.
$response->body() : string;
$response->json() : array|mixed;
$response->collect() : Illuminate\Support\Collection;
$response->status() : int;
$response->ok() : bool;
$response->successful() : bool;
$response->failed() : bool;
$response->serverError() : bool;
$response->clientError() : bool;
$response->header($header) : string;
$response->headers() : array;
use Enlight\PingPing\Client;
public function index(Client $client)
{
$response = $client->monitors();
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
use Enlight\PingPing\Client;
public function show($id, Client $client)
{
$response = $client->monitors((int) $id);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
use Enlight\PingPing\Client;
use Enlight\PingPing\Exceptions\MonitorIDRequiredException;
/**
* @throws MonitorIDRequiredException
*/
public function show($id, Client $client)
{
$response = $client->statistics((int) $id);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
use Enlight\PingPing\Client;
use Enlight\PingPing\Exceptions\ValidUrlRequiredException;
/**
* @throws ValidUrlRequiredException
*/
public function store(Client $client)
{
$url = 'https://my-cool-website.test';
$response = $client->createMonitor($url);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
use Enlight\PingPing\Client;
use Enlight\PingPing\Exceptions\AliasRequiredException;
use Enlight\PingPing\Exceptions\ValidUrlRequiredException;
use Enlight\PingPing\Exceptions\MonitorIDRequiredException;
/**
* @throws AliasRequiredException
* @throws ValidUrlRequiredException
* @throws MonitorIDRequiredException
*/
public function update($id, Client $client)
{
$url = 'https://my-cool-website2.test';
$alias = 'My cool website2';
$response = $client->updateMonitor((int) $id, $url, $alias);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
use Enlight\PingPing\Client;
use Enlight\PingPing\Exceptions\MonitorIDRequiredException;
/**
* @throws MonitorIDRequiredException
*/
public function destroy($id, Client $client)
{
$response = $client->deleteMonitor((int) $id);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
Finally, your updated controllers might look like this now.
<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use Enlight\PingPing\Client;
use Enlight\PingPing\Exceptions\AliasRequiredException;
use Enlight\PingPing\Exceptions\ValidUrlRequiredException;
use Enlight\PingPing\Exceptions\MonitorIDRequiredException;
class MonitorController extends Controller
{
/** @var Client */
private $client;
public function __construct(Client $client)
{
$this->client = $client;
}
public function index()
{
$response = $this->client->monitors();
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
public function show($id)
{
$response = $this->client->monitors((int) $id);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
/**
* @throws ValidUrlRequiredException
*/
public function store()
{
$url = 'https://my-cool-website.test';
$response = $this->client->createMonitor($url);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
/**
* @throws AliasRequiredException
* @throws ValidUrlRequiredException
* @throws MonitorIDRequiredException
*/
public function update($id)
{
$url = 'https://my-cool-website2.test';
$alias = 'My cool website2';
$response = $this->client->updateMonitor((int) $id, $url, $alias);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
/**
* @throws MonitorIDRequiredException
*/
public function destroy($id)
{
$response = $this->client->deleteMonitor((int) $id);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
}
<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use Enlight\PingPing\Client;
use Enlight\PingPing\Exceptions\MonitorIDRequiredException;
class StatisticsController extends Controller
{
/**
* @throws MonitorIDRequiredException
*/
public function show($id, Client $client)
{
$response = $client->statistics((int) $id);
if ($response->failed()) {
return $response->json();
}
return $response->json();
}
}
This package is inspired by the Steve's blog post on Working with third party services in Laravel . I highly recommend you to read it.
Thank You :)
Happy Coding.