Интегральный индикатор загрузки

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

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

Интегральный индикатор загрузки

Сообщение Alex » Чт мар 13, 2014 12:03 pm

Как создать интегральный индикатор загрузки сервера

Что значит интегральный и зачем он нужен? Обычные индикаторы загрузки не дают представления о действительной (определяющей «здоровье» сервера) загрузке. Обычно мы видим штакет :) и то ли это много, то ли мало — непонятно.

Идея такая — создать индикатор, который усредняет нагрузку за некоторый период времени. Достаточно большой, чтобы отражать среднюю загрузку и достаточно небольшой, чтобы отражать изменение нагрузки в реальном времени. Понятно? Отлично, тогда продолжаем.

Как это реализовать? Нужно создать кольцевой буфер, который постоянно пополняется свежими значениями контроллируемой величины и постоянно теряет старые значения. В данном примере глубина буффера — 120 значений, т. е. при обновлениии раз в 2 секунды усреднение призводится на интервале в 4 минуты. :)

Итак, шаг 1 --------------

Создаём любой объект, например

serverCPUload

создаём любое свойство, например

arrTest

Шаг 2 --------------

Создаём второй объект, например

srvCPUload

создаём любое свойство, например

middleLoad

Шаг 3 --------------

Создаём скрипт, например

ohm_server_cpu_load

С содержимым

---> !!!ЗДЕСЬ ВАШ IP АДРЕС!!! <---
-------------------
$ch = curl_init('http://192.168.1.35:8085/data.json');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

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

//----------------------- CPU

$cpu = $json -> {'Children'}[0] -> {'Children'}[1];
$cpu_load = $cpu -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};

//Debmes("---direct1");

$temp222 = substr($cpu_load, 0, strpos($cpu_load, ' '));
$load = round($temp222, 1);
setGlobal('serverCPUload.value', $load);

// $tt = getGlobal("analog21.val3");
// Debmes($tt);

// Линейка индикатора в меню

$load2 = round($load / 10, 0);

$a = "";

for ($i = 0; $i <= $load2; $i++) {
$a = $a.'■';
}

$len = 8 - $load2;

for ($i = 0; $i <= $len; $i++) {
$a = $a.'□';
}

setGlobal("srvCPUload.visio", $a);


$arr = unserialize(getGlobal('serverCPUload.arrTest'));

$deep = 120;

for ($i = $deep; $i > 0; $i--) {
$arr[$i] = $arr[$i - 1];
}

$arr[0] = $load;

$all = 0;

for ($i = $deep; $i > 0; $i--) {
$all = $all + $arr[$i];
}

$all = round($all / $deep, 0);

setGlobal('serverCPUload.arrTest', serialize($arr));
setGlobal("srvCPUload.middleLoad", $all);
-------------------

, который вызываем раз в 2 секунды любым удобным вам способом


-------------
Внимание! Json настроен на мой компьютер, у вас могут не совпасть значения.

$cpu = $json -> {'Children'}[0] -> {'Children'}[1];
$cpu_load = $cpu -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};

значит вам нужно будет подкорректировать этот фрагмент кода

(ну и OHM должен стоять, естественно)
-------------


Далее, шаг 4 --------------

Редактируем файл

\htdocs\templates\default.html

-------------
Внимание! У вас уже должен быть установлен jsgraphics
http://smartliving.ru/forum/viewtopic.php?f=4&t=1523
-------------

Добавляем в него:


<script type="text/javascript">


level_2 = new level2('lev2', 'srvCPUload.middleLoad', 'MAJORDM', 2000, '%');
level_2.alertmin = 0;
level_2.alertmax = 50;
//level_2.background = 'rgba(200, 40, 40, 1)';
level_2.redraw();


</script>

и

<canvas id="lev2" width="80" height="30">Canvas not supported</canvas>

вставляем в любое место, где вы хотите видеть этот индикатор. :)

И это — всё!
За это сообщение автора Alex поблагодарил:
ser009 (Сб сен 06, 2014 7:08 am)
Рейтинг: 1.16%
arturmon
Сообщения: 155
Зарегистрирован: Сб июл 07, 2012 11:42 pm
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Интегральный индикатор загрузки

Сообщение arturmon » Чт мар 13, 2014 1:55 pm

как в лине load average: 0.00, 0.00, 0.00
средняя нагрузка на систему в последние 1, 5 и 15 минут.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Интегральный индикатор загрузки

Сообщение Alex » Чт мар 13, 2014 1:57 pm

как в лине load average: 0.00, 0.00, 0.00
средняя нагрузка на систему в последние 1, 5 и 15 минут.
Это хорошо или плохо? И о чём это?
arturmon
Сообщения: 155
Зарегистрирован: Сб июл 07, 2012 11:42 pm
Благодарил (а): 3 раза
Поблагодарили: 3 раза

Re: Интегральный индикатор загрузки

Сообщение arturmon » Чт мар 13, 2014 3:08 pm

это просто ассоциация ))) вырвалось просто, в лине просто так тоже реализовано. правильный подход просто, велосипед уже изобретен и его только надо под себя сделать.
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: Интегральный индикатор загрузки

Сообщение adzam » Сб мар 15, 2014 6:33 pm

$cpu = $json -> {'Children'}[0] -> {'Children'}[1];
$cpu_load = $cpu -> {'Children'}[2] -> {'Children'}[0] -> {'Value'};

Не совсем получается перестроить под себя, выложите пож. код вашего монитора данных, чтоб можно было сравнить , как берутся данные
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: Интегральный индикатор загрузки

Сообщение adzam » Сб мар 15, 2014 6:34 pm

или помогите мне пожалуйста, вот мой код:

{"id": 0, "Text": "Sensor", "Children":
[{"id": 1, "Text": "HOME-E78C34B9F1", "Children":
[{"id": 2, "Text": "MSI MS-7270", "Children":
[{"id": 3, "Text": "Winbond W83627EHF", "Children":
[{"id": 4, "Text": "Voltages", "Children":
[{"id": 5, "Text": "CPU VCore", "Children": [], "Min": "1,264 V", "Value": "1,280 V", "Max": "1,304 V", "ImageURL": "images/transparent.png"},
{"id": 6, "Text": "Voltage #2", "Children": [], "Min": "2,040 V", "Value": "2,040 V", "Max": "2,040 V", "ImageURL": "images/transparent.png"},
{"id": 7, "Text": "AVCC", "Children": [], "Min": "3,296 V", "Value": "3,296 V", "Max": "3,312 V", "ImageURL": "images/transparent.png"},
{"id": 8, "Text": "3VCC", "Children": [], "Min": "3,296 V", "Value": "3,296 V", "Max": "3,312 V", "ImageURL": "images/transparent.png"},
{"id": 9, "Text": "Voltage #5", "Children": [], "Min": "1,696 V", "Value": "1,696 V", "Max": "1,696 V", "ImageURL": "images/transparent.png"},
{"id": 10, "Text": "Voltage #6", "Children": [], "Min": "1,864 V", "Value": "1,872 V", "Max": "1,872 V", "ImageURL": "images/transparent.png"},
{"id": 11, "Text": "Voltage #7", "Children": [], "Min": "1,872 V", "Value": "1,872 V", "Max": "1,872 V", "ImageURL": "images/transparent.png"},
{"id": 12, "Text": "3VSB", "Children": [], "Min": "3,296 V", "Value": "3,312 V", "Max": "3,312 V", "ImageURL": "images/transparent.png"},
{"id": 13, "Text": "VBAT", "Children": [], "Min": "1,824 V", "Value": "1,824 V", "Max": "1,888 V", "ImageURL": "images/transparent.png"},
{"id": 14, "Text": "Voltage #10", "Children": [], "Min": "1,544 V", "Value": "1,552 V", "Max": "1,552 V", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/voltage.png"},
{"id": 15, "Text": "Temperatures", "Children":
[{"id": 16, "Text": "CPU", "Children": [], "Min": "39,0 ТАC", "Value": "39,5 ТАC", "Max": "39,5 ТАC", "ImageURL": "images/transparent.png"},
{"id": 17, "Text": "Auxiliary", "Children": [], "Min": "42,5 ТАC", "Value": "43,0 ТАC", "Max": "43,0 ТАC", "ImageURL": "images/transparent.png"},
{"id": 18, "Text": "System", "Children": [], "Min": "32,0 ТАC", "Value": "32,0 ТАC", "Max": "32,0 ТАC", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/temperature.png"},
{"id": 19, "Text": "Fans", "Children":
[{"id": 20, "Text": "CPU Fan #2", "Children": [], "Min": "2280 RPM", "Value": "2296 RPM", "Max": "2312 RPM", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/fan.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/chip.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/mainboard.png"},
{"id": 21, "Text": "AMD Athlon 64 Processor 3500+", "Children":
[{"id": 22, "Text": "Clocks", "Children":
[{"id": 23, "Text": "Bus Speed", "Children": [], "Min": "201 MHz", "Value": "201 MHz", "Max": "201 MHz", "ImageURL": "images/transparent.png"},
{"id": 24, "Text": "CPU Core", "Children": [], "Min": "2211 MHz", "Value": "2211 MHz", "Max": "2211 MHz", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/clock.png"},
{"id": 25, "Text": "Temperatures", "Children": [{"id": 26, "Text": "Core #1", "Children": [], "Min": "41,0 ТАC", "Value": "41,0 ТАC", "Max": "43,0 ТАC", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/temperature.png"},
{"id": 27, "Text": "Load", "Children":
[{"id": 28, "Text": "CPU Core", "Children": [], "Min": "100,0 %", "Value": "100,0 %", "Max": "100,0 %", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/load.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/cpu.png"},
{"id": 29, "Text": "Generic Memory", "Children":
[{"id": 30, "Text": "Load", "Children":
[{"id": 31, "Text": "Memory", "Children": [], "Min": "64,3 %", "Value": "64,3 %", "Max": "64,4 %", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/load.png"},
{"id": 32, "Text": "Data", "Children":
[{"id": 33, "Text": "Used Memory", "Children": [], "Min": "1,6 GB", "Value": "1,6 GB", "Max": "1,6 GB", "ImageURL": "images/transparent.png"},
{"id": 34, "Text": "Available Memory", "Children": [], "Min": "0,9 GB", "Value": "0,9 GB", "Max": "0,9 GB", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/power.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/ram.png"},
{"id": 35, "Text": "NVIDIA GeForce 6500", "Children":
[{"id": 36, "Text": "Clocks", "Children":
[{"id": 37, "Text": "GPU Core", "Children": [], "Min": "398 MHz", "Value": "398 MHz", "Max": "398 MHz", "ImageURL": "images/transparent.png"},
{"id": 38, "Text": "GPU Memory", "Children": [], "Min": "266 MHz", "Value": "266 MHz", "Max": "266 MHz", "ImageURL": "images/transparent.png"},
{"id": 39, "Text": "GPU Shader", "Children": [], "Min": "0 MHz", "Value": "0 MHz", "Max": "0 MHz", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/clock.png"},
{"id": 40, "Text": "Temperatures", "Children":
[{"id": 41, "Text": "GPU Core", "Children": [], "Min": "44,0 ТАC", "Value": "44,0 ТАC", "Max": "44,0 ТАC", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/temperature.png"},
{"id": 42, "Text": "Load", "Children":
[{"id": 43, "Text": "GPU Core", "Children": [], "Min": "0,0 %", "Value": "0,0 %", "Max": "0,0 %", "ImageURL": "images/transparent.png"},
{"id": 44, "Text": "GPU Memory Controller", "Children": [], "Min": "0,0 %", "Value": "0,0 %", "Max": "0,0 %", "ImageURL": "images/transparent.png"},
{"id": 45, "Text": "GPU Video Engine", "Children": [], "Min": "0,0 %", "Value": "0,0 %", "Max": "0,0 %", "ImageURL": "images/transparent.png"},
{"id": 46, "Text": "GPU Memory", "Children": [], "Min": "12,2 %", "Value": "12,2 %", "Max": "12,2 %", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/load.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/nvidia.png"},
{"id": 47, "Text": "HDS728080PLA380", "Children":
[{"id": 48, "Text": "Temperatures", "Children":
[{"id": 49, "Text": "Temperature", "Children": [], "Min": "38,0 ТАC", "Value": "38,0 ТАC", "Max": "38,0 ТАC", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/temperature.png"},
{"id": 50, "Text": "Load", "Children":
[{"id": 51, "Text": "Used Space", "Children": [], "Min": "33,6 %", "Value": "33,6 %", "Max": "33,6 %", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/load.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/hdd.png"},
{"id": 52, "Text": "HDS728080PLA380", "Children":
[{"id": 53, "Text": "Temperatures", "Children":
[{"id": 54, "Text": "Temperature", "Children": [], "Min": "38,0 ТАC", "Value": "38,0 ТАC", "Max": "38,0 ТАC", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/temperature.png"},
{"id": 55, "Text": "Load", "Children":
[{"id": 56, "Text": "Used Space", "Children": [], "Min": "19,3 %", "Value": "19,3 %", "Max": "19,3 %", "ImageURL": "images/transparent.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/load.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/hdd.png"}], "Min": "", "Value": "", "Max": "", "ImageURL": "images_icon/computer.png"}], "Min": "Min", "Value": "Value", "Max": "Max", "ImageURL": ""}
За это сообщение автора adzam поблагодарил:
Otto (Пн апр 25, 2016 6:05 pm)
Рейтинг: 1.16%
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Интегральный индикатор загрузки

Сообщение Alex » Сб мар 15, 2014 6:49 pm

> выложите пож. код вашего монитора данных, чтоб можно было сравнить , как берутся данные

Напомните, где и как взять этот код? Давно это было...
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: Интегральный индикатор загрузки

Сообщение adzam » Сб мар 15, 2014 7:16 pm

Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Интегральный индикатор загрузки

Сообщение Alex » Сб мар 15, 2014 8:18 pm

Где то была ветка подробным обсуждением по ohm и json. Поищите на форуме.

Файл прилагаю.
Вложения
json.zip
(1.15 КБ) 272 скачивания
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: Интегральный индикатор загрузки

Сообщение adzam » Сб мар 15, 2014 9:25 pm

если можно то пришлите пож. полный код вашего скрипта типа ohm_server_cpu_load а то я сегодня целый день бился над вытаскиванием данных для шапки и не продвинулся ни на шаг вперед
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Ответить