Каталог решений - SNMP TrapV2/REST API To WebSocket прокси сервис для 1С Предприятие.

SNMP TrapV2/REST API To WebSocket прокси сервис для 1С Предприятие.

SNMP TrapV2/REST API To WebSocket прокси сервис для 1С Предприятие.

В наличии

SNMP TrapV2/REST API To WebSocket позволяет получать оповещения SNMP Trap2 (заглушки) и запросы REST API на клиента Web Socket (1С:Предприятие).

Категория:

Описание

 

  SNMP TrapV2/REST API To WebSocket это прокси сервис (SNMPTrap_REST_To_WS), позволяющий перенаправлять оповещения SNMP Trap2 (заглушки) и запросы REST API на клиента Web Socket.

    SNMP Trap – обычно это push оповещения о критических событиях от сетевых и других устройств и различного вида датчиков по протоколу SNMP.

    В данном случае клиентом Web Socket может выступать 1С:Предприятие 8.3.27. Web Socket клиент поддерживается как на клиентской стороне, так и на серверной стороне 1С.

    Использование SNMPTrap_REST_To_WS позволяет 1С принимать данные SNMP TrapV2, так и запросы REST API. Это также удобно в случае, если по каким-то причинам не используется веб-публикация базы 1С и нет возможности использовать публикацию HTTP-сервиса.

    На основе SNMPTrap_REST_To_WS и 1С можно создать «Агрегатор событий и сервис оповещения». По SNMP можно собирать данные о критичных событиях от устройств (превышение температуры выше нормы в серверной), по REST API собирать данные (необработанные исключения в базах 1С ОбработкаОтображенияОшибки () ) и события других приложений, логи журнала событий операционной системы (скрипт PowerShell в Планировщике заданий).

    В связке SNMPTrap_REST_To_WS и 1С можно реализовать онлайн-систему мониторинга за критичными событиями с оповещением в реальном времени на экране монитора и на мобильные устройства пользователей (по каким событиям кому и в каком виде отправлять оповещение), аналитические отчеты.

На стороне 1С:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОбработчикиСокета = Новый ОбработчикиWebSocketКлиентСоединения;
	ОбработчикиСокета.Модуль = ЭтотОбъект;
	ОбработчикиСокета.ОбработчикОткрытияСоединения = "ВебСокет_ОбработчикОткрытия";
	ОбработчикиСокета.ОбработчикЗакрытияСоединения= "ВебСокет_ОбработчикЗакрытия";
	ОбработчикиСокета.ОбработчикПолученияСообщения = "ВебСокет_ОбработчикПолученияСообщения";
	ОбработчикиСокета.ОбработчикОшибки = "ВебСокет_ОбработчикОшибки";
	
	WebSocketКлиентСоединения.ОткрытьСоединение("ws_localhost_3001", "ws://localhost:3001", ОбработчикиСокета,,"Администратор");
	
КонецПроцедуры

&НаКлиенте
Процедура ВебСокет_ОбработчикОткрытия(Соединение) Экспорт 
	
	СтруктураСоединение = ПараметрыСоединения(Соединение);   
	
	
КонецПроцедуры  

&НаКлиенте
Процедура ВебСокет_ОбработчикПолученияСообщения(Соединение, Сообщение) Экспорт
	
	НоваяСтрока = Общение.Добавить();
	НоваяСтрока.ТекстСообщения = Сообщение;
	
КонецПроцедуры 


&НаКлиенте
Процедура ВебСокет_ОбработчикЗакрытия(Соединение, КодЗакрытия) Экспорт
	
	
	ВидимостьДоступностьЭлементов(Ложь);
	
КонецПроцедуры  

&НаКлиенте
Процедура Зарегистрироваться(Команда)
	
	
	ВебСокет = WebSocketКлиентСоединения.ПолучитьСоединение("ws_localhost_3001");
	
	СтруктураРегистрации = Новый Структура("type,id","register",ИмяКлиента);
	ТекстСообщения = ЗаписатьДанныеВJSON(,СтруктураРегистрации).Результат;
	
	СостояниеСоединения = ВебСокет.ПолучитьСостояние();
	СостояниеОткрыто = (СостояниеСоединения = СостояниеWebSocketСоединения.Открыто);	
	
	Если СостояниеОткрыто Тогда 
		// отправка данных в WebSocket
		ВебСокет.ОтправитьСообщение(ТекстСообщения);
	КонецЕсли;
	
	ПараметрыЗаписи = Новый Структура;	
	ПараметрыЗаписи.Вставить("Сообщение", ТекстСообщения);  
	//
	
	ВидимостьДоступностьЭлементов(СостояниеОткрыто);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьСообщение(Команда)
	
	ВебСокет = WebSocketКлиентСоединения.ПолучитьСоединение("ws_localhost_3001");
	
	СтруктураСообщения = Новый Структура("type,from,to,message","message",ИмяКлиента,ИмяПолучателя,ТекстОтправки);
	ТекстСообщения = ЗаписатьДанныеВJSON(,СтруктураСообщения).Результат;	
	
	СостояниеСоединения = ВебСокет.ПолучитьСостояние();
	СостояниеОткрыто = (СостояниеСоединения = СостояниеWebSocketСоединения.Открыто); 
	
	Если СостояниеОткрыто Тогда 
		// отправка данных в WebSocket
		ВебСокет.ОтправитьСообщение(ТекстСообщения);   
		
		НоваяСтрока = Общение.Добавить();
		НоваяСтрока.ТекстСообщения = ?(ПустаяСтрока(ИмяПолучателя),"you U94; all: ", "you U94; "+ИмяПолучателя+": ") + ТекстОтправки;
		
	КонецЕсли;
	
	ПараметрыЗаписи = Новый Структура;	
	ПараметрыЗаписи.Вставить("Сообщение", ТекстСообщения);  
	
	ВидимостьДоступностьЭлементов(СостояниеОткрыто);
	
КонецПроцедуры 

Процедура ВидимостьДоступностьЭлементов(СостояниеОткрыто)
	Элементы.Группа1.Видимость = Не СостояниеОткрыто;
	Элементы.ИмяПолучателя.Видимость = СостояниеОткрыто;
	Элементы.ТекстОтправки.Видимость = СостояниеОткрыто;
	Элементы.ОтправитьСообщение.Видимость = СостояниеОткрыто;
	Элементы.Общение.Видимость = СостояниеОткрыто;
КонецПроцедуры	
///////////////////////////////////

&НаКлиенте
Функция ПараметрыСоединения(Соединение) Экспорт 
	
	СтруктураСоединение = Новый Структура;
	СтруктураСоединение.Вставить("URLСервера", Соединение.URLСервера);
	СтруктураСоединение.Вставить("ИмяПользователяИнформационнойБазы", Соединение.ИмяПользователяИнформационнойБазы);  
	
	СтруктураСоединение.Вставить("ОбработчикЗакрытияСоединения", Соединение.Обработчики.ОбработчикЗакрытияСоединения); 
	СтруктураСоединение.Вставить("ОбработчикОткрытияСоединения", Соединение.Обработчики.ОбработчикОткрытияСоединения); 
	СтруктураСоединение.Вставить("ОбработчикОшибки", Соединение.Обработчики.ОбработчикОшибки); 
	СтруктураСоединение.Вставить("ОбработчикПолученияСообщения", Соединение.Обработчики.ОбработчикПолученияСообщения); 
	СтруктураСоединение.Вставить("Заголовки", Соединение.Параметры.Заголовки);
	
	Возврат СтруктураСоединение; 
	
КонецФункции 

&НаКлиенте 
Функция ПараметрыКлиента(Клиент) Экспорт 
	
	СтруктураКлиент = Новый Структура;
	СтруктураКлиент.Вставить("URLСервера", Клиент.URLСервера);
	СтруктураКлиент.Вставить("ИмяПользователяИнформационнойБазы", Клиент.ИмяПользователяИнформационнойБазы);
	СтруктураКлиент.Вставить("Заголовки", Клиент.ПараметрыСоединения.Заголовки);
	СтруктураКлиент.Вставить("МетаданныеИмя", Клиент.Метаданные.Имя);
	
	СтруктураКлиент.Вставить("МетаданныеURLСервера", Клиент.Метаданные.URLСервера);
	
	Возврат СтруктураКлиент; 
	
КонецФункции


#Область СериализацияДесериализацияДанных 

// Возвращает чаще всего используемые ПараметрыЗаписиJSON (JSONWriterSettings)
// 
// Возвращаемое значение:
//  Результат - Структура - Стандартное заполнение
// 
&НаСервере
Функция СтандартныеПараметрыJSON() Экспорт
	
	Результат = Новый Структура;
	Результат.Вставить("ПереносСтрок",					ПереносСтрокJSON.Авто);
	Результат.Вставить("СимволОтступа",					" ");
	Результат.Вставить("ИспользоватьДвойныеКавычки",	Истина);
	Результат.Вставить("ЭкранированиеСимволов",			ЭкранированиеСимволовJSON.Нет);
	Результат.Вставить("ЭкранироватьАмперсанд",			Ложь);
	Результат.Вставить("ЭкранироватьОдинарныеКавычки",	Ложь);
	Результат.Вставить("ЭкранироватьРазделителиСтрок",	Ложь);
	Результат.Вставить("ЭкранироватьУгловыеСкобки",		Ложь);
	Результат.Вставить("ЭкранироватьСлеш",				Ложь);	
	
	Возврат Результат;		
	
КонецФункции

// Преобразует данные в формат JSON
//
// Параметры:
//  ВходящиеПараметры	 - Структура - Параметры формирование JSON
//  ВходныеДанные		 - ЛюбоеЗначение - Данные которые нужно перевести в JSON
// 
// Возвращаемое значение:
//  Результат - Структура
//  	Отработал - Булево - Выполнено или нет
//  	ТекстОшибки - Строка - Текст ошибки если функция отработала с ошибкой
//  	Результат - Строка - JSON
//
&НаСервере
Функция ЗаписатьДанныеВJSON(Знач ВходящиеПараметры = Неопределено, Знач ВходныеДанные = "") Экспорт
	
	Результат = Новый Структура("Результат, Отработал, ТекстОшибки", "", Истина, "");
	
	Если ВходящиеПараметры = Неопределено Тогда 
		ВходящиеПараметры = СтандартныеПараметрыJSON(); 	
	КонецЕсли;	
	
	ПараметрыJSON	= Новый ПараметрыЗаписиJSON(ВходящиеПараметры.ПереносСтрок,
	ВходящиеПараметры.СимволОтступа,
	ВходящиеПараметры.ИспользоватьДвойныеКавычки,
	ВходящиеПараметры.ЭкранированиеСимволов,
	ВходящиеПараметры.ЭкранироватьУгловыеСкобки,
	ВходящиеПараметры.ЭкранироватьРазделителиСтрок,
	ВходящиеПараметры.ЭкранироватьАмперсанд,
	ВходящиеПараметры.ЭкранироватьОдинарныеКавычки,
	ВходящиеПараметры.ЭкранироватьСлеш);
	
	
	Попытка
		ЗаписьJSON						= Новый ЗаписьJSON;
		ЗаписьJSON.ПроверятьСтруктуру 	= Истина;
		ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);	
		ЗаписатьJSON(ЗаписьJSON, ВходныеДанные,,"ФункцияПреобразованияЗаписи",ЭтотОбъект);
		Результат.Вставить("Результат",	ЗаписьJSON.Закрыть());
	Исключение
		Результат.Отработал 			= Ложь;
		Результат.ТекстОшибки 			= ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
	КонецПопытки;
	
	Возврат Результат;
	
КонецФункции	

&НаСервере
Функция ФункцияПреобразованияЗаписи(Свойство, Значение, ДополнительныеПараметры, Отказ) Экспорт
	Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда  
		МассивЗначений = Значение.ВыгрузитьЗначения();
		Значение = МассивЗначений;
	КонецЕсли;	
КонецФункции

#КонецОбласти

код 1С взят из обработки: //infostart.ru/1c/articles/2293957/

    Публикация сопровождается файлом для загрузки:

— скрипт Python сервис SNMPTrap_REST_To_WS

Тестирование: Postman, SnmpTrapGen (https://ezfive.com/snmpsoft-tools/snmp-trap-gen).

Примечание:

SNMPTrap_REST_To_WS – это демонстрация возможностей использования WebSocket в 1С в целях интеграции. Для рабочей схемы необходимо доработать вопросы: безопасности и производительности.

 

has been added to your cart:
Оформление заказа