Температурная карта объектов ver2

Реинкарнация первой версии.

В связи с производственной необходимостью мониторинга температурных состояний объектов и устройств был разработан данный комплексный экран.

Координально переработан дизайн.



Цветами выделены состояния, критический, предупреждение и т.д. Также прикручена аналитика температурного тренда(повышается понижается)

Данные берутся через 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);

}