В связи с производственной необходимостью мониторинга температурных состояний объектов и устройств был разработан данный комплексный экран.
Координально переработан дизайн.
Цветами выделены состояния, критический, предупреждение и т.д. Также прикручена аналитика температурного тренда(повышается понижается)
Данные берутся через Zabbix API.
Событие: Crate
/// @description Инициализация API
globalvar auth_api; //API ключ авторизации работы на серваке ZABBIX
globalvar request_host_get;
globalvar request_hostgroup_get;
globalvar request_screen_get;
globalvar request_screenitem_get;
globalvar request_item_get;
//--------------------------------------------------
globalvar ids_mux1,ids_mux2,ids_sdk1,ids_sdk2;
globalvar string_all_hosts; //список хост айди через запятую
globalvar hosts_value; //значения температур, ключ = это хост
ids_mux1 = ds_map_create(); // карта айдишек с ключом имени населенного пункта
ids_mux2 = ds_map_create();
ids_sdk1 = ds_map_create();
ids_sdk2 = ds_map_create();
hosts_value = ds_map_create(); //значения актуальных температур
load_ids_list(ids_mux1 , ids_mux2 , ids_sdk1 , ids_sdk2);
//--------------------------------------------------
string_all_hosts = get_all_id(ids_mux1) + "," + get_all_id(ids_mux2) + ","+ get_all_id(ids_sdk1);
//------------------------------------------
auth_api = 0;
request_host_get=-1;
request_hostgroup_get=-1;
request_screen_get=-1;
request_screenitem_get=-1;
request_item_get=-1;
//если работаем на чужом компе
timer_tick_download = 60; //пять секунд
alarm[2]=room_speed;//*timer_tick_download;
demo = false;
t_min_warning = 0;// 5;
t_min_critical = 0;//0;
t_max_warning = 0;//55;
t_maxk_warning = 0;//45;
t_max_critical = 0;//65;
t_maxk_critical = 0;//50;
//--------------------------------------------------
Событие: Alarm0
/// @description отправка Заббикс запроса на получение температур
//Site: MidaDev.ru
//Author: Dimusikus
//EMail: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.
//zapi_item_get(auth_api, string_all_hosts, "Температура");
//ещебы хосты разделить на мультовые и СДКашные
//zapi_item_get(auth_api, string_all_hosts, "^60.value^, ^61.value^, ^62.value^");
//zapi_item_get(auth_api, string_all_hosts, "^255.value^");
zapi_item_get(auth_api, string_all_hosts, "^60.value^, ^61.value^, ^62.value^, ^255.value^");
Событие: HTTP Async
/// @description Асинхра
if(ds_map_find_value(async_load, "status") == 0) //если получено успешное значение
{
//----------------------------------
if (ds_map_find_value(async_load, "id") == request_autorization) //если получен ответ с сайта и он является ответом
{
var r_str = ds_map_find_value(async_load, "result"); //получаем
//show_debug_message("otvet = " + r_str);
var text = json_decode(r_str);
var result = ds_map_find_value(text, "result");
if result == undefined then
{
show_message("Ошибка авторизации в системе ZABBIX");
}
else
{
trace("Авторизаци в ZABBIX прошла успешно");
auth_api = result;
alarm[0]=room_speed;
}
};
//----------------------------------
if (ds_map_find_value(async_load, "id") == request_host_get) //если получен ответ с сайта и он является ответом
{ };
//----------------------------------
if (ds_map_find_value(async_load, "id") == request_screen_get) //если получен ответ с сайта и он является ответом
{ };
//----------------------------------
if (ds_map_find_value(async_load, "id") == request_screenitem_get) //если получен ответ с сайта и он является ответом
{ };
//----------------------------------
if (ds_map_find_value(async_load, "id") == request_item_get) //если получен ответ с сайта и он является ответом
{
var r_str = ds_map_find_value(async_load, "result"); //получаем данные
var _jmap = json_decode(r_str); //получаем объект ds_map
//trace_ds_map(_jmap);
var _jlist = ds_map_find_value(_jmap, "result");//получаем объект ds_list
//trace_ds_list(_jlist);
ds_map_clear(hosts_value); //очищаем предыдущие данные
//пробегаемся по всему списку мэпов и заполняем структуру hosts_value температурами
for(var i = 0; i<ds_list_size(_jlist);i++)
{
//trace(ds_list_find_value(argument0,i));
var _ma = ds_list_find_value(_jlist,i);
var _lastvalue = _ma[? "lastvalue"];
var _hostid = _ma[? "hostid"];
var _key = _ma[? "key_"];
_lastvalue = string_replace(_lastvalue,".000000","");
_lastvalue = string_replace(_lastvalue,"00000","");
_lastvalue = string_replace(_lastvalue,"0000","");
_lastvalue = string_replace(_lastvalue,"000","");
_lastvalue = string_replace(_lastvalue,"00","");
_lastvalue = real(_lastvalue);
//------------------------------------------
var _t = ds_map_find_value(hosts_value, _hostid);
//если значение ещё не существует, до создаём его
if is_undefined(_t) then //ds_map_find_value(hosts_value, _hostid))
{
//заполняем hosts_value значениями температур
ds_map_set(hosts_value, _hostid, _lastvalue);
}
else
{ //заполняем hosts_value значениями температур
//значение уже есть, знач выбираем то что больше
//if _lastvalue > _t and _t==0 then
if _lastvalue !=0 then
{
//if string_pos("60.value", _key) then
ds_map_set(hosts_value, _hostid, real(_lastvalue));
}
//if _lastvalue < _t and _t!=0 then ds_map_set(hosts_value, _hostid, real(_lastvalue));
}
//------------------------------------------
//trace_ds_map(_ma,"_ma[" + string(i) + "]" );
//trace("\n");
ds_map_destroy(_ma);
}
ds_list_destroy(_jlist);
trace_ds_map(hosts_value,"hosts_value");
//save_hosts_value_map(hosts_value);
//trace_ds_map(_map,"_map");
alarm[0]=room_speed*1*timer_tick_download; //коли данные получили можно запускать таймер автозагрузки данных
trace("current_minute = ", current_minute , "\n");
trace("-----------------------");
with (Temper_display) update=true;
//with (o_temp_button) update=true;
trace("SEND MESSAGE update temper");
return;
};
//----------------------------------
if (ds_map_find_value(async_load, "id") == request_hostgroup_get) //если получен ответ с сайта и он является ответом
{
r_str = ds_map_find_value(async_load, "result"); //получаем скачанную HTML страницу
show_debug_message("request_hostgroup_get = " + r_str);
}
//----------------------------------
}
zapi_item_get:
///@description
function zapi_item_get(argument0, argument1, argument2) {
//http://10.100.0.9/items.php?form=update&hostid=10423&itemid=79356&sid=323ef11715a4b37b
//"search": { "key_": "system" }
//"sortfield": "name"
//^itemids^: ^79356^
//^hostids^: [^10423^,^10324^],
//^groupids^: [^353^,^135^],
//[^host^,^hostid^,^name^,^lastvalue^],
//^key_^: ^62.value^
//Выходная мощность (Вт)
//Температура
//#define
var _arg0 = argument0;
var _arg1 = argument1;
var _arg2 = argument2;
var map = ds_map_create();
ds_map_add(map, "Content-Type", "application/json-rpc");
var data = json_correct("{"+
" ^jsonrpc^: ^2.0^,"+
" ^method^: ^item.get^,"+
" ^params^: "+
" {"+
" ^output^: [^lastvalue^,^name^,^key_^],"+
" ^hostids^: ["+argument1+"],"+
/*" ^search^: "+
" {"+
" ^name^: [^" + argument2 + "^]"+
" }"+*/
" ^filter^: {^key_^: [^60.value^, ^62.value^, ^255.value^]}"+
/*" ^filter^: {^key_^: [" + argument2 + "]"+*/
" },"+
" ^auth^: ^authcode^,"+
" ^id^: 1"+
"}");
data = string_replace(data,"authcode", argument0);
show_debug_message("request_item_get = " + data);
//отправляем запрос на авторизацию на сервере ZABBIX
request_item_get = http_request("http://10.100.0.9/api_jsonrpc.php", "POST", map, data);
ds_map_destroy(map);
}
zabbix_auth:
function zabbix_auth(argument0, argument1)
{
var map = ds_map_create();
ds_map_add(map, "Content-Type", "application/json-rpc");
var data = json_correct("{ ^jsonrpc^: ^2.0^, ^method^: ^user.authenticate^, ^params^: { ^user^: ^" + argument0 + "^, ^password^: ^" + argument1 + "^}, ^auth^: null, ^id^: 0}");
//отправляем запрос на авторизацию на сервере ZABBIX
request_autorization = http_request("http://10.100.0.9/api_jsonrpc.php", "POST", map, data);
}