Небольшая предыстория: пользователи жалуются на тормоза 1с - сделаю изменения, проверю своим скриптом время до и после, а пользователи все жалуются и жалуются...
В итоге сделал следующий комплекс:
- Компонента которая используется в 1с для "экранирования" замеряемых участков кода
- SQL таблица, в которую отправляются полученные замеры всеми пользователями
- Служба, которая получает данные из таблицы и отправляет в zabbix. (до версии 1.0.1.0 отправлялись усредненные значения)
Что делать в 1с:
Создать константу ZabbixСтатистикаВыполнения
в глобальном модуле описать
Перем глСтатистикаВыполнения Экспорт; //:Addin.ZabbixStatistics
Перем глОтправлятьСтатистикуВыполнения Экспорт;
в глобальном модуле в процедуре ПриНачалеРаботыСистемы()
глОтправлятьСтатистикуВыполнения=0;
Если Константа.ZabbixСтатистикаВыполнения=1 Тогда
Попытка
глСтатистикаВыполнения = СоздатьОбъект("Addin.ZabbixStatistics");
глСтатистикаВыполнения.НазваниеБазы = ТекущаяИбКод();
глСтатистикаВыполнения.Инициализация();
глОтправлятьСтатистикуВыполнения=1;
Исключение
КонецПопытки;
КонецЕсли;
Также в глобальном модуле добавить процедуры
//-->> Статистика выполнения кода
Процедура глСтатистикаВыполнения_Начать(Параметр,ЗначениеПриОшибке=-1) Экспорт
Если глОтправлятьСтатистикуВыполнения=1 Тогда
глСтатистикаВыполнения.Начать(Параметр,ЗначениеПриОшибке);
КонецЕсли;
КонецПроцедуры
Процедура глСтатистикаВыполнения_Отменить() Экспорт
Если глОтправлятьСтатистикуВыполнения=1 Тогда
глСтатистикаВыполнения.Отменить();
КонецЕсли;
КонецПроцедуры
Процедура глСтатистикаВыполнения_Закончить() Экспорт
Если глОтправлятьСтатистикуВыполнения=1 Тогда
глСтатистикаВыполнения.Закончить();
КонецЕсли;
КонецПроцедуры
//<<--
Теперь в требуемом месте "экранировать" замеряемый участок
глСтатистикаВыполнения_Начать("Documents.Provedenie.RN",-1000);
//ВАШ КОД
//
//глСтатистикаВыполнения_Отменить(); Возврат; //Или иной выход из замеряемого участка кода
//
//ВАШ КОД
глСтатистикаВыполнения_Закончить();
Инструкция установка компоненты, службы, zabbix есть в описании на github, а также в скачиваемом архиве
Исходный код gihub
02.02.2019 Версия 1.0.1.0
- При начале нового замера проверяется завершенность предыдущего.
- Добавлен метод Отменить(), который требуется выполнять при выходе из замера принудительно (Прервать, возврат, и т.д.), чтобы он не считался некорректно завершенным
- Служба теперь отправляет все значения(а не усредняет).