ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

MRTG не собирает

 

237
Rocketdock @Rocketdock
Здравствуйте. Настроил MRTG. Все нормально работает графики показывает, но в них все по нулям.
Файл allstat.php выглядит так:
< ?php
$file_name='http://air.ru:8000/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$list=$mass [14];
$mas=explode (" ", $mass[7]);
$ti=substr($mas [0],7);
$day=floor($ti/86500);
$he=floor(($ti-$day*86500)/3600);
$mi=floor(($ti-$day*86500-$he*3600)/60);
$upt="".$day." days, ".$he." hours, ".$mi." minutes.";
$s=0;
echo $list."n";
echo $s."n";
echo $upt."n";
echo "/all"; ?>

Как быть?

237
Rocketdock @Rocketdock
UP
Может рабочий аналог подскажите?

419
gyurgin_ @gyurgin_
Да кто ж уже помнит что там было, да и тупой это принцип извне собирать данные если через yp или авторизацию icecast их сам отдает.
А там уже в базу, а из базы как угодно, при помощи highcharts например.
Да и status2 он по-моему только в KH остался, да не тот уже наверняка...

237
Rocketdock @Rocketdock
Логика сбора mrtg нас полностью устраивает. Подключать бд не очень хочется.
Может есть рабочие аналоги сбора статистики... Заплатим за работу

419
gyurgin_ @gyurgin_
Ну если я правильно понял что на выходе нужно получить в первой строке количество слушателей, во второй пик слушателей и в третьей аптайм потока или сервера то вот вариант с status-json: <?php
$file_name = "http://air.ru:8000/status-json.xsl";
$mount = isset($argv[1]) ? "/" . $argv[1] : "/all";
$file_name = $mount === "/all" ? $file_name : $file_name . "?mount=" . $mount;
$mass = json_decode(file_get_contents($file_name), true);
$list = $peak = $ti = 0;
if (isset($mass['icestats']['source']['stream_start'])) {
$list = $mass['icestats']['source']['listeners'];
$peak = $mass['icestats']['source']['listener_peak'];
$ti = $mass['icestats']['source']['stream_start'];
} else {
$ti = $mass['icestats']['server_start'];
if (isset($mass['icestats']['source'])) {
foreach ($mass['icestats']['source'] as $source) {
$list = $list + $source['listeners'];
}
}
}
$ti = time() - strtotime($ti);
$day = floor($ti/86500);
$he = floor(($ti-$day*86500)/3600);
$mi = floor(($ti-$day*86500-$he*3600)/60);
$upt = $day . " days, " . $he . " hours, " . $mi . " minutes.";
echo $list . PHP_EOL . $peak . PHP_EOL . $upt . PHP_EOL . $mount;
?>

Вызывать без аргументов, так например:/usr/bin/php allstat.php если нужна суммарная информация по серверу, прошу учесть что в таком случае пиковое значение будет нулевым (считать сумму пиков с потоков мягко говоря некорректно) и будет использован аптайм сервера.
Ну и чтобы получить данные конкретного потока добавляем к строке запуска в качестве аргумента нужный поток, например так:/usr/bin/php allstat.php radio.mp3
Пробуйте - должно работать.
Жуткая некрофилия на самом деле эта статистика что с mrtg, что с minin, что с cacti и еще не знаю что там использовали в древние времена, с бд все куда проще и интересней.

237
Rocketdock @Rocketdock
Файла json на сервере у нас нет.
Версия icecast 2.3.2

419
gyurgin_ @gyurgin_
Возьмите из дистрибутива нового айскаста файлы status-json.xsl и xml2json.xslt и закиньте себе в web, делов то.

419
gyurgin_ @gyurgin_
А, так у Вас status2.xsl с дистрибутива, тогда просто скрипт пофиксить надо:<?php
$file_name = 'http://air.ru:8000/status2.xsl';
$r = fopen($file_name, 'r');
$text = fread($r, 1000);
fclose($r);
$mass = explode(",", $text);
$list = $mass[9];
$mas = explode(" ", $mass[7]);
$ti = substr($mas[0], 7);
$day = floor($ti / 86500);
$he = floor(($ti - $day * 86500) / 3600);
$mi = floor(($ti - $day * 86500 - $he * 3600) / 60);
$upt = $day . " days, " . $he . " hours, " . $mi . " minutes.";
$s = 0;
echo $list . "\n";
echo $s . "\n";
echo $upt . "\n";
echo "/all";
?>

как то так, думаю сойдет.