Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Quickly mute or unmute multiple checks in bulk using this small PHP page made by Eric Bouquerel from Bol d'Air (@Boldairdev)
body {
font-family: sans-serif;
}
header, .params, .submit {
margin: 0 auto;
width: 100%;
text-align: center;
color :#3d5b76;
padding-bottom: 25px;
}
.submit {
padding-top: 25px;
}
.btn-primary {
background-color: #3d5b76;
color: #fff;
padding: 8px;
border: 1px solid white;
border-radius: 4px;
font-weight: 600;
}
.btn-primary:hover {
background-color:#fff ;
color: #3d5b76;
padding: 8px;
border: 1px solid #3d5b76;
border-radius: 4px;
font-weight: 600;
}
table {
border-collapse: collapse;
border: 0;
margin: 0 auto;
}
th, td {
border-collapse: collapse;
padding: 15px;
text-align: left;
font-weight: normal;
margin: 0;
}
th,td {
border-collapse: collapse;
border-top: 1px solid #888;
border-bottom: 1px solid #888;
}
th.left, td.left {
border-collapse: collapse;
border: 0;
border-bottom: 1px solid #888;
border-left: 1px solid #888;
}
th.right, td.right{
border-collapse: collapse;
border: 0;
border-bottom: 1px solid #888;
border-right: 1px solid #888;
}
th.left, th.right {
border-top: 1px solid #888;
}
th {
background-color: #3d5b76;
color: #fff;
}
tr:nth-child(even) {
background-color: Lightblue;
}
<?php
// call the request Class that will actually communicate with the API
require "RestRequest.inc.php";
/* Get the APIKey set intentionally above Document Root, so it's never directly accessible;
(the file just contains '<?php $api_key="xxxxxxxxxxx"; ?>'
*/
require "../updownapi.php";
// prepare the needed parameters to communicate with the api
$base_url = "https://updown.io/api/";
$request = new RestRequest();
$request->setApiKey($api_key);
$request->addCurlHeader('X-API-KEY', $api_key);
$request->addCurlHeader('Accept', $request->getAcceptType());
// grab the list of existing checks
// $request = new RestRequest($base_url.'checks?api-key='.$api_key, 'GET');
//
function getAllChecks () {
global $request;
global $base_url;
$request->setUrl($base_url.'checks');
$request->setVerb('GET');
$request->execute();
$allchecks = json_decode( $request->getResponseBody() );
return $allchecks;
}
if(isset($_POST['posted'])) {
foreach ($_POST as $key => $value) {
$$key = $value;
}
// checking the mute duration parameter
//
if (!isset($mutefor)){
$arg = array('mute_until'=>'');
} else {
if ($mutefor =='') {
$arg = array('mute_until'=>'');
} else {
$t = time();
$t2 = $t +$mutefor;
$now = date('c',$t);
$until = date('c',$t2);
$arg = array('mute_until'=>$until);
}
}
$returned = array() ;
if(isset ($tokens)) {
for ($i=0; $i < count($tokens); ++$i) {
$request->setRequestBody($arg);
$request->setVerb('PUT');
$request->setUrl($base_url.'checks/'.$tokens[$i]);
$request->execute();
$returned[$i] = json_decode($request->getResponseBody());
}
//reget the checks acfter muting
$allchecks=array();
$request->flush();
$allchecks = getAllChecks();
$formstr= '<table><thead><th class="left"><input type="checkbox" id="checkall" value=""/></th><th>check</th><th class="right">Mute Until</th></thead><tbody>';
for ($i=0; $i < count($allchecks) ; $i++) {
$formstr.='<tr><td class="left"><input type="checkbox" class="tk" name="tokens[]" id="token'.$i.'" value="'. $allchecks[$i]->token .'"></td>
<td>'. $allchecks[$i]->alias .' ('. $allchecks[$i]->url .')</td><td class="right">'. $allchecks[$i]->mute_until .'</td></tr>';
}
$formstr.='</tbody></table>';
}
} else {
$allchecks=array();
$request->flush();
$allchecks = getAllChecks($base_url);
$formstr= '<table><thead><th class="left"><input type="checkbox" id="checkall" value=""/></th><th>check</th><th class="right">Mute Until</th></thead><tbody>';
for ($i=0; $i < count($allchecks) ; $i++) {
$formstr.='<tr><td class="left"><input type="checkbox" class="tk" name="tokens[]" id="token'.$i.'" value="'. $allchecks[$i]->token .'"></td><td>'. $allchecks[$i]->alias .' ('. $allchecks[$i]->url .')</td><td class="right">'. $allchecks[$i]->mute_until .'</td></tr>';
}
$formstr.='</tbody></table>';
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mute/Unmute Updown.io checks</title>
<link rel="stylesheet" type="text/css" href="reqchecks.css">
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
</head>
<body>
<header>
<h1>Mute / Unmute Updown.io Alerts</h1>
<p> Use this form to mute alerts from updown.io</p>
</header>
<form action="<?php echo $_SERVER['PHP_SELF'] ;?>" method="post">
<div id="params" class="params">
<select name="mutefor">
<option value="" selected>Unmute</option>
<option value="600">10 minute</option>
<option value="1200">20 minute</option>
<option value="1800">30 minute</option>
<option value="3600">1 hour</option>
</select>
</div>
<div id="checkslist">
<?php echo $formstr;?>
</div>
<div id="submit" class="submit">
<input type="hidden" name="posted" value="posted">
<input type="submit" name="submit" class="btn-primary">
</div>
</form>
<script type="text/javascript">
$(document).ready(function() {
$('#checkall').click(
function() {
if( $('#checkall').prop('checked') ) {
$('#checkslist .tk').prop('checked', true);
} else {
$('#checkslist .tk').prop('checked', false);
}
});
});
</script>
</body>
</html>
<?php
class RestRequest
{
protected $url;
protected $verb;
protected $requestBody;
protected $requestLength;
protected $apiKey;
protected $username;
protected $password;
protected $acceptType;
protected $responseBody;
protected $responseInfo;
protected $curlHttpHeaders;
public function __construct ($url = null, $verb = 'GET', $requestBody = null)
{
$this->url = $url;
$this->verb = $verb;
$this->requestBody = $requestBody;
$this->requestLength = 0;
$this->username = null;
$this->password = null;
$this->acceptType = 'application/json';
$this->responseBody = null;
$this->responseInfo = null;
$this->apiKey = null;
$this->curlHttpHeaders = null;
if ($this->requestBody !== null)
{
$this->buildPostBody();
}
}
public function flush ()
{
$this->requestBody = null;
$this->requestLength = 0;
$this->verb = 'GET';
$this->responseBody = null;
$this->responseInfo = null;
}
public function execute ()
{
$ch = curl_init();
$this->setAuth($ch);
try
{
switch (strtoupper($this->verb))
{
case 'GET':
$this->executeGet($ch);
break;
case 'POST':
$this->executePost($ch);
break;
case 'PUT':
$this->executePut($ch);
break;
case 'DELETE':
$this->executeDelete($ch);
break;
default:
throw new InvalidArgumentException('Current verb (' . $this->verb . ') is an invalid REST verb.');
}
}
catch (InvalidArgumentException $e)
{
curl_close($ch);
throw $e;
}
catch (Exception $e)
{
curl_close($ch);
throw $e;
}
}
public function buildPostBody ($data = null)
{
$data = ($data !== null) ? $data : $this->requestBody;
if (!is_array($data))
{
throw new InvalidArgumentException('Invalid data input for postBody. Array expected');
}
$data = http_build_query($data, '', '&');
$this->requestBody = $data;
}
protected function executeGet ($ch)
{
$this->doExecute($ch);
}
protected function executePost ($ch)
{
if (!is_string($this->requestBody))
{
$this->buildPostBody();
}
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody);
curl_setopt($ch, CURLOPT_POST, 1);
$this->doExecute($ch);
}
protected function executePut ($ch)
{
if (!is_string($this->requestBody))
{
$this->buildPostBody();
}
$this->requestLength = strlen($this->requestBody);
// $fh = fopen('php://memory', 'rw');
// fwrite($fh, $this->requestBody);
// rewind($fh);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_POSTFIELDS, $this->requestBody);
// curl_setopt($ch, CURLOPT_INFILE, $fh);
// curl_setopt($ch, CURLOPT_INFILESIZE, $this->requestLength);
// curl_setopt($ch, CURLOPT_PUT, true);
$this->doExecute($ch);
//fclose($fh);
}
protected function executeDelete ($ch)
{
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
$this->doExecute($ch);
}
protected function doExecute (&$curlHandle)
{
$this->setCurlOpts($curlHandle);
$this->responseBody = curl_exec($curlHandle);
$this->responseInfo = curl_getinfo($curlHandle);
curl_close($curlHandle);
}
protected function setCurlOpts (&$curlHandle)
{
curl_setopt($curlHandle, CURLOPT_TIMEOUT, 10);
curl_setopt($curlHandle, CURLOPT_URL, $this->url);
curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
if (!is_null($this->curlHttpHeaders)) {
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $this->curlHttpHeaders);
}
}
protected function setAuth (&$curlHandle)
{
if ($this->username !== null && $this->password !== null)
{
curl_setopt($curlHandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_setopt($curlHandle, CURLOPT_USERPWD, $this->username . ':' . $this->password);
}
}
public function addCurlHeader($label, $value) {
$this->curlHttpHeaders[] = $label.':'.$value;
}
public function getCurlHeaders() {
return $this->curlHttpHeaders;
}
public function getAcceptType ()
{
return $this->acceptType;
}
public function setAcceptType ($acceptType)
{
$this->acceptType = $acceptType;
}
public function getRequestBody ()
{
return $this->requestBody;
}
public function setRequestBody ($requestBody)
{
$this->requestBody = $requestBody;
}
public function getApiKey ()
{
return $this->apiKey;
}
public function setApiKey ($apiKey)
{
$this->apiKey = $apiKey;
}
public function getPassword ()
{
return $this->password;
}
public function setPassword ($password)
{
$this->password = $password;
}
public function getResponseBody ()
{
return $this->responseBody;
}
public function getResponseInfo ()
{
return $this->responseInfo;
}
public function getUrl ()
{
return $this->url;
}
public function setUrl ($url)
{
$this->url = $url;
}
public function getUsername ()
{
return $this->username;
}
public function setUsername ($username)
{
$this->username = $username;
}
public function getVerb ()
{
return $this->verb;
}
public function setVerb ($verb)
{
$this->verb = $verb;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment