Используем Зонд Atlas RIPE

Зонд Atlas RIPE предназначен для мониторинга доступности сети и оповещения этим самым сервера Atlas RIPE. Это нехитрое устройство можно получить бесплатно, зарегистрировавшись и заполнив соответствующую форму. Небольшое описание и несколько фотографий о этом устройстве можно увидеть на хабре.

Пользы от такого устройства не так мало, как могло было бы показаться с начала. RIPE награждает своей внутренней валютой за аптайм зонда в сети, а на эту валюту можно использовать кое какие дополнительные возможности. Например, проверять доступность какого либо ресурса из какой либо точки земли, а т.е. другого зонда. Ну и конечно же, можно просматривать обширную статистику данных со своего зонда. Последнее очень удобно для мониторинга дисконектов у провайдера.

Так же у RIRE есть свое API, с помощью которого можно получить информацию о других зондах или же о своем в удобном json формате. На данный момент нас будет интересовать именно эта функция. Пример ее вывода можно посмотреть здесь. Как видите, тут довольно таки много данных: id зонда, сеть в которой он находится, его состояние и доступность. Если к этому запросу добавить ключ, предварительно созданным в "Личном кабинете", то можно узнать чуть больше информации о своем зонде. Например, свой внешний IP адрес.

Немного поиграв с запросом, у меня получилась такая конструкция:

https://atlas.ripe.net/api/v1/probe/?id=<id>&format=json&key=<API ключ>

И вот, у нас на руках уже все доступные данные о нашем зонде. Теперь придумаем куда же это можно деть. Как пример,  эти данные можно высылать на телефон в удобном виджете. Чтобы долго не мучаться с написанием виджета, будем использовать Universal Widget. Как видно на сайте виджета, данные для виджета должны поступать в виде json с определенными параметрами. Поэтому нужен сервер который будет переделывать для нас данные с сервера в нужный нам вид. Для этого я слепил небольшой скрипт и загнал на хостинг:

<?
function elapsed_time($timestamp, $precision = 2) {
  $time = time() - $timestamp;
  $a = array('decade' => 315576000, 'year' => 31557600, 'month' => 2629800, 'week' => 604800, 'day' => 86400, 'hour' => 3600, 'min' => 60, 'sec' => 1);
  $i = 0;
    foreach($a as $k => $v) {
      $k = floor($time/$v);
      if ($k) $i++;
      $time = $i >= $precision ? 0 : $time - $k * $v;
      $s = $k > 1 ? 's' : '';
      $k = $k ? $k.' '.$k.$s.' ' : '';
      @$result .= $k;
    }
  return $result ? $result.'' : '1 sec to go';
}

$url = "<span style="line-height: 1.3em;">https://atlas.ripe.net/api/v1/probe/?id=<id>&format=json&key=<API ключ></span><span style="line-height: 1.3em;">";</span>  
$data = file_get_contents($url, true);
$data = json_decode($data,true);
$data = $data["objects"][0];
if ($data["status_name"] == "Connected") {
        $Scolor = "green";
        $IPcolor = "white";
        $uptime = $data["status_since"];
        $uptime = elapsed_time($uptime,10);
} else {
        $Scolor = "red";
        $IPcolor = "gray";
        $uptime = "-";
}
$jsonData = array(
        "title" => "ftp27server",
        "type"  => "list",
        "date"  => date("d.m.y H:i:s"),
        "data"  => array(
                array("name"=>"Status", "value"=>$data["status_name"], "color"=>$Scolor),
                array("name"=>"IPv4", "value"=>$data["address_v4"], "color"=>$IPcolor),
                array("name"=>"Uptime", "value"=>$uptime, "color"=>$IPcolor)
        )
);
echo json_encode($jsonData);
?>

В результате получаем красивый вывод на виджет:

Конечно же, можно было бы сделать то же самое, подключаясь на ПК напрямую, но к несчастью, на домашнем ПК находятся две системы и весьма не удобно на каждой ОС держать по серверу, да и ко всему прочему при перезагрузке сбивается Uptime, что тоже не может не печалить.