[Приложение] Open Hardware Monitor

Разработка дополнительных модулей, подключение различных приложений.

Модератор: immortal

raptorialfungus
Сообщения: 75
Зарегистрирован: Чт ноя 29, 2012 4:13 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение raptorialfungus » Чт дек 13, 2012 8:39 am

Alex писал(а):Странно как то. То висели пустые индикаторы примерно минут сорок. Сейчас посмотрел — появились цифры. Вроде правильные. ??? Ничего не менял!

Ладно, потестирую — отпишусь.
Ну, слава богу. А то я уже всю голову изломал. Собирался посоветовать переинсталлить всё. Устройства Онлайн заработали, кстати?

К тому же

Код: Выделить всё

Warning: Invalid argument supplied for foreach() in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(130) : eval()'d code on line 4
4: foreach($item as $child) {
И штук 50 одинаковых ерроров. 
Это не ерроры, а ворнинги ;)
Андрей
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение Alex » Чт дек 13, 2012 10:12 am

Ну, слава богу. А то я уже всю голову изломал. Собирался посоветовать переинсталлить всё.
Сейчас буду разбираться как это — то есть значения, то нет. Либо в коде ошибка, либо у меня рука дрогнула. :)
Устройства Онлайн заработали, кстати?
Эта эпическая битва нам ещё предстоит. :)
Это не ерроры, а ворнинги
А в чём разница? Исполнение останавливается?
raptorialfungus
Сообщения: 75
Зарегистрирован: Чт ноя 29, 2012 4:13 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение raptorialfungus » Чт дек 13, 2012 11:11 am

Alex писал(а):
Это не ерроры, а ворнинги
А в чём разница? Исполнение останавливается?
Не останавливается. Просто предупреждения. И у меня они вообще не выводятся и всё в порядке.
Андрей
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение Alex » Чт дек 13, 2012 11:27 am

Протестировал. Почему не работало понять не удалось. Хотя если следовать логике то какая то причина должна быть. Сейчас работает. Возникло 2 вопроса.

Первый. Код заточен под Value. Если мне нужно Text, то я пишу вторую функцию? Если да — то всё понятно, код не нужен, если нет — напишите как надо.

Второй. Значения берутся вместе с единицами измерения, что не есть гут. Как грамотно убрать всё после цифр? Единицы измерения совсем не нужны.
raptorialfungus
Сообщения: 75
Зарегистрирован: Чт ноя 29, 2012 4:13 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение raptorialfungus » Чт дек 13, 2012 1:26 pm

Alex писал(а):Возникло 2 вопроса.

Первый. Код заточен под Value. Если мне нужно Text, то я пишу вторую функцию? Если да — то всё понятно, код не нужен, если нет — напишите как надо.
Не, второй функции не надо. Нужна вторая временная глобальная переменная. Ей присваиваем значение того параметра сенсора, который нужен.
Вот кусочек, в котором мы нашли требуемый сенсор:

Код: Выделить всё

      if (isset($child->id) && $child->id == $value) {
        sg('ThisComputer.temp', $child->Value);
        return;
      }
Соответственно можем использовать:
$child->id, $child->Text, $child->Min, $child->Value,$child->Max,$child->ImageURL
Alex писал(а):Второй. Значения берутся вместе с единицами измерения, что не есть гут. Как грамотно убрать всё после цифр? Единицы измерения совсем не нужны.
Логичный вопрос! Я не использую эту прогу и поэтому не добил эту тему. Правильно будет прямо внутри функции всё и зачистить. Если принять во внимание, что все просмотренные мною значения отделены пробелами от единиц измерения, то тогда используем следующую конструкцию:

Код: Выделить всё

if (isset($child->id) && $child->id == $value) {
        sg('ThisComputer.temp', substr($child->Value,0,strpos($child->Value,' ')));
        return;
      }
Находим позицию пробела в значении и вырезаем кусок строки необходимой длины.
Для других параметров меняем Value на что-то еще в двух местах.

Андрей
Андрей
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение Alex » Чт дек 13, 2012 3:25 pm

raptorialfungus, спасибо, всё заработало.

Заметил один маленький момент. В MajorDoMo везде в качестве разделителя используется точка, а в OHM — запятая. И значения получаются тоже с запятыми, вместо точки. Вроде всё работает, не знаю надо ли этот момент исправлять и если надо, то как?

Ещё один теоретический вопрос. Если хочется часто получать данные (например для монитора загрузки процессора), то как часто можно делать запросы json? Что бы не перегружать компьютер и сеть? Раз в 20 сек.? В 10 сек? В 5 сек? Каков минимальный разумный интервал?
raptorialfungus
Сообщения: 75
Зарегистрирован: Чт ноя 29, 2012 4:13 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение raptorialfungus » Чт дек 13, 2012 4:40 pm

Alex писал(а):Заметил один маленький момент. В MajorDoMo везде в качестве разделителя используется точка, а в OHM — запятая. И значения получаются тоже с запятыми, вместо точки. Вроде всё работает, не знаю надо ли этот момент исправлять и если надо, то как?
Да, наверное, лучше исправить.
Тогда обрамляем еще одной функцией:

Код: Выделить всё

sg('ThisComputer.temp', str_replace(',','.',substr($child->Value,0,strpos($child->Value,' '))));
Или правим региональные настройки в компе :)
Alex писал(а):Ещё один теоретический вопрос. Если хочется часто получать данные (например для монитора загрузки процессора), то как часто можно делать запросы json? Что бы не перегружать компьютер и сеть? Раз в 20 сек.? В 10 сек? В 5 сек? Каков минимальный разумный интервал?
Ответ на запрос весит всего 7 килобайт. IMHO можно хоть каждую секунду.
Кстати, наверняка, есть недокументированные возможности запросов к серверу. Типа "получить json только для определенного id". Тогда размер пакета будет в разы меньше.

P.S. Посмотрел исходники http-сервера OHM - там всё просто. Никаких параметров передавать нельзя. Всегда в ответ полный json.
Андрей
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение Alex » Чт дек 13, 2012 4:55 pm

Всё ясно и понятно. Спасибо за ответы.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение Alex » Вт янв 08, 2013 12:06 am

С рекурсивностью я не перемудрил?
А вопрос то оказывается не закрыт. Долго не мог понять почему всё работает через одно место. Выяснилось, что функция searchJson работает некорректно.

В некоторых случаях работает правильно, а в некоторых вызов функции аж выбивает из onNewMinute и всё, что ниже вызова функции вообще не исполняется. В примере номер 32 отрабатывает корректно, а номер 17 уже выбивает из onNewMinute.

RAW:

[{"id": 32, "Text": "Memory", "Children": [], "Min": "23,2 %", "Value": "26,5 %",
[{"id": 17, "Text": "CPU Fan", "Children": [], "Min": "0 RPM", "Value": "1010 RPM",

Подозреваю, что дело связано с RETURN-ом. Иначе как можно вывалиться из onNewMinute?

Код: Выделить всё

function searchJson($obj, $value){
  foreach($obj as $item) {
    foreach($item as $child) {
      if (isset($child->id) && $child->id == $value) {
        sg('ThisComputer.temp', substr($child->Value,0,strpos($child->Value,' ')));
        sg('ThisComputer.tempText', $child->Text);
        return;
      }
      searchJson($child,$value);
    }
  }
  return;
}


$ch = curl_init('http://192.168.1.2:8085/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$ohm = curl_exec($ch);
$json = json_decode($ohm);


searchJson($json,'32'); 
sg('analog22.value',gg('ThisComputer.temp'));

searchJson($json,'17'); 



// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// <----------- ВЫЗОВ ФУНКЦИИ ВЫБИВАЕТ ИЗ onNewMinute
// <----------- И, СООТВЕТСТВЕННО, НЕ ИСПОЛНЯЕТСЯ ВСЁ, ЧТО НИЖЕ 
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



sg('analog24.value',gg('ThisComputer.temp'));

...
...
...
raptorialfungus
Сообщения: 75
Зарегистрирован: Чт ноя 29, 2012 4:13 pm
Благодарил (а): 0
Поблагодарили: 9 раз

Re: Мониторинг системных ресурсов локально и через сеть

Сообщение raptorialfungus » Чт янв 10, 2013 10:40 am

Alex писал(а): Подозреваю, что дело связано с RETURN-ом. Иначе как можно вывалиться из onNewMinute?
:?
Что-то не видно никакой взаимосвязи. Но return'ы можно вообще убрать, насколько я понимаю. При таких небольших объемах файла не должно быть серьезного падения в скорости. Но лучше, конечно, через debmes посмотреть, сколько выполняется с return и без return.
Увы, не использую сейчас OHM и нет возможности поэкспериментировать.

Андрей
Андрей
Ответить