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

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

Модератор: immortal

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

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

Сообщение Alex » Пт янв 11, 2013 12:41 am

вызов из OnNewMinute 8-ми разных параметров.
Всё страньше и страньше. :)

Перенёс из метода в скрипт (и запустил как скрипт вручную) - действительно всё работает, только выдаёт

Warning: Invalid argument supplied for foreach() in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(130) : eval()'d code on line 24

это как раз - foreach($item as $child) {

Но! При работе в onNewMinute или при запуске этого же (!) скрипта через runScript из onNewMinute — не работает.

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

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

Сообщение raptorialfungus » Пт янв 11, 2013 7:48 am

Alex писал(а):Warning: Invalid argument supplied for foreach() in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(130) : eval()'d code on line 24
Это нормально. Я просто не встраивал всяких проверок на наличие детей у родителей :)
Alex писал(а):Но! При работе в onNewMinute или при запуске этого же (!) скрипта через runScript из onNewMinute — не работает.
?!!
Пора бы уже этот onNewMinute в студию и еще его родительский, если он не пустой.

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

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

Сообщение Alex » Пт янв 11, 2013 11:38 am

Создал новый таймер, у которого метод onNewMinute пустой. Только одна строчка runScript. Вот этот скрипт не работает при запуске даже из совершенно пустого метода.

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

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,' ')));
        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,'17');
searchJson($json,'24');
searchJson($json,'27');
searchJson($json,'32');
searchJson($json,'50');
Одновременно, при ручном запуске он работает. :shock:
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пт янв 11, 2013 7:01 pm

Запустил по второму (ручному) варианту. Всё заработало. Для практических целей более чем достаточно. Вопрос, можно сказать, снят.

С другой стороны жалко, что функция (у меня) не работает. Как то неаккуратненько получается. А если у меня не работает, значит и у других может потихому барахлить. Пока ещё разберёшься, что ниже одного из её вызовов (!) при некоторых условиях (!) ничего не исполняется... Очумеешь глюки выискивать...
seven
Сообщения: 22
Зарегистрирован: Пн июн 03, 2013 9:49 pm
Благодарил (а): 1 раз
Поблагодарили: 0

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

Сообщение seven » Сб июн 08, 2013 3:07 pm

Alex, можно пару вопросов по Вашему веб-интерфейсу, описанном на 2й странице этой темы? Понравился очень :)
Я так понял из json файла Вы вытаскиваете не только текущее значение (value), но и минимальное (Min) и максимальное значение (Max).
Т.е. вводится еще 12 переменных для 6-ти датчиков и 2 временные переменные (для Min и Max)? Если да, то тут понятно все.
А где Вы высчитываете разницу? И откуда берется время последнего обновления?
analog20-25 это обеъекты, а value,directionArrow, updated, statDayMax,statDayMin, statDayDelta это их свойства?
И что совсем не понятно как строятся индикаторы, особенно вот эти строки:

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

&health=%analog20.health%&dbalert=%analog20.alert1%&balert=%analog20.alert2%&galert=%analog20.alert3%&oalert=%analog20.alert4%&ralert=%analog20.alert5%
Откуда это все берется? :)
Спасибо.
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

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

Сообщение adzam » Ср ноя 06, 2013 10:06 pm

A у меня последний код Алекса выдает такую ошибку

Warning: Invalid argument supplied for foreach() in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(135) : eval()'d code on line 2
5 раз т.е. на все запросы
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
DiArt
Сообщения: 210
Зарегистрирован: Пт апр 12, 2013 2:27 pm
Откуда: Уфа
Благодарил (а): 28 раз
Поблагодарили: 16 раз

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

Сообщение DiArt » Вс ноя 10, 2013 10:37 am

seven писал(а):Alex, можно пару вопросов по Вашему веб-интерфейсу, описанном на 2й странице этой темы? Понравился очень :)
Я так понял из json файла Вы вытаскиваете не только текущее значение (value), но и минимальное (Min) и максимальное значение (Max).
Т.е. вводится еще 12 переменных для 6-ти датчиков и 2 временные переменные (для Min и Max)? Если да, то тут понятно все.
А где Вы высчитываете разницу? И откуда берется время последнего обновления?
analog20-25 это обеъекты, а value,directionArrow, updated, statDayMax,statDayMin, statDayDelta это их свойства?
И что совсем не понятно как строятся индикаторы, особенно вот эти строки:

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

&health=%analog20.health%&dbalert=%analog20.alert1%&balert=%analog20.alert2%&galert=%analog20.alert3%&oalert=%analog20.alert4%&ralert=%analog20.alert5%
Откуда это все берется? :)
Спасибо.
Вопрос также актуален и для меня
Система на Неттоп 3Q Nettop Qoo!
(Intel Celeron J1800, 2x2410 МГц, 4096 Мб, HDD 1000 Гб, HDMI, VGA , Wi-Fi, Ethernet, Ubuntu 14.04.2)
Вторая система на Raspberry Pi 3.
D-Link DCS-930L/Broadlink RM2-Pro/BroadLink SP3 CC/Ginzzu HS-K07W
Я в CONNECT
havenofear
Сообщения: 120
Зарегистрирован: Чт янв 30, 2014 7:18 am
Благодарил (а): 4 раза
Поблагодарили: 3 раза

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

Сообщение havenofear » Чт янв 30, 2014 7:22 am

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

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

function searchJson($obj, $valut, $direct)
{foreach($obj->Children as $child)
    {   
       if(isset($child->id) && $child->id == $valut)
           {
                $sensorvalue = $child->Value;
                sg($direct,$sensorvalue);
                          }
   searchJson($child,$valut,$direct);
    }
return;
}

$ch = curl_init('http://localhost:8085/data.json');                                                                     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$ohm = curl_exec($ch);
$json = json_decode($ohm);
searchJson($json,'8','ThisComputer.CPUtemp');
searchJson($json,'25','ThisComputer.HDDtemp');
dimik
Сообщения: 141
Зарегистрирован: Пн апр 22, 2013 10:42 am
Благодарил (а): 3 раза
Поблагодарили: 8 раз

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

Сообщение dimik » Вс фев 23, 2014 10:07 am

havenofear писал(а):Всем доброго времени суток. Пару недель назад начал разбираться с данной системой, очень понравилось... Взял выложенный в данной теме скрипт и немного "допилил". Вот что у меня получилось, если кому-то нужно - пользуйтесь, буду рад замечаниям...

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

function searchJson($obj, $valut, $direct)
{foreach($obj->Children as $child)
    {   
       if(isset($child->id) && $child->id == $valut)
           {
                $sensorvalue = $child->Value;
                sg($direct,$sensorvalue);
                          }
   searchJson($child,$valut,$direct);
    }
return;
}

$ch = curl_init('http://localhost:8085/data.json');                                                                     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$ohm = curl_exec($ch);
$json = json_decode($ohm);
searchJson($json,'8','ThisComputer.CPUtemp');
searchJson($json,'25','ThisComputer.HDDtemp');
Да. Скрипт работает замечательно. А вот как сделать чтобы состояние сервера опрашивалось циклически?
Создал файл cycle_server.php, с содержимым приведенным выше.... и почему-то этот цикл не отрабатывает. Что не так?
dimik
Сообщения: 141
Зарегистрирован: Пн апр 22, 2013 10:42 am
Благодарил (а): 3 раза
Поблагодарили: 8 раз

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

Сообщение dimik » Чт мар 06, 2014 5:03 pm

Вот всегда так. Все сделал, заработало и забыл про проблему, а поделиться решением с другими забыл :)
вот код cycle_server.php:

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

<?php
/*
* @version 0.2 (auto-set)
*/

chdir(dirname(__FILE__).'/../');

include_once("./config.php");
include_once("./lib/loader.php");

set_time_limit(0);

// connecting to database
$db = new mysql(DB_HOST, '', DB_USER, DB_PASSWORD, DB_NAME); 
 
include_once("./load_settings.php");


function searchJson($obj, $valut, $direct)
{foreach($obj->Children as $child)
    {   
       if(isset($child->id) && $child->id == $valut)
           {
                $sensorvalue = $child->Value;
                sg($direct,$sensorvalue);
                          }
   searchJson($child,$valut,$direct);
    }
return;
}



$checked_time=0;
while(1) 
{
   echo date("H:i:s") . " running " . basename(__FILE__) . "\n";
   if (time()-$checked_time>10) {
	$ch = curl_init('http://localhost:8085/data.json');                                                                 
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
	$ohm = curl_exec($ch);
	$json = json_decode($ohm);
	searchJson($json,'31','ThisComputer.CPUtemp');
	searchJson($json,'33','ThisComputer.CPUload');
	searchJson($json,'18','ThisComputer.CPUFan');
   }

   if (file_exists('./reboot')) 
   {
      $db->Disconnect();
      exit;
   }
   sleep(1);
}

DebMes("Unexpected close of cycle: " . basename(__FILE__));
?>
ну и перезапустить MDM :)
Ответить