Используем Зонд 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, что тоже не может не печалить.