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

MRTG не собирает

 

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

Как быть?

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

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

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

0
419
gyurgin_ @gyurgin_
Ну если я правильно понял что на выходе нужно получить в первой строке количество слушателей, во второй пик слушателей и в третьей аптайм потока или сервера то вот вариант с status-json:
  1. <?php
  2. $file_name = "http://air.ru:8000/status-json.xsl";
  3. $mount = isset($argv[1]) ? "/" . $argv[1] : "/all";
  4. $file_name = $mount === "/all" ? $file_name : $file_name . "?mount=" . $mount;
  5. $mass = json_decode(file_get_contents($file_name), true);
  6. $list = $peak = $ti = 0;
  7. if (isset($mass['icestats']['source']['stream_start'])) {
  8. $list = $mass['icestats']['source']['listeners'];
  9. $peak = $mass['icestats']['source']['listener_peak'];
  10. $ti = $mass['icestats']['source']['stream_start'];
  11. } else {
  12. $ti = $mass['icestats']['server_start'];
  13. if (isset($mass['icestats']['source'])) {
  14. foreach ($mass['icestats']['source'] as $source) {
  15. $list = $list + $source['listeners'];
  16. }
  17. }
  18. }
  19. $ti = time() - strtotime($ti);
  20. $day = floor($ti/86500);
  21. $he = floor(($ti-$day*86500)/3600);
  22. $mi = floor(($ti-$day*86500-$he*3600)/60);
  23. $upt = $day . " days, " . $he . " hours, " . $mi . " minutes.";
  24. echo $list . PHP_EOL . $peak . PHP_EOL . $upt . PHP_EOL . $mount;
  25. ?>

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

Пробуйте - должно работать.
Жуткая некрофилия на самом деле эта статистика что с mrtg, что с minin, что с cacti и еще не знаю что там использовали в древние времена, с бд все куда проще и интересней.

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

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

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

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

0