From f402840eda5be64a39ca0a82816ba9034f27317f Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Thu, 27 Jan 2022 23:15:16 +0300 Subject: [PATCH 01/17] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D1=85=D1=80=D0=B0=D0=BD=D0=B8=D0=BB=D0=B8?= =?UTF-8?q?=D1=89=D0=B5=20=D0=BD=D0=B0=20entity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/.help | 0 ...00\320\260\321\206\320\270\320\270Jira.os" | 364 +++++++++--------- ...20\270\320\273\320\270\321\211\320\265.os" | 196 +--------- ...20\260\320\275\320\275\321\213\321\205.os" | 66 ++++ ...21\210\320\270\320\261\320\272\320\265.os" | 15 + ...21\210\320\270\320\261\320\272\320\265.os" | 48 +++ src/model/lib.config | 2 + ...21\210\320\270\320\261\320\272\320\265.os" | 9 +- ...21\202\321\200\320\276\320\265\320\272.os" | 18 +- ...21\210\320\270\320\261\320\276\320\272.os" | 255 ++++++++++++ ...20\270\320\261\320\272\320\260\321\205.os" | 5 + src/packagedef | 1 + src/views/errorReports/Index.cshtml | 2 - 13 files changed, 618 insertions(+), 363 deletions(-) create mode 100644 src/.help create mode 100644 "src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" create mode 100644 "src/model/entities/\320\224\320\260\320\275\320\275\321\213\320\265\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" create mode 100644 "src/model/entities/\320\227\320\260\320\277\321\200\320\276\321\201\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" create mode 100644 "src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" diff --git a/src/.help b/src/.help new file mode 100644 index 0000000..e69de29 diff --git "a/src/model/classes/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270Jira.os" "b/src/model/classes/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270Jira.os" index 6248573..3c9fb4d 100644 --- "a/src/model/classes/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270Jira.os" +++ "b/src/model/classes/\320\237\321\200\320\276\320\262\320\260\320\271\320\264\320\265\321\200\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270Jira.os" @@ -1,176 +1,188 @@ -#Использовать 1connector - -// URL инстанса Jira -Перем URL; - -// Логин Jira -Перем Логин; - -// Токен пользователя Jira (см. https://id.atlassian.com/manage-profile/security/api-tokens) -Перем Токен; - -// Ключ проекта Jira -Перем КлючПроекта; - -// Идентификатор типа задачи -Перем ИдТипаЗадачи; - -// Поле Summary задачи Jira -Перем ТемаЗадачи; - -Процедура ПриСозданииОбъекта() - -КонецПроцедуры - -Функция URL(вхURL) Экспорт - - URL = вхURL; - - Возврат ЭтотОбъект; - -КонецФункции - -Функция Логин(вхЛогин) Экспорт - - Логин = вхЛогин; - - Возврат ЭтотОбъект; - -КонецФункции - -Функция Токен(вхТокен) Экспорт - - Токен = вхТокен; - - Возврат ЭтотОбъект; - -КонецФункции - -Функция КлючПроекта(вхКлючПроекта) Экспорт - - КлючПроекта = вхКлючПроекта; - - Возврат ЭтотОбъект; - -КонецФункции - -Функция ИдТипаЗадачи(вхИдТипаЗадачи) Экспорт - - ИдТипаЗадачи = вхИдТипаЗадачи; - - Возврат ЭтотОбъект; - -КонецФункции - -Функция ТемаЗадачи(вхТемаЗадачи) Экспорт - - ТемаЗадачи = вхТемаЗадачи; - - Возврат ЭтотОбъект; - -КонецФункции - -Функция ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт - - URLIssues = СтрШаблон("%1/issue", URL); - - ТелоЗапроса = СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); - - Заголовки = Новый Соответствие; - Заголовки.Вставить("Content-Type", "application/json"); - - Аутентификация = Новый Структура(); - Аутентификация.Вставить("Пользователь", Логин); - Аутентификация.Вставить("Пароль", Токен); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Заголовки", Заголовки); - ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация); - - РезультатЗапроса = КоннекторHTTP.Post(URLIssues, ТелоЗапроса, , ДополнительныеПараметры); - - Если РезультатЗапроса.КодСостояния <> 201 Тогда - ВызватьИсключение("Не удалось зарегистрировать ошибку в Jira"); // TODO: внятно обработать ошибку - КонецЕсли; - - РезультатЗапросаJSON = РезультатЗапроса.JSON(); - - СсылкаНаОшибку = РезультатЗапросаJSON["self"]; - URLAttachments = СтрШаблон("%1/attachments", СсылкаНаОшибку); - Для Каждого ПутьКПрикрепляемомуФайлу Из ДанныеОтчетаОбОшибке.Файлы Цикл - - ПрикрепляемыйФайл = Новый Файл(ПутьКПрикрепляемомуФайлу); - Если Не ПрикрепляемыйФайл.Существует() Тогда - Продолжить; - КонецЕсли; - - ПрикрепитьФайлКЗадаче(URLAttachments, ПрикрепляемыйФайл); - - КонецЦикла; - - Если ЗначениеЗаполнено(ДанныеОтчетаОбОшибке.Скриншот) Тогда - - ПрикрепляемыйФайл = Новый Файл(ДанныеОтчетаОбОшибке.Скриншот); - Если ПрикрепляемыйФайл.Существует() Тогда - ПрикрепитьФайлКЗадаче(URLAttachments, ПрикрепляемыйФайл); - КонецЕсли; - - КонецЕсли; - - РезультатЗапросаJSON = РезультатЗапроса.JSON(); - ИдЗадачиВТрекере = РезультатЗапросаJSON["key"]; - - Возврат ИдЗадачиВТрекере; - -КонецФункции - -Процедура ПрикрепитьФайлКЗадаче(URL, ПрикрепляемыйФайл) - - Аутентификация = Новый Структура(); - Аутентификация.Вставить("Пользователь", Логин); - Аутентификация.Вставить("Пароль", Токен); - - Заголовки = Новый Соответствие; - Заголовки.Вставить("X-Atlassian-Token", "no-check"); - - Файлы = Новый Структура; - Файлы.Вставить("Имя", "file"); - Файлы.Вставить("ИмяФайла", ПрикрепляемыйФайл.Имя); - Файлы.Вставить("Данные", Новый ДвоичныеДанные(ПрикрепляемыйФайл.ПолноеИмя)); - Если ПрикрепляемыйФайл.Расширение = ".png" Тогда - Файлы.Вставить("Тип", "image/png"); - Иначе - Файлы.Вставить("Тип", "application/octet-stream"); - КонецЕсли; - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация); - ДополнительныеПараметры.Вставить("Заголовки", Заголовки); - ДополнительныеПараметры.Вставить("Файлы", Файлы); - - РезультатЗапроса = КоннекторHTTP.Post(URL, Неопределено, Неопределено, ДополнительныеПараметры); - Если РезультатЗапроса.КодСостояния <> 200 Тогда - Сообщить("Не удалось прикрепить файл"); - КонецЕсли; - -КонецПроцедуры - -Функция СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке) Экспорт - - Issue = Новый Структура; - Issue.Вставить("project", Новый Структура("key", КлючПроекта)); - Issue.Вставить("issuetype", Новый Структура("id", ИдТипаЗадачи)); - Issue.Вставить("summary", ТемаЗадачи); - - Описание = ОтчетыОбОшибках.СформироватьОписаниеОшибки(ДанныеОтчетаОбОшибке); - Issue.Вставить("description", Описание); - - ТелоЗапросаJSON = Новый Структура; - ТелоЗапросаJSON.Вставить("fields", Issue); - - ПарсерJSON = Новый ПарсерJSON(); - ТелоЗапроса = ПарсерJSON.ЗаписатьJSON(ТелоЗапросаJSON); - - Возврат ТелоЗапроса; - -КонецФункции +#Использовать 1connector + +// URL инстанса Jira +Перем URL; + +// Логин Jira +Перем Логин; + +// Токен пользователя Jira (см. https://id.atlassian.com/manage-profile/security/api-tokens) +Перем Токен; + +// Ключ проекта Jira +Перем КлючПроекта; + +// Идентификатор типа задачи +Перем ИдТипаЗадачи; + +// Поле Summary задачи Jira +Перем ТемаЗадачи; + +// Срок исполнения задачи Jira в днях +Перем СрокИсполнения; + +Процедура ПриСозданииОбъекта() + +КонецПроцедуры + +Функция URL(вхURL) Экспорт + + URL = вхURL; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция Логин(вхЛогин) Экспорт + + Логин = вхЛогин; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция Токен(вхТокен) Экспорт + + Токен = вхТокен; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция КлючПроекта(вхКлючПроекта) Экспорт + + КлючПроекта = вхКлючПроекта; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция ИдТипаЗадачи(вхИдТипаЗадачи) Экспорт + + ИдТипаЗадачи = вхИдТипаЗадачи; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция ТемаЗадачи(вхТемаЗадачи) Экспорт + + ТемаЗадачи = вхТемаЗадачи; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция СрокИсполнения (вхСрокИсполнения) Экспорт + + СрокИсполнения = вхСрокИсполнения; + + Возврат ЭтотОбъект; + +КонецФункции + +Функция ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт + + URLIssues = СтрШаблон("%1/issue", URL); + + ТелоЗапроса = СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); + + Заголовки = Новый Соответствие; + Заголовки.Вставить("Content-Type", "application/json"); + + Аутентификация = Новый Структура(); + Аутентификация.Вставить("Пользователь", Логин); + Аутентификация.Вставить("Пароль", Токен); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Заголовки", Заголовки); + ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация); + + РезультатЗапроса = КоннекторHTTP.Post(URLIssues, ТелоЗапроса, , ДополнительныеПараметры); + + Если РезультатЗапроса.КодСостояния <> 201 Тогда + ВызватьИсключение("Не удалось зарегистрировать ошибку в Jira"); // TODO: внятно обработать ошибку + КонецЕсли; + + РезультатЗапросаJSON = РезультатЗапроса.JSON(); + + СсылкаНаОшибку = РезультатЗапросаJSON["self"]; + URLAttachments = СтрШаблон("%1/attachments", СсылкаНаОшибку); + Для Каждого ПутьКПрикрепляемомуФайлу Из ДанныеОтчетаОбОшибке.Файлы Цикл + + ПрикрепляемыйФайл = Новый Файл(ПутьКПрикрепляемомуФайлу); + Если Не ПрикрепляемыйФайл.Существует() Тогда + Продолжить; + КонецЕсли; + + ПрикрепитьФайлКЗадаче(URLAttachments, ПрикрепляемыйФайл); + + КонецЦикла; + + Если ЗначениеЗаполнено(ДанныеОтчетаОбОшибке.Скриншот) Тогда + + ПрикрепляемыйФайл = Новый Файл(ДанныеОтчетаОбОшибке.Скриншот); + Если ПрикрепляемыйФайл.Существует() Тогда + ПрикрепитьФайлКЗадаче(URLAttachments, ПрикрепляемыйФайл); + КонецЕсли; + + КонецЕсли; + + РезультатЗапросаJSON = РезультатЗапроса.JSON(); + ИдЗадачиВТрекере = РезультатЗапросаJSON["key"]; + + Возврат ИдЗадачиВТрекере; + +КонецФункции + +Процедура ПрикрепитьФайлКЗадаче(URL, ПрикрепляемыйФайл) + + Аутентификация = Новый Структура(); + Аутентификация.Вставить("Пользователь", Логин); + Аутентификация.Вставить("Пароль", Токен); + + Заголовки = Новый Соответствие; + Заголовки.Вставить("X-Atlassian-Token", "no-check"); + + Файлы = Новый Структура; + Файлы.Вставить("Имя", "file"); + Файлы.Вставить("ИмяФайла", ПрикрепляемыйФайл.Имя); + Файлы.Вставить("Данные", Новый ДвоичныеДанные(ПрикрепляемыйФайл.ПолноеИмя)); + Если ПрикрепляемыйФайл.Расширение = ".png" Тогда + Файлы.Вставить("Тип", "image/png"); + Иначе + Файлы.Вставить("Тип", "application/octet-stream"); + КонецЕсли; + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Аутентификация", Аутентификация); + ДополнительныеПараметры.Вставить("Заголовки", Заголовки); + ДополнительныеПараметры.Вставить("Файлы", Файлы); + + РезультатЗапроса = КоннекторHTTP.Post(URL, Неопределено, Неопределено, ДополнительныеПараметры); + Если РезультатЗапроса.КодСостояния <> 200 Тогда + Сообщить("Не удалось прикрепить файл"); + КонецЕсли; + +КонецПроцедуры + +Функция СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке) Экспорт + + Issue = Новый Структура; + Issue.Вставить("project", Новый Структура("key", КлючПроекта)); + Issue.Вставить("issuetype", Новый Структура("id", ИдТипаЗадачи)); + Issue.Вставить("summary", ТемаЗадачи); + Issue.Вставить("duedate", ТекущаяДата () + 24 * 3600 * СрокИсполнения); + + Описание = ОтчетыОбОшибках.СформироватьОписаниеОшибки(ДанныеОтчетаОбОшибке); + Issue.Вставить("description", Описание); + + ТелоЗапросаJSON = Новый Структура; + ТелоЗапросаJSON.Вставить("fields", Issue); + + ПарсерJSON = Новый ПарсерJSON(); + ТелоЗапроса = ПарсерJSON.ЗаписатьJSON(ТелоЗапросаJSON); + + Возврат ТелоЗапроса; + +КонецФункции diff --git "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index a02a9bc..28a7587 100644 --- "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -21,6 +21,11 @@ Процедура ИнициализироватьХранилище() + Файл = Новый Файл (Каталог); + Если Не Файл.Существует () Тогда + СоздатьКаталог (Каталог); + КонецЕсли; + ИмяФайлаЗапросыИнфоОбОшибке = ОбъединитьПути(Каталог, "errorInfoRequests.json"); ИмяФайлаОшибки = ОбъединитьПути(Каталог, "errors.json"); @@ -48,9 +53,7 @@ КонецПроцедуры -Функция ПолучитьЗапросыИнфоОбОшибках() Экспорт - - Результат = ТаблицаЗапросовИнфоОбОшибках(); +Функция ПрочитатьЗапросыИнфоОбОшибках() Экспорт ЧтениеJSON = Новый ЧтениеJSON(); @@ -58,48 +61,13 @@ Запросы = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); - Если Запросы = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Для Каждого ЗапросИнфоПоОшибке Из Запросы Цикл - - нСтр = Результат.Добавить(); - ЗаполнитьЗначенияСвойств(нСтр, ЗапросИнфоПоОшибке); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Функция ТаблицаЗапросовИнфоОбОшибках() - - Таблица = Новый ТаблицаЗначений; - - Таблица.Колонки.Добавить("x_id"); - Таблица.Колонки.Добавить("x_datetime"); - Таблица.Колонки.Добавить("x_fingerprint"); - - Таблица.Колонки.Добавить("configHash"); - Таблица.Колонки.Добавить("сonfigName"); - Таблица.Колонки.Добавить("configVersion"); - Таблица.Колонки.Добавить("appStackHash"); - Таблица.Колонки.Добавить("clientStackHash"); - Таблица.Колонки.Добавить("serverStackHash"); - Таблица.Колонки.Добавить("platformType"); - Таблица.Колонки.Добавить("appName"); - Таблица.Колонки.Добавить("appVersion"); - Таблица.Колонки.Добавить("configurationInterfaceLanguageCode"); - Таблица.Колонки.Добавить("systemcrash"); - - Возврат Таблица; + Возврат Запросы; КонецФункции Процедура ЗаписатьЗапросИнфоОбОшибке(ЗапросИнфоОбОшибке) Экспорт - ТЗ = ПолучитьЗапросыИнфоОбОшибках(); + ТЗ = МенеджерХранилищаОшибок.ПолучитьЗапросыИнфоОбОшибках (); нСтр = ТЗ.Добавить(); ЗаполнитьЗначенияСвойств(нСтр, ЗапросИнфоОбОшибке); @@ -111,27 +79,14 @@ КонецПроцедуры -Функция ПолучитьОшибки() Экспорт +Функция ПрочитатьОшибки() Экспорт - Результат = ТаблицаОшибок(); - ЧтениеJSON = Новый ЧтениеJSON(); ЧтениеJSON.ОткрытьФайл(ИмяФайлаОшибки, "utf-8"); ТаблицаОшибки = ПрочитатьJSON(ЧтениеJSON); ЧтениеJSON.Закрыть(); - Если ТаблицаОшибки = Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Для Каждого Ошибка Из ТаблицаОшибки Цикл - - нСтр = Результат.Добавить(); - ЗаполнитьЗначенияСвойств(нСтр, Ошибка); - - КонецЦикла; - - Возврат Результат; + Возврат ТаблицаОшибки; КонецФункции @@ -139,7 +94,7 @@ Ид = Неопределено; - Ошибки = ПолучитьОшибки(); + Ошибки = МенеджерХранилищаОшибок.ПолучитьОшибки(); СтруктураОтбора = Новый Структура("fingerprint", Отпечаток); @@ -152,50 +107,15 @@ КонецФункции -Функция ТаблицаОшибок() - - Таблица = Новый ТаблицаЗначений; - Таблица.Колонки.Добавить("id"); - Таблица.Колонки.Добавить("datetime"); - Таблица.Колонки.Добавить("fingerprint"); - Таблица.Колонки.Добавить("external_id"); - - Возврат Таблица; - -КонецФункции - -Процедура СохранитьФайлОтчета(Идентификатор, ФайлОтчета) Экспорт - - ИмяФайлаОтчета = СтрШаблон("%1.zip", Идентификатор); - ИмяАрхива = ОбъединитьПути(Каталог, ИмяФайлаОтчета); - - ПотокВходящегоФайла = ФайлОтчета.ОткрытьПотокДляЧтения(); - - // ФайловыйПоток нужен здесь потому, что ЧтениеZipФайла в OneScript 1.4 не умеет читать Поток - ФайловыйПоток = ФайловыеПотоки.ОткрытьДляЗаписи(ИмяАрхива); - ПотокВходящегоФайла.КопироватьВ(ФайловыйПоток); - ПотокВходящегоФайла.Закрыть(); - ФайловыйПоток.Закрыть(); - - ЧтениеZIP = Новый ЧтениеZipФайла(ИмяАрхива); - КаталогОтчета = ОбъединитьПути(Каталог, Идентификатор); - ЧтениеZIP.ИзвлечьВсе(КаталогОтчета); - ЧтениеZIP.Закрыть(); - - УдалитьФайлы(ИмяАрхива); - -КонецПроцедуры - Процедура ЗаписатьОшибку(ДанныеОтчетаОбОшибке) Экспорт - Ошибки = ПолучитьОшибки(); + Ошибки = МенеджерХранилищаОшибок.ПолучитьОшибки(); Отчет = ДанныеОтчетаОбОшибке.Отчет; нСтр = Ошибки.Добавить(); - нСтр.id = ДанныеОтчетаОбОшибке.Идентификатор; нСтр.datetime = Отчет["time"]; - нСтр.fingerprint = ОтпечатокОшибки(Отчет); + нСтр.fingerprint = ДанныеОтчетаОбОшибке.Идентификатор; Текст = Новый ЗаписьТекста(ИмяФайлаОшибки); ПарсерJSON = Новый ПарсерJSON; @@ -204,103 +124,19 @@ КонецПроцедуры -Функция ОтпечатокОшибки(ОтчетОбОшибке) - - Провайдер = Новый ХешированиеДанных(ХешФункция.MD5); - - СистемнаяИнфоОбОшибке = ОтчетОбОшибке["errorInfo"]["systemErrorInfo"]; - - clientStackHash = СистемнаяИнфоОбОшибке["clientStackHash"]; - Если ЗначениеЗаполнено(clientStackHash) Тогда - Провайдер.Добавить(clientStackHash); - КонецЕсли; - - serverStackHash = СистемнаяИнфоОбОшибке["serverStackHash"]; - Если ЗначениеЗаполнено(serverStackHash) Тогда - Провайдер.Добавить(serverStackHash); - КонецЕсли; - - Возврат Провайдер.ХешСуммаСтрокой; - -КонецФункции - -Функция ПолучитьДанныеОтчетаОбОшибке(Знач ИдОтчетаОбОшибке) Экспорт - - Результат = СтруктураДанныхОтчетаОбОшибке(); - Результат.Идентификатор = ИдОтчетаОбОшибке; - - КаталогОтчета = ОбъединитьПути(Каталог, ИдОтчетаОбОшибке); - ФайлыАрхива = НайтиФайлы(КаталогОтчета, "*", Истина); - - Если ФайлыАрхива.Количество() = 0 Тогда - ТекстИсключения = СтрШаблон("Не удалось найти отчет об ошибке Ид %1", ИдОтчетаОбОшибке); - ВызватьИсключение(ТекстИсключения); - КонецЕсли; - - Для Каждого Файл Из ФайлыАрхива Цикл - - Если Файл.Имя = "report.json" Тогда - ЗаполнитьОтчетОбОшибке(Результат, Файл.ПолноеИмя); - ИначеЕсли Файл.Имя = "screenshot.png" Тогда - Результат.Скриншот = Файл.ПолноеИмя; - Иначе - Результат.Файлы.Добавить(Файл.ПолноеИмя); - КонецЕсли; - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -Процедура ЗаполнитьОтчетОбОшибке(СтруктураОтчета, ИмяФайла) Экспорт - - ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); - ОтчетОбОшибкеJSON = ЧтениеТекста.Прочитать(); - ЧтениеТекста.Закрыть(); - - ПарсерJSON = Новый ПарсерJSON; - ДанныеОтчетаОбОшибке = ПарсерJSON.ПрочитатьJSON(ОтчетОбОшибкеJSON); - - СтруктураОтчета.Отчет = ДанныеОтчетаОбОшибке; - -КонецПроцедуры - -Функция СтруктураДанныхОтчетаОбОшибке() Экспорт - - Результат = Новый Структура(); - Результат.Вставить("Идентификатор", ""); - Результат.Вставить("Отчет", Неопределено); - Результат.Вставить("Файлы", Новый Массив()); - Результат.Вставить("Скриншот", ""); - - Возврат Результат; - -КонецФункции - -Функция ОбработатьОтчетОбОшибке(ФайлОтчета) Экспорт - - Идентификатор = Строка(Новый УникальныйИдентификатор()); - СохранитьФайлОтчета(Идентификатор, ФайлОтчета); - - ДанныеОтчетаОбОшибке = ПолучитьДанныеОтчетаОбОшибке(Идентификатор); - ЗаписатьОшибку(ДанныеОтчетаОбОшибке); - - Возврат ДанныеОтчетаОбОшибке; - -КонецФункции - Процедура УстановитьИдЗадачиВТрекере(ИдентификаторЗадачи, ИдЗадачиВТрекере) Экспорт Ид = Неопределено; - Ошибки = ПолучитьОшибки(); + Ошибки = МенеджерХранилищаОшибок.ПолучитьОшибки(); СтруктураОтбора = Новый Структура("id", ИдентификаторЗадачи); НайденныеОшибки = Ошибки.НайтиСтроки(СтруктураОтбора); Если НайденныеОшибки.Количество() Тогда НайденныеОшибки[0].external_id = ИдЗадачиВТрекере; + Иначе + Возврат; КонецЕсли; Текст = Новый ЗаписьТекста(ИмяФайлаОшибки); diff --git "a/src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" "b/src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" new file mode 100644 index 0000000..1ac7041 --- /dev/null +++ "b/src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" @@ -0,0 +1,66 @@ +#Использовать entity + +// Хранилище сущностей "ДанныеОбОшибке" +Перем ХранилищеДанныхОбОшибках; + +// Хранилище сущностей "ЗапросОбОшибке" +Перем ХранилищеЗапросовОбОшибках; + +Процедура ПриСозданииОбъекта(ТипХранилища) Экспорт + + ИнициализироватьХранилище(ТипХранилища); + +КонецПроцедуры + +Процедура ИнициализироватьХранилище(ТипХранилища) + + ПодключитьСценарий(ОбъединитьПути(ТекущийКаталог(), "model", "entities", "ЗапросОбОшибке.os"), "ЗапросОбОшибке"); + ПодключитьСценарий(ОбъединитьПути(ТекущийКаталог(), "model", "entities", "ДанныеОбОшибке.os"), "ДанныеОбОшибке"); + + МенеджерСущностей = Новый МенеджерСущностей(Тип (ТипХранилища)); + МенеджерСущностей.ДобавитьКлассВМодель(Тип("ЗапросОбОшибке")); + МенеджерСущностей.ДобавитьКлассВМодель(Тип("ДанныеОбОшибке")); + МенеджерСущностей.Инициализировать(); + + ХранилищеДанныхОбОшибках = МенеджерСущностей.ПолучитьХранилищеСущностей (Тип("ДанныеОбОшибке")); + ХранилищеЗапросовОбОшибках = МенеджерСущностей.ПолучитьХранилищеСущностей (Тип("ЗапросОбОшибке")); + +КонецПроцедуры + +Функция ПрочитатьЗапросыИнфоОбОшибках () Экспорт + Возврат ХранилищеЗапросовОбОшибках.Получить (); +КонецФункции + +Процедура ЗаписатьЗапросИнфоОбОшибке(ЗапросИнфоОбОшибке) Экспорт + ЗапросОбОшибке = ХранилищеЗапросовОбОшибках.СоздатьЭлемент (); + ЗаполнитьЗначенияСвойств (ЗапросОбОшибке, ЗапросИнфоОбОшибке, , "x_id"); + ХранилищеЗапросовОбОшибках.Сохранить (ЗапросОбОшибке); +КонецПроцедуры + +Функция ПрочитатьОшибки () Экспорт + Возврат ХранилищеДанныхОбОшибках.Получить (); +КонецФункции + +Функция ИдентификаторОшибкиВТрекереПоОтпечатку(Отпечаток) Экспорт + ДанныеОбОшибке = ХранилищеДанныхОбОшибках.ПолучитьОдно (Отпечаток); + Возврат ? (ДанныеОбОшибке = Неопределено, Неопределено, ДанныеОбОшибке.external_id); +КонецФункции + +Процедура ЗаписатьОшибку(ДанныеОтчетаОбОшибке) Экспорт + + Отчет = ДанныеОтчетаОбОшибке.Отчет; + + ДанныеОбОшибке = ХранилищеДанныхОбОшибках.СоздатьЭлемент (); + + ДанныеОбОшибке.fingerprint = ДанныеОтчетаОбОшибке.Идентификатор; + ДанныеОбОшибке.datetime = ПрочитатьДатуJSON (Отчет ["time"], ФорматДатыJSON.ISO); + + ХранилищеДанныхОбОшибках.Сохранить (ДанныеОбОшибке); + +КонецПроцедуры + +Процедура УстановитьИдЗадачиВТрекере(ИдентификаторЗадачи, ИдЗадачиВТрекере) Экспорт + ДанныеОбОшибке = ХранилищеДанныхОбОшибках.ПолучитьОдно (ИдентификаторЗадачи); + ДанныеОбОшибке.external_id = ИдЗадачиВТрекере; + ХранилищеДанныхОбОшибках.Сохранить (ДанныеОбОшибке); +КонецПроцедуры \ No newline at end of file diff --git "a/src/model/entities/\320\224\320\260\320\275\320\275\321\213\320\265\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" "b/src/model/entities/\320\224\320\260\320\275\320\275\321\213\320\265\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" new file mode 100644 index 0000000..4ea3cc1 --- /dev/null +++ "b/src/model/entities/\320\224\320\260\320\275\320\275\321\213\320\265\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" @@ -0,0 +1,15 @@ + +&Идентификатор +&Колонка(Тип = "Строка") +Перем fingerprint Экспорт; + +&Колонка(Тип = "ДатаВремя") +Перем datetime Экспорт; + +&Колонка(Тип = "Строка") +Перем external_id Экспорт; + +&Сущность(ИмяТаблицы = "errors") +Процедура ПриСозданииОбъекта() + +КонецПроцедуры \ No newline at end of file diff --git "a/src/model/entities/\320\227\320\260\320\277\321\200\320\276\321\201\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" "b/src/model/entities/\320\227\320\260\320\277\321\200\320\276\321\201\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" new file mode 100644 index 0000000..5f6b984 --- /dev/null +++ "b/src/model/entities/\320\227\320\260\320\277\321\200\320\276\321\201\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" @@ -0,0 +1,48 @@ +&Идентификатор +&ГенерируемоеЗначение +&Колонка(Тип = "Целое") +Перем x_id Экспорт; + +&Колонка(Тип = "Строка") +Перем x_fingerprint Экспорт; + +&Колонка(Тип = "ДатаВремя") +Перем x_datetime Экспорт; + +&Колонка(Тип = "Строка") +Перем configHash Экспорт; + +&Колонка(Тип = "Строка") +Перем сonfigName Экспорт; + +&Колонка(Тип = "Строка") +Перем configVersion Экспорт; + +&Колонка(Тип = "Строка") +Перем appStackHash Экспорт; + +&Колонка(Тип = "Строка") +Перем clientStackHash Экспорт; + +&Колонка(Тип = "Строка") +Перем serverStackHash Экспорт; + +&Колонка(Тип = "Строка") +Перем platformType Экспорт; + +&Колонка(Тип = "Строка") +Перем appName Экспорт; + +&Колонка(Тип = "Строка") +Перем appVersion Экспорт; + +&Колонка(Тип = "Строка") +Перем configurationInterfaceLanguageCode Экспорт; + +&Колонка(Тип = "Строка") +Перем systemcrash Экспорт; + +&Сущность(ИмяТаблицы = "errorInfoRequests") +Процедура ПриСозданииОбъекта() + +КонецПроцедуры \ No newline at end of file diff --git a/src/model/lib.config b/src/model/lib.config index 297328e..937b989 100644 --- a/src/model/lib.config +++ b/src/model/lib.config @@ -5,7 +5,9 @@ + + \ No newline at end of file diff --git "a/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" "b/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" index ae7a5b4..30b35f7 100644 --- "a/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" +++ "b/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" @@ -73,8 +73,13 @@ Функция ОтпечатокОшибки(ЗапросИнфоОбОшибке) Провайдер = Новый ХешированиеДанных(ХешФункция.MD5); - ДобавитьПараметрВПровайдерХеширования(Провайдер, ЗапросИнфоОбОшибке, "clientStackHash"); - ДобавитьПараметрВПровайдерХеширования(Провайдер, ЗапросИнфоОбОшибке, "serverStackHash"); + + Если ЗапросИнфоОбОшибке.Свойство ("appStackHash") Тогда + ДобавитьПараметрВПровайдерХеширования(Провайдер, ЗапросИнфоОбОшибке, "appStackHash"); + Иначе + ДобавитьПараметрВПровайдерХеширования(Провайдер, ЗапросИнфоОбОшибке, "clientStackHash"); + ДобавитьПараметрВПровайдерХеширования(Провайдер, ЗапросИнфоОбОшибке, "serverStackHash"); + КонецЕсли; Возврат Провайдер.ХешСуммаСтрокой; diff --git "a/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" "b/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" index dbfd9f8..f146f4f 100644 --- "a/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" +++ "b/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" @@ -6,9 +6,12 @@ // Хранит экземпляр текущего провайдера интеграции Перем ПровайдерИнтеграции; +// Путь к каталогу, в котором располагаются файлы с данными +Перем Каталог; + Функция ХранилищеДанных() Экспорт - Возврат ХранилищеДанных; + Возврат МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог); КонецФункции @@ -67,8 +70,12 @@ Если ВидХранилищаНастройки["enabled"] Тогда Если ВидХранилища.Ключ = "file" Тогда - мКаталогДанных = ВидХранилищаНастройки["path"]; - ХранилищеДанных = Новый ФайловоеХранилище(мКаталогДанных); + Каталог = ВидХранилищаНастройки["path"]; + ХранилищеДанных = Новый ФайловоеХранилище(Каталог); + ИначеЕсли ВидХранилища.Ключ = "dbase" Тогда + Каталог = ВидХранилищаНастройки["path"]; + ТипХранилища = ВидХранилищаНастройки["type"]; + ХранилищеДанных = Новый ХранилищеБазыДанных (ТипХранилища); Иначе ВызватьИсключение("Неизвестный тип хранения данных, проверьте файл настроек appsettings.json"); КонецЕсли; @@ -78,6 +85,10 @@ КонецЦикла; + Если ХранилищеДанных = Неопределено Тогда + ВызватьИсключение "Не определен тип хранения данных! Проверьте файл настроек appsettings.json"; + КонецЕсли; + КонецПроцедуры Процедура НастроитьПровайдерИнтеграции(Настройки) @@ -114,6 +125,7 @@ .КлючПроекта(ИнтеграцияНастройки["project-key"]) .ИдТипаЗадачи(ИнтеграцияНастройки["issuetype-id"]) .ТемаЗадачи(ИнтеграцияНастройки["summary"]) + .СрокИсполнения(ИнтеграцияНастройки["term"]) ; ПровайдерИнтеграции = ПровайдерИнтеграцииJira; diff --git "a/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" "b/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" new file mode 100644 index 0000000..5d97086 --- /dev/null +++ "b/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" @@ -0,0 +1,255 @@ + +#Использовать fs + +// Хранит экземпляр текущего хранилища данных +Перем ХранилищеДанных; + +// Путь к каталогу, в котором располагаются файлы с данными +Перем Каталог; + +Функция Инициализировать (мХранилищеДанных, мКаталогДанных) Экспорт + ХранилищеДанных = мХранилищеДанных; + Каталог = мКаталогДанных; + Возврат ЭтотОбъект; +КонецФункции + +Функция ПолучитьЗапросыИнфоОбОшибках() Экспорт + + Результат = ТаблицаЗапросовИнфоОбОшибках(); + + ЗапросыИнфоОбОшибках = ХранилищеДанных.ПрочитатьЗапросыИнфоОбОшибках (); + Если ЗапросыИнфоОбОшибках = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого ЗапросИнфоПоОшибке Из ХранилищеДанных.ПрочитатьЗапросыИнфоОбОшибках () Цикл + нСтр = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(нСтр, ЗапросИнфоПоОшибке); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ТаблицаЗапросовИнфоОбОшибках() + + Таблица = Новый ТаблицаЗначений; + + Таблица.Колонки.Добавить("x_id"); + Таблица.Колонки.Добавить("x_datetime"); + Таблица.Колонки.Добавить("x_fingerprint"); + + Таблица.Колонки.Добавить("configHash"); + Таблица.Колонки.Добавить("сonfigName"); + Таблица.Колонки.Добавить("configVersion"); + Таблица.Колонки.Добавить("appStackHash"); + Таблица.Колонки.Добавить("clientStackHash"); + Таблица.Колонки.Добавить("serverStackHash"); + Таблица.Колонки.Добавить("platformType"); + Таблица.Колонки.Добавить("appName"); + Таблица.Колонки.Добавить("appVersion"); + Таблица.Колонки.Добавить("configurationInterfaceLanguageCode"); + Таблица.Колонки.Добавить("systemcrash"); + + Возврат Таблица; + +КонецФункции + +Процедура ЗаписатьЗапросИнфоОбОшибке(ЗапросИнфоОбОшибке) Экспорт + ХранилищеДанных.ЗаписатьЗапросИнфоОбОшибке (ЗапросИнфоОбОшибке); +КонецПроцедуры + +Функция ПолучитьОшибки() Экспорт + + Результат = ТаблицаОшибок(); + + Ошибки = ХранилищеДанных.ПрочитатьОшибки (); + Если Ошибки = Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого Ошибка Из ХранилищеДанных.ПрочитатьОшибки () Цикл + нСтр = Результат.Добавить(); + ЗаполнитьЗначенияСвойств(нСтр, Ошибка); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Функция ИдентификаторОшибкиВТрекереПоОтпечатку(Отпечаток) Экспорт + Возврат ХранилищеДанных.ИдентификаторОшибкиВТрекереПоОтпечатку(Отпечаток); +КонецФункции + +Функция ТаблицаОшибок() + + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("datetime"); + Таблица.Колонки.Добавить("fingerprint"); + Таблица.Колонки.Добавить("external_id"); + + Возврат Таблица; + +КонецФункции + +Процедура СохранитьФайлОтчета(Идентификатор, ФайлОтчета) Экспорт + + ИмяФайлаОтчета = СтрШаблон("%1.zip", Идентификатор); + ИмяАрхива = ОбъединитьПути(Каталог, ИмяФайлаОтчета); + + ПотокВходящегоФайла = ФайлОтчета.ОткрытьПотокДляЧтения(); + + // ФайловыйПоток нужен здесь потому, что ЧтениеZipФайла в OneScript 1.4 не умеет читать Поток + ФайловыйПоток = ФайловыеПотоки.ОткрытьДляЗаписи(ИмяАрхива); + ПотокВходящегоФайла.КопироватьВ(ФайловыйПоток); + ПотокВходящегоФайла.Закрыть(); + ФайловыйПоток.Закрыть(); + + ЧтениеZIP = Новый ЧтениеZipФайла(ИмяАрхива); + КаталогОтчета = ОбъединитьПути(Каталог, Идентификатор); + ЧтениеZIP.ИзвлечьВсе(КаталогОтчета); + ЧтениеZIP.Закрыть(); + + УдалитьФайлы(ИмяАрхива); + +КонецПроцедуры + +Функция ОтпечатокОшибки(ОтчетОбОшибке) + + СистемнаяИнфоОбОшибке = ОтчетОбОшибке["errorInfo"]["systemErrorInfo"]; + ПрограммнаяИнфоОбОшибке = ОтчетОбОшибке["errorInfo"]["applicationErrorInfo"]; + + Провайдер = Новый ХешированиеДанных(ХешФункция.MD5); + + stackHash = ПрограммнаяИнфоОбОшибке ["stackHash"]; + Если ЗначениеЗаполнено (stackHash) Тогда + Провайдер.Добавить (stackHash); + Иначе + + clientStackHash = СистемнаяИнфоОбОшибке["clientStackHash"]; + Если ЗначениеЗаполнено(clientStackHash) Тогда + Провайдер.Добавить(clientStackHash); + КонецЕсли; + + serverStackHash = СистемнаяИнфоОбОшибке["serverStackHash"]; + Если ЗначениеЗаполнено(serverStackHash) Тогда + Провайдер.Добавить(serverStackHash); + КонецЕсли; + + КонецЕсли; + + Возврат Провайдер.ХешСуммаСтрокой; + +КонецФункции + +Функция ПолучитьДанныеОтчетаОбОшибке(Знач ИдОтчетаОбОшибке) Экспорт + + Результат = СтруктураДанныхОтчетаОбОшибке(); + + КаталогОтчета = ОбъединитьПути(Каталог, ИдОтчетаОбОшибке); + ФайлыАрхива = НайтиФайлы(КаталогОтчета, "*", Истина); + + Если ФайлыАрхива.Количество() = 0 Тогда + ТекстИсключения = СтрШаблон("Не удалось найти отчет об ошибке Ид %1", ИдОтчетаОбОшибке); + ВызватьИсключение(ТекстИсключения); + КонецЕсли; + + Для Каждого Файл Из ФайлыАрхива Цикл + + Если Файл.Имя = "report.json" Тогда + ЗаполнитьОтчетОбОшибке(Результат, Файл.ПолноеИмя); + ИначеЕсли Файл.Имя = "screenshot.png" Тогда + Результат.Скриншот = Файл.ПолноеИмя; + Иначе + Результат.Файлы.Добавить(Файл.ПолноеИмя); + КонецЕсли; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ЗаполнитьОтчетОбОшибке(СтруктураОтчета, ИмяФайла) Экспорт + + ЧтениеТекста = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8); + ОтчетОбОшибкеJSON = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + ПарсерJSON = Новый ПарсерJSON; + ДанныеОтчетаОбОшибке = ПарсерJSON.ПрочитатьJSON(ОтчетОбОшибкеJSON); + + СтруктураОтчета.Отчет = ДанныеОтчетаОбОшибке; + +КонецПроцедуры + +Функция СтруктураДанныхОтчетаОбОшибке() Экспорт + + Результат = Новый Структура(); + Результат.Вставить("Идентификатор", ""); + Результат.Вставить("Отчет", Неопределено); + Результат.Вставить("Файлы", Новый Массив()); + Результат.Вставить("Скриншот", ""); + + Возврат Результат; + +КонецФункции + +Функция ОбработатьОтчетОбОшибке(ФайлОтчета) Экспорт + + Идентификатор = Строка(Новый УникальныйИдентификатор()); + СохранитьФайлОтчета(Идентификатор, ФайлОтчета); + + ДанныеОтчетаОбОшибке = ПолучитьДанныеОтчетаОбОшибке(Идентификатор); + ДанныеОтчетаОбОшибке.Идентификатор = ОтпечатокОшибки (ДанныеОтчетаОбОшибке.Отчет); + ХранилищеДанных.ЗаписатьОшибку(ДанныеОтчетаОбОшибке); + + ПереименоватьПапку (ОбъединитьПути (Каталог, Идентификатор), ОбъединитьПути (Каталог, ДанныеОтчетаОбОшибке.Идентификатор)); + ИзменитьПутиКФайламОтчета (ДанныеОтчетаОбОшибке); + + Возврат ДанныеОтчетаОбОшибке; + +КонецФункции + +Процедура ИзменитьПутиКФайламОтчета (ДанныеОтчетаОбОшибке) + + КаталогФайлов = ОбъединитьПути (Каталог, ДанныеОтчетаОбОшибке.Идентификатор); + + Если Не ПустаяСтрока (ДанныеОтчетаОбОшибке.Скриншот) Тогда + Файл = Новый Файл (ДанныеОтчетаОбОшибке.Скриншот); + ДанныеОтчетаОбОшибке.Скриншот = ОбъединитьПути (КаталогФайлов, Файл.Имя); + КонецЕсли; + + Для инд = 0 По ДанныеОтчетаОбОшибке.Файлы.ВГраница () Цикл + ИмяФайла = ДанныеОтчетаОбОшибке.Файлы [инд]; + Файл = Новый Файл (ИмяФайла); + ДанныеОтчетаОбОшибке.Файлы [инд] = ОбъединитьПути (КаталогФайлов, Файл.Имя); + КонецЦикла; + +КонецПроцедуры + +// Выполняет поштучное перемещение файлов из папки Источник +// в папку Приемник (создает ее, если нет). +// Прим. стандартный метод ПереместитьФайл для каталога не отрабатывает +Процедура ПереименоватьПапку (Источник, Приемник) + + Папка = Новый Файл (Приемник); + Если Не Папка.Существует () Или Не Папка.ЭтоКаталог () Тогда + СоздатьКаталог (Приемник); + КонецЕсли; + + НайденныеФайлы = НайтиФайлы (Источник, "*.*"); + Для Каждого Файл Из НайденныеФайлы Цикл + Если Файл.ЭтоКаталог () Тогда + Продолжить; + КонецЕсли; + ПереместитьФайл (Файл.ПолноеИмя, ОбъединитьПути (Приемник, Файл.Имя)); + КонецЦикла; + + УдалитьФайлы (Источник); + +КонецПроцедуры + +Процедура УстановитьИдЗадачиВТрекере(ИдентификаторЗадачи, ИдЗадачиВТрекере) Экспорт + ХранилищеДанных.УстановитьИдЗадачиВТрекере (ИдентификаторЗадачи, ИдЗадачиВТрекере); +КонецПроцедуры \ No newline at end of file diff --git "a/src/model/modules/\320\236\321\202\321\207\320\265\321\202\321\213\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\260\321\205.os" "b/src/model/modules/\320\236\321\202\321\207\320\265\321\202\321\213\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\260\321\205.os" index cf0fa08..d7084f1 100644 --- "a/src/model/modules/\320\236\321\202\321\207\320\265\321\202\321\213\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\260\321\205.os" +++ "b/src/model/modules/\320\236\321\202\321\207\320\265\321\202\321\213\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\260\321\205.os" @@ -105,6 +105,11 @@ КонецЕсли; + ПримечаниеПользователя = ИнфоОбОшибке["userDescription"]; + Если ПримечаниеПользователя <> Неопределено Тогда + ПоляОписанияОшибки.Вставить("ПримечаниеПользователя", ПримечаниеПользователя); + КонецЕсли; + Возврат ПоляОписанияОшибки; КонецФункции diff --git a/src/packagedef b/src/packagedef index 7196df5..f96d477 100644 --- a/src/packagedef +++ b/src/packagedef @@ -4,6 +4,7 @@ .ЗависитОт("json") .ЗависитОт("1connector") .ЗависитОт("rabbitmq") + .ЗависитОт("entity") .РазработкаЗависитОт("1bdd") .РазработкаЗависитОт("1testrunner") .РазработкаЗависитОт("asserts") diff --git a/src/views/errorReports/Index.cshtml b/src/views/errorReports/Index.cshtml index 6b1b511..27459a0 100644 --- a/src/views/errorReports/Index.cshtml +++ b/src/views/errorReports/Index.cshtml @@ -3,7 +3,6 @@ - @@ -12,7 +11,6 @@ @foreach(var row in Model) { - From 9b7a7d500ef6afabe220a23a49bc090e194e1950 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Thu, 27 Jan 2022 23:18:00 +0300 Subject: [PATCH 02/17] =?UTF-8?q?=D0=92=20=D0=BD=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B9=D0=BA=D0=B8=20appsettings=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D1=85=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=BB=D0=B8=D1=89=D0=B5=20SQLite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/appsettings.json | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/appsettings.json b/src/appsettings.json index 81e56c0..15e40f6 100644 --- a/src/appsettings.json +++ b/src/appsettings.json @@ -1,4 +1,8 @@ { + "Database":{ + "DbType":"SQLite", + "ConnectionString":"Data Source=data/test.db" + }, "Logging":{ "Console":{ "LogLevel":{ @@ -11,8 +15,13 @@ "reperrSettings":{ "DataStorage":{ "file": { - "enabled": true, + "enabled": false, "path": "data" + }, + "dbase": { + "enabled": true, + "path": "data", + "type": "КоннекторSQLite" } }, "Integrations":{ @@ -34,10 +43,11 @@ "token": "example", "project-key": "REP", "issuetype-id": "10000", + "term": 2, "priority-id": "4", "status-id": "0", - "summary": "Автоматически зарегистрированная ошибка" - }, + "summary": "Автоматически зарегистрированная ошибка" + } "rabbitMQ": { "enabled": false, "user": "example", From 48477bc4837d5b583b0e7b71037e7a6870c4245e Mon Sep 17 00:00:00 2001 From: oshabanov <76772796+oshabanov@users.noreply.github.com> Date: Mon, 7 Feb 2022 23:37:33 +0200 Subject: [PATCH 03/17] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D1=82=D1=80=D0=B8=D0=B3=D0=B3=D0=B5=D1=80=20=D0=BF?= =?UTF-8?q?=D0=BE=20workflow=5Fdispatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 7699571..444daa5 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -4,7 +4,7 @@ name: qa # Любой пуш и pr в проекте но с фильтром по основному проекту -on: [push, pull_request] +on: [push, pull_request, workflow_dispatch] jobs: build: @@ -74,4 +74,4 @@ jobs: -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} -Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }} -Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }} - -Dsonar.scm.revision=${{ github.event.pull_request.head.sha }} \ No newline at end of file + -Dsonar.scm.revision=${{ github.event.pull_request.head.sha }} From b9428ce6a54212c196929e5436091af28b8286b3 Mon Sep 17 00:00:00 2001 From: oshabanov <76772796+oshabanov@users.noreply.github.com> Date: Tue, 8 Feb 2022 09:34:54 +0200 Subject: [PATCH 04/17] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BB=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D0=B5=20=D0=BF=D0=BE=20workflow?= =?UTF-8?q?=5Fdispatch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 444daa5..b5f10d1 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -4,7 +4,7 @@ name: qa # Любой пуш и pr в проекте но с фильтром по основному проекту -on: [push, pull_request, workflow_dispatch] +on: [push, pull_request] jobs: build: From 3b970b99c321ec22d1a2e21af3d05dfa96289477 Mon Sep 17 00:00:00 2001 From: oshabanov <76772796+oshabanov@users.noreply.github.com> Date: Tue, 8 Feb 2022 09:44:58 +0200 Subject: [PATCH 05/17] =?UTF-8?q?=D0=98=D0=B7=20=D0=A2=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=94=D0=BE=D0=BB=D0=B6=D0=B5=D0=BD=5F=D0=98=D0=BD=D0=B8=D1=86?= =?UTF-8?q?=D0=B8=D0=B0=D0=BB=D0=B8=D0=B7=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA?= =?UTF-8?q?=D0=B8Redmine()=20=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D1=83=20=D0=BD=D0=B0=20=D0=A4?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=D0=BE=D0=B5=D0=A5=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=BB=D0=B8=D1=89=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" "b/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" index 825d8d4..96d01b4 100644 --- "a/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" +++ "b/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" @@ -34,7 +34,7 @@ ПровайдерИнтеграции = МенеджерНастроек.ПровайдерИнтеграции(); ПровайдерИнтеграцииТип = ТипЗнч(ПровайдерИнтеграции); - Ожидаем.Что(ХранилищеДанныхТип).Равно(Тип("ФайловоеХранилище")); + //Ожидаем.Что(ХранилищеДанныхТип).Равно(Тип("ФайловоеХранилище")); Ожидаем.Что(ПровайдерИнтеграцииТип).Равно(Тип("ПровайдерИнтеграцииRedmine")); КонецПроцедуры From 671c7d70839fe9e98cf9840eab30bd7477ef3f6c Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 8 Feb 2022 15:22:20 +0300 Subject: [PATCH 06/17] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D1=8B=20=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D1=8B=20=D0=BF=D0=BE=D0=B4=20=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D1=83=D1=8E=20=D0=B0=D1=80=D1=85=D0=B8=D1=82=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D1=83=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/fixtures/data/errors.json | 4 +--- ...20\270\320\273\320\270\321\211\320\265.os" | 2 +- ...21\202\321\200\320\276\320\265\320\272.os" | 4 ---- ...10\320\270\320\261\320\276\320\272Jira.os" | 6 +++--- ...20\270\320\261\320\276\320\272RabbitMQ.os" | 6 +++--- ...320\270\320\261\320\276\320\272Redmine.os" | 4 ++-- ...\320\270\320\261\320\276\320\272Sentry.os" | 10 +++++----- ...20\270\320\273\320\270\321\211\320\265.os" | 19 +++++++++---------- 8 files changed, 24 insertions(+), 31 deletions(-) diff --git a/features/fixtures/data/errors.json b/features/fixtures/data/errors.json index 8c3eeb9..0c5d62b 100644 --- a/features/fixtures/data/errors.json +++ b/features/fixtures/data/errors.json @@ -1,12 +1,10 @@ [ { - "id": "61001a5e-09d5-47b8-bf19-e7672eda10e5", "datetime": "2020-10-05T21:58:45Z", - "fingerprint": "C0627D8FFA4A06A33D3BD77BAAED5667", + "fingerprint": "F69BFD3103B622026AFD7139FBBC0502", "external_id": "11331" }, { - "id": "68359124-56e5-93aa-cd94-9531aa526f4", "datetime": "2020-10-08T12:03:54Z", "fingerprint": "B07F49C8154BA4E20BA3FAAD30507F25", "external_id": "" diff --git "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index 28a7587..b2410be 100644 --- "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -130,7 +130,7 @@ Ошибки = МенеджерХранилищаОшибок.ПолучитьОшибки(); - СтруктураОтбора = Новый Структура("id", ИдентификаторЗадачи); + СтруктураОтбора = Новый Структура("fingerprint", ИдентификаторЗадачи); НайденныеОшибки = Ошибки.НайтиСтроки(СтруктураОтбора); Если НайденныеОшибки.Количество() Тогда diff --git "a/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" "b/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" index 825d8d4..a55edac 100644 --- "a/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" +++ "b/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217\320\235\320\260\321\201\321\202\321\200\320\276\320\265\320\272.os" @@ -34,7 +34,6 @@ ПровайдерИнтеграции = МенеджерНастроек.ПровайдерИнтеграции(); ПровайдерИнтеграцииТип = ТипЗнч(ПровайдерИнтеграции); - Ожидаем.Что(ХранилищеДанныхТип).Равно(Тип("ФайловоеХранилище")); Ожидаем.Что(ПровайдерИнтеграцииТип).Равно(Тип("ПровайдерИнтеграцииRedmine")); КонецПроцедуры @@ -48,7 +47,6 @@ ПровайдерИнтеграции = МенеджерНастроек.ПровайдерИнтеграции(); ПровайдерИнтеграцииТип = ТипЗнч(ПровайдерИнтеграции); - Ожидаем.Что(ХранилищеДанныхТип).Равно(Тип("ФайловоеХранилище")); Ожидаем.Что(ПровайдерИнтеграцииТип).Равно(Тип("ПровайдерИнтеграцииJira")); КонецПроцедуры @@ -62,7 +60,6 @@ ПровайдерИнтеграции = МенеджерНастроек.ПровайдерИнтеграции(); ПровайдерИнтеграцииТип = ТипЗнч(ПровайдерИнтеграции); - Ожидаем.Что(ХранилищеДанныхТип).Равно(Тип("ФайловоеХранилище")); Ожидаем.Что(ПровайдерИнтеграцииТип).Равно(Тип("ПровайдерИнтеграцииRabbitMQ")); КонецПроцедуры @@ -76,7 +73,6 @@ ПровайдерИнтеграции = МенеджерНастроек.ПровайдерИнтеграции(); ПровайдерИнтеграцииТип = ТипЗнч(ПровайдерИнтеграции); - Ожидаем.Что(ХранилищеДанныхТип).Равно(Тип("ФайловоеХранилище")); Ожидаем.Что(ПровайдерИнтеграцииТип).Равно(Тип("ПровайдерИнтеграцииSentry")); КонецПроцедуры diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" index 1d93203..203658f 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" @@ -31,9 +31,9 @@ .КлючПроекта("project-id") .ИдТипаЗадачи("1"); - ФайловоеХранилище = Новый ФайловоеХранилище("../features/fixtures/data"); - ДанныеОтчетаОбОшибке = ФайловоеХранилище.ПолучитьДанныеОтчетаОбОшибке("61001a5e-09d5-47b8-bf19-e7672eda10e5"); - + ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") + .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); + Результат = ПровайдерИнтеграцииJira.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); КаталогСценария = ТекущийСценарий().Каталог; diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272RabbitMQ.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272RabbitMQ.os" index e85c572..f34d4e6 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272RabbitMQ.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272RabbitMQ.os" @@ -30,9 +30,9 @@ .Сервер("project-id") .ВиртуальныйХост("1"); - ФайловоеХранилище = Новый ФайловоеХранилище("../features/fixtures/data"); - ДанныеОтчетаОбОшибке = ФайловоеХранилище.ПолучитьДанныеОтчетаОбОшибке("61001a5e-09d5-47b8-bf19-e7672eda10e5"); - + ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") + .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); + Результат = ПровайдерИнтеграцииRabbitMQ.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); КаталогСценария = ТекущийСценарий().Каталог; diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Redmine.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Redmine.os" index 352348f..2c2fb19 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Redmine.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Redmine.os" @@ -34,9 +34,9 @@ .Тема("topic") .КоличествоЧасов("1"); - ФайловоеХранилище = Новый ФайловоеХранилище("../features/fixtures/data"); + ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") + .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); - ДанныеОтчетаОбОшибке = ФайловоеХранилище.ПолучитьДанныеОтчетаОбОшибке("61001a5e-09d5-47b8-bf19-e7672eda10e5"); Результат = ПровайдерИнтеграцииRedmine.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); КаталогСценария = ТекущийСценарий().Каталог; diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" index 09e723a..bad5d82 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" @@ -30,8 +30,8 @@ .Логгер("logger.reperr.errors") ; - ФайловоеХранилище = Новый ФайловоеХранилище("../features/fixtures/data"); - ДанныеОтчетаОбОшибке = ФайловоеХранилище.ПолучитьДанныеОтчетаОбОшибке("61001a5e-09d5-47b8-bf19-e7672eda10e5"); + ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") + .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); Результат = ПровайдерИнтеграцииSentry.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); @@ -51,9 +51,9 @@ .Логгер("logger.reperr.errors") ; - ФайловоеХранилище = Новый ФайловоеХранилище("../features/fixtures/data"); - ДанныеОтчетаОбОшибке = ФайловоеХранилище.ПолучитьДанныеОтчетаОбОшибке("55555555-09d5-47b8-bf19-e7672eda1111"); - + ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") + .ПолучитьДанныеОтчетаОбОшибке ("55555555-09d5-47b8-bf19-e7672eda1111"); + Результат = ПровайдерИнтеграцииSentry.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); КаталогСценария = ТекущийСценарий().Каталог; diff --git "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index 2a24a86..281be59 100644 --- "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -41,7 +41,7 @@ Каталог = "data"; ХранилищеДанных = Новый ФайловоеХранилище(Каталог); - Результат = ХранилищеДанных.ПолучитьЗапросыИнфоОбОшибках(); + Результат = МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог).ПолучитьЗапросыИнфоОбОшибках(); Ожидаем.Что(Результат.Колонки.Количество()).Равно(14); Ожидаем.Что(Результат.Количество()).Равно(3); @@ -85,9 +85,9 @@ Каталог = "data"; ХранилищеДанных = Новый ФайловоеХранилище(Каталог); - Результат = ХранилищеДанных.ПолучитьОшибки(); + Результат = МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог).ПолучитьОшибки(); - Ожидаем.Что(Результат.Колонки.Количество()).Равно(4); + Ожидаем.Что(Результат.Колонки.Количество()).Равно(3); Ожидаем.Что(Результат.Количество()).Равно(2); КонецПроцедуры @@ -96,6 +96,7 @@ Каталог = "data"; ХранилищеДанных = Новый ФайловоеХранилище(Каталог); + МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог); ЧтениеТекста = Новый ЧтениеТекста("data/55555555-09d5-47b8-bf19-e7672eda1111/report.json", "utf-8"); ПарсерJSON = Новый ПарсерJSON; @@ -109,16 +110,14 @@ ДанныеОтчетаПоОшибке.Вставить("Отчет", ОтчетОбОшибке); ХранилищеДанных.ЗаписатьОшибку(ДанныеОтчетаПоОшибке); - Результат = ХранилищеДанных.ПолучитьОшибки(); + Результат = МенеджерХранилищаОшибок.ПолучитьОшибки(); Ожидаем.Что(Результат.Количество()).Равно(3); НоваяОшибка = Результат[2]; - Ожидаем.Что(НоваяОшибка["id"]).Равно("7054dd5d-f0b8-491d-8dcc-18bc1d2cbc83"); // Не выполняется на GA - // Ожидаем.Что(НоваяОшибка["datetime"]).Равно(Дата("20201111231747")); - Ожидаем.Что(НоваяОшибка["fingerprint"]).Равно("622C3BA24596958DD3A2D9AF0AAD16BC"); + Ожидаем.Что(НоваяОшибка["fingerprint"]).Равно(ДанныеОтчетаПоОшибке.Идентификатор); Ожидаем.Что(НоваяОшибка["external_id"]).Равно(""); КонецПроцедуры @@ -133,7 +132,7 @@ ЧтениеДанных.Закрыть(); ИдОтчета = "1111-2222-3333333-4444-55555"; - ХранилищеДанных.СохранитьФайлОтчета(ИдОтчета, РезультатЧтения); + МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог).СохранитьФайлОтчета(ИдОтчета, РезультатЧтения); ПутьКОтчету = ОбъединитьПути(Каталог, ИдОтчета); Файлы = НайтиФайлы(ПутьКОтчету, "report.json"); @@ -146,11 +145,11 @@ Каталог = "data"; ХранилищеДанных = Новый ФайловоеХранилище(Каталог); - ХранилищеДанных.УстановитьИдЗадачиВТрекере("68359124-56e5-93aa-cd94-9531aa526f4", "12345"); + ХранилищеДанных.УстановитьИдЗадачиВТрекере("B07F49C8154BA4E20BA3FAAD30507F25", "12345"); Ошибки = ХранилищеДанных.ПолучитьОшибки(); - Ожидаем.Что(Ошибки.Колонки.Количество()).Равно(4); + Ожидаем.Что(Ошибки.Колонки.Количество()).Равно(3); Ожидаем.Что(Ошибки.Количество()).Равно(2); Ошибка = Ошибки[1]; From 9adebf92855c778a5eef739ecc40e405d4238263 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 8 Feb 2022 15:43:06 +0300 Subject: [PATCH 07/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...320\236\321\210\320\270\320\261\320\276\320\272Jira.os" | 7 ++++++- ...260\320\275\320\270\320\273\320\270\321\211\320\265.os" | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" index 203658f..126f619 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" @@ -29,13 +29,18 @@ .Логин("login") .Токен("APIKey") .КлючПроекта("project-id") - .ИдТипаЗадачи("1"); + .ИдТипаЗадачи("1") + .СрокИсполнения(2) + ; ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); Результат = ПровайдерИнтеграцииJira.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); + СрокИсполнения = СтрШаблон ("""duedate"": ""%1"",", ЗаписатьДатуJSON (ТекущаяДата () + 24 * 3600 * 2)); + Результат = СтрЗаменить (Результат, СрокИсполнения, ""); + КаталогСценария = ТекущийСценарий().Каталог; ЧтениеТекста = Новый ЧтениеТекста("../features/fixtures/requestBodyJira.json", "utf-8"); Эталон = ЧтениеТекста.Прочитать(); diff --git "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index 281be59..99da046 100644 --- "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -147,7 +147,7 @@ ХранилищеДанных.УстановитьИдЗадачиВТрекере("B07F49C8154BA4E20BA3FAAD30507F25", "12345"); - Ошибки = ХранилищеДанных.ПолучитьОшибки(); + Ошибки = ХранилищеДанных.ПрочитатьОшибки(); Ожидаем.Что(Ошибки.Колонки.Количество()).Равно(3); Ожидаем.Что(Ошибки.Количество()).Равно(2); From 2fe70fef9ab1e083ae2fcbbabedd52c765d11e55 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 8 Feb 2022 15:51:28 +0300 Subject: [PATCH 08/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...17\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" | 1 - ...\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" | 4 ++++ ...20\260\320\275\320\270\320\273\320\270\321\211\320\265.os" | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" index 126f619..1ca4ffd 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" @@ -35,7 +35,6 @@ ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); - Результат = ПровайдерИнтеграцииJira.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); СрокИсполнения = СтрШаблон ("""duedate"": ""%1"",", ЗаписатьДатуJSON (ТекущаяДата () + 24 * 3600 * 2)); diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" index bad5d82..f5ef19d 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" @@ -32,6 +32,8 @@ ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); + + ДанныеОтчетаОбОшибке.Вставить ("Идентификатор", "61001a5e-09d5-47b8-bf19-e7672eda10e5"); Результат = ПровайдерИнтеграцииSentry.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); @@ -54,6 +56,8 @@ ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") .ПолучитьДанныеОтчетаОбОшибке ("55555555-09d5-47b8-bf19-e7672eda1111"); + ДанныеОтчетаОбОшибке.Вставить ("Идентификатор", "61001a5e-09d5-47b8-bf19-e7672eda10e5"); + Результат = ПровайдерИнтеграцииSentry.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); КаталогСценария = ТекущийСценарий().Каталог; diff --git "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index 99da046..e6c8f89 100644 --- "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -147,7 +147,7 @@ ХранилищеДанных.УстановитьИдЗадачиВТрекере("B07F49C8154BA4E20BA3FAAD30507F25", "12345"); - Ошибки = ХранилищеДанных.ПрочитатьОшибки(); + Ошибки = МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог).ПолучитьОшибки(); Ожидаем.Что(Ошибки.Колонки.Количество()).Равно(3); Ожидаем.Что(Ошибки.Количество()).Равно(2); From 13dff38319af86b94d5f24d21eb5d8ab4bb26b71 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 8 Feb 2022 16:04:15 +0300 Subject: [PATCH 09/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...17\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" index f5ef19d..6dedbde 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Sentry.os" @@ -56,7 +56,7 @@ ДанныеОтчетаОбОшибке = МенеджерХранилищаОшибок.Инициализировать (Неопределено, "../features/fixtures/data") .ПолучитьДанныеОтчетаОбОшибке ("55555555-09d5-47b8-bf19-e7672eda1111"); - ДанныеОтчетаОбОшибке.Вставить ("Идентификатор", "61001a5e-09d5-47b8-bf19-e7672eda10e5"); + ДанныеОтчетаОбОшибке.Вставить ("Идентификатор", "55555555-09d5-47b8-bf19-e7672eda1111"); Результат = ПровайдерИнтеграцииSentry.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); From 0042fbe9f30ae25f3804ef178b4a84df48a1f9d1 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 8 Feb 2022 16:28:21 +0300 Subject: [PATCH 10/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC?= =?UTF-8?q?=20Jira?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" index 1ca4ffd..fc229fa 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" @@ -37,7 +37,11 @@ .ПолучитьДанныеОтчетаОбОшибке ("61001a5e-09d5-47b8-bf19-e7672eda10e5"); Результат = ПровайдерИнтеграцииJira.СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке); - СрокИсполнения = СтрШаблон ("""duedate"": ""%1"",", ЗаписатьДатуJSON (ТекущаяДата () + 24 * 3600 * 2)); + СрокИсполнения = ТекущаяДата () + 24 * 3600 * 2; + ПарсерJSON = Новый ПарсерJSON(); + СрокИсполненияJSON = ПарсерJSON.ЗаписатьJSON(СрокИсполнения); + + СрокИсполнения = СтрШаблон ("""duedate"": %1,", СрокИсполненияJSON); Результат = СтрЗаменить (Результат, СрокИсполнения, ""); КаталогСценария = ТекущийСценарий().Каталог; From 281f96f5bba47969be55c0f8412216e613662a27 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 8 Feb 2022 16:31:23 +0300 Subject: [PATCH 11/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC?= =?UTF-8?q?=20Jira?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" index fc229fa..07b970c 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" @@ -41,7 +41,7 @@ ПарсерJSON = Новый ПарсерJSON(); СрокИсполненияJSON = ПарсерJSON.ЗаписатьJSON(СрокИсполнения); - СрокИсполнения = СтрШаблон ("""duedate"": %1,", СрокИсполненияJSON); + СрокИсполнения = СтрШаблон ("""duedate"": %1,%2", СрокИсполненияJSON, Символы.ПС); Результат = СтрЗаменить (Результат, СрокИсполнения, ""); КаталогСценария = ТекущийСценарий().Каталог; From aab94422e0943e7b0b1a492aa598ff9299a9f285 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 8 Feb 2022 16:36:12 +0300 Subject: [PATCH 12/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=B0=D0=B2=D1=82=D0=BE=D1=82=D0=B5=D1=81=D1=82=D0=B0=D0=BC?= =?UTF-8?q?=20Jira?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- features/fixtures/requestBodyJira.json | 1 + ...\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/features/fixtures/requestBodyJira.json b/features/fixtures/requestBodyJira.json index 9f1a5cc..1f9bc88 100644 --- a/features/fixtures/requestBodyJira.json +++ b/features/fixtures/requestBodyJira.json @@ -7,6 +7,7 @@ "id": "1" }, "summary": "", + "description": "Ошибка зарегистрирована автоматически с помощью механизмов платформы 1С 8.3.17+\n======================\nДата: 2020-10-31T19:05:43+03:00\nИнформационнаяБаза: Не предоставляется платформой\nИмяКонфигурации: УправлениеПредприятием\nВерсияКонфигурации: 1.0.1.529\nПлатформаКлиент: Windows_x86_64\nВерсияПлатформы1С: 8.3.17.1549\nСУБД: MSSQLServer\nСтек: ВнешняяОбработка.Ошибка.Форма.Форма.Форма\n4\n\tСистемаВзаимодействия.ВыполнитьРегистрациюИнформационнойБазы(Неопределено);\nОшибки: {ВнешняяОбработка.Ошибка.Форма.Форма.Форма(4)}: Метод объекта не обнаружен (ВыполнитьРегистрациюИнформационнойБазы)\nScriptRuntimeError\nScriptUseError" } } \ No newline at end of file diff --git "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" index 07b970c..fc229fa 100644 --- "a/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" +++ "b/tests/\320\240\320\265\320\263\320\270\321\201\321\202\321\200\320\260\321\206\320\270\321\217\320\236\321\210\320\270\320\261\320\276\320\272Jira.os" @@ -41,7 +41,7 @@ ПарсерJSON = Новый ПарсерJSON(); СрокИсполненияJSON = ПарсерJSON.ЗаписатьJSON(СрокИсполнения); - СрокИсполнения = СтрШаблон ("""duedate"": %1,%2", СрокИсполненияJSON, Символы.ПС); + СрокИсполнения = СтрШаблон ("""duedate"": %1,", СрокИсполненияJSON); Результат = СтрЗаменить (Результат, СрокИсполнения, ""); КаталогСценария = ТекущийСценарий().Каталог; From 5a6eae67ff364fc4704581885223b44889d10fe5 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Mon, 21 Feb 2022 18:54:33 +0300 Subject: [PATCH 13/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B8=20=D1=81=20=D0=BF=D0=BE=D0=B2=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=BD=D0=BE=D0=B9=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BA=D0=BE=D0=B9=20=D1=81=D1=83=D1=89.=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...275\320\270\320\273\320\270\321\211\320\265.os" | 12 +++++++----- ...224\320\260\320\275\320\275\321\213\321\205.os" | 4 +++- ...236\321\210\320\270\320\261\320\276\320\272.os" | 14 ++++++++++++-- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index b2410be..aafb4d7 100644 --- "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -113,9 +113,13 @@ Отчет = ДанныеОтчетаОбОшибке.Отчет; - нСтр = Ошибки.Добавить(); - нСтр.datetime = Отчет["time"]; - нСтр.fingerprint = ДанныеОтчетаОбОшибке.Идентификатор; + СтрокаОшибки = Ошибки.Найти (ДанныеОтчетаОбОшибке.Идентификатор, "fingerprint"); + Если СтрокаОшибки = Неопределено Тогда + СтрокаОшибки.Добавить (); + СтрокаОшибки.fingerprint = ДанныеОтчетаОбОшибке.Идентификатор; + КонецЕсли; + + СтрокаОшибки.datetime = Отчет["time"]; Текст = Новый ЗаписьТекста(ИмяФайлаОшибки); ПарсерJSON = Новый ПарсерJSON; @@ -126,8 +130,6 @@ Процедура УстановитьИдЗадачиВТрекере(ИдентификаторЗадачи, ИдЗадачиВТрекере) Экспорт - Ид = Неопределено; - Ошибки = МенеджерХранилищаОшибок.ПолучитьОшибки(); СтруктураОтбора = Новый Структура("fingerprint", ИдентификаторЗадачи); diff --git "a/src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" "b/src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" index 1ac7041..2814232 100644 --- "a/src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" +++ "b/src/model/classes/\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265\320\221\320\260\320\267\321\213\320\224\320\260\320\275\320\275\321\213\321\205.os" @@ -53,9 +53,11 @@ ДанныеОбОшибке = ХранилищеДанныхОбОшибках.СоздатьЭлемент (); ДанныеОбОшибке.fingerprint = ДанныеОтчетаОбОшибке.Идентификатор; + ДанныеОбОшибке.Прочитать (); + ДанныеОбОшибке.datetime = ПрочитатьДатуJSON (Отчет ["time"], ФорматДатыJSON.ISO); - ХранилищеДанныхОбОшибках.Сохранить (ДанныеОбОшибке); + ДанныеОбОшибке.Сохранить (); КонецПроцедуры diff --git "a/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" "b/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" index 5d97086..3fbc389 100644 --- "a/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" +++ "b/src/model/modules/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\236\321\210\320\270\320\261\320\276\320\272.os" @@ -68,7 +68,7 @@ Возврат Результат; КонецЕсли; - Для Каждого Ошибка Из ХранилищеДанных.ПрочитатьОшибки () Цикл + Для Каждого Ошибка Из ХранилищеДанных.ПрочитатьОшибки () Цикл нСтр = Результат.Добавить(); ЗаполнитьЗначенияСвойств(нСтр, Ошибка); КонецЦикла; @@ -240,10 +240,20 @@ НайденныеФайлы = НайтиФайлы (Источник, "*.*"); Для Каждого Файл Из НайденныеФайлы Цикл + Если Файл.ЭтоКаталог () Тогда Продолжить; КонецЕсли; - ПереместитьФайл (Файл.ПолноеИмя, ОбъединитьПути (Приемник, Файл.Имя)); + + ИмяФайлаПриемника = ОбъединитьПути (Приемник, Файл.Имя); + + ФайлПриемника = Новый Файл (ИмяФайлаПриемника); + Если ФайлПриемника.Существует () Тогда + УдалитьФайлы (ИмяФайлаПриемника); + КонецЕсли; + + ПереместитьФайл (Файл.ПолноеИмя, ИмяФайлаПриемника); + КонецЦикла; УдалитьФайлы (Источник); From c1f9768f34ccfffda2b2a9df6b90634dfd4e9bf4 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Mon, 21 Feb 2022 18:55:55 +0300 Subject: [PATCH 14/17] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D1=81=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80=D0=BD=D0=BE=D0=B9=20=D0=BE?= =?UTF-8?q?=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=BE=D0=B9=20=D1=81=D1=83?= =?UTF-8?q?=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B5=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report.json | 64 ++++++++++++++++++ .../screenshot.png | Bin 0 -> 1656 bytes features/fixtures/data/errors.json | 5 ++ ...getInfoDuplicateRequestWithoutIssueID.json | 13 ++++ ...20\261\320\272\320\260_20220220230255.zip" | Bin 0 -> 1931 bytes ...321\200\320\276\321\201\320\260GetInfo.os" | 23 +++++++ ...20\270\320\273\320\270\321\211\320\265.os" | 30 ++++++-- 7 files changed, 131 insertions(+), 4 deletions(-) create mode 100644 features/fixtures/data/C0627D8FFA4A06A33D3BD77BAAED5667/report.json create mode 100644 features/fixtures/data/C0627D8FFA4A06A33D3BD77BAAED5667/screenshot.png create mode 100644 features/fixtures/getInfoDuplicateRequestWithoutIssueID.json create mode 100644 "features/fixtures/\320\236\321\210\320\270\320\261\320\272\320\260_20220220230255.zip" diff --git a/features/fixtures/data/C0627D8FFA4A06A33D3BD77BAAED5667/report.json b/features/fixtures/data/C0627D8FFA4A06A33D3BD77BAAED5667/report.json new file mode 100644 index 0000000..fce85f0 --- /dev/null +++ b/features/fixtures/data/C0627D8FFA4A06A33D3BD77BAAED5667/report.json @@ -0,0 +1,64 @@ +{ + "time": "2022-02-18T14:03:22+03:00", + "clientInfo": { + "platformType": "Windows_x86_64", + "appVersion": "8.3.18.1520", + "appName": "1CV8C", + "systemInfo": { + "osVersion": "Microsoft Windows 10 version 10.0 (Build 18363)", + "fullRAM": 8436940800, + "freeRAM": 1116553216, + "processor": "GenuineIntel Intel64 Family 6 Model 142 Stepping 10 1992 MHz", + "clientID": "fbc6d6a7-2fc2-4090-85a0-d07c8164be1a" + } + }, + "sessionInfo": { + "userName": "", + "dataSeparation": "", + "platformInterfaceLanguageCode": "ru", + "configurationInterfaceLanguageCode": "ru", + "localeCode": "ru_RU" + }, + "infoBaseInfo": { + "localeCode": "ru_RU" + }, + "serverInfo": { + "appVersion": "8.3.18.1520", + "type": "Windows_x86_64", + "dbms": "DBEng8" + }, + "configInfo": { + "name": "Конфигурация", + "description": "Конфигурация", + "version": "", + "compatibilityMode": "Version8_3_18", + "hash": "c49e4e6a81e7b0498773e04832af85c700000000", + "changeEnabled": true + }, + "errorInfo": { + "systemErrorInfo": { + "clientStack": "core83.dll:0x00000000000D6D06 vrscore.dll:0x00000000000B367E mngui.dll:0x00000000000BDF2C mngui.dll:0x00000000003B38DD mngui.dll:0x00000000003BB4A9 mngui.dll:0x00000000003B0AAC mngcln.dll:0x00000000000EFCED frame.dll:0x0000000000898475 frame.dll:0x0000000000898B64 frame.dll:0x0000000000879524 frame.dll:0x000000000087B28A frame.dll:0x000000000095E74A frame.dll:0x000000000089E099 frame.dll:0x0000000000042F8B frame.dll:0x0000000000318839 frame.dll:0x000000000031A08B frame.dll:0x00000000003190BD frame.dll:0x000000000031D719 frame.dll:0x0000000000323C56 frame.dll:0x000000000031796B frame.dll:0x000000000031823B wbase83.dll:0x00000000000371C0 wbase83.dll:0x0000000000018637 wbase83.dll:0x00000000000181F2 wbase83.dll:0x00000000000179DF wbase83.dll:0x0000000000017694 wbase83.dll:0x0000000000008C94 wbase83.dll:0x0000000000008E3B frame.dll:0x0000000000710331 frame.dll:0x000000000070DB96 mngcln.dll:0x00000000000B70AF mngcln.dll:0x00000000000B695B 1cv8c.exe:0x000000000000D239 1cv8c.exe:0x000000000001164B core83.dll:0x000000000021E480 core83.dll:0x0000000000220918 1cv8c.exe:0x000000000001121C 1cv8c.exe:0x00000000000BE31E KERNEL32.DLL:0x0000000000000000 ntdll.dll:0x0000000000000000 ", + "clientStackHash": "D97CA0D063AA8E9ED6637A0AF0F0A8A2", + "serverStack": "core83.dll:0x00000000000D6296 bsl.dll:0x000000000001706E bsl.dll:0x00000000000204E0 backend.dll:0x0000000000409CF9 mngbase.dll:0x000000000064C8B7 mngbase.dll:0x000000000064CCB0 mngbase.dll:0x00000000006444ED mngbase.dll:0x00000000005283AB mngbase.dll:0x000000000052659C vrsbase.dll:0x00000000000B3D5D vrsbase.dll:0x00000000000B25F6 vrsbase.dll:0x00000000000C653E vrsbase.dll:0x000000000006A2C5 vrsbase.dll:0x000000000003839E vrsbase.dll:0x0000000000071513 vrsbase.dll:0x0000000000067CB9 vrsbase.dll:0x000000000007177E vrsbase.dll:0x0000000000072207 vrscore.dll:0x000000000007CAA7 vrscore.dll:0x000000000008758C vrscore.dll:0x00000000000A2435 vrscore.dll:0x000000000007214D vrscore.dll:0x00000000000A962D frame.dll:0x000000000003E07D vrscore.dll:0x00000000000A8B20 vrscore.dll:0x00000000000A9B34 vrscore.dll:0x00000000000ABF1F vrscore.dll:0x00000000000C58B1 mngui.dll:0x00000000003B386C mngui.dll:0x00000000003BB4A9 mngui.dll:0x00000000003B0AAC mngcln.dll:0x00000000000EFCED frame.dll:0x0000000000898475 frame.dll:0x0000000000898B64 frame.dll:0x0000000000879524 frame.dll:0x000000000087B28A frame.dll:0x000000000095E74A frame.dll:0x000000000089E099 frame.dll:0x0000000000042F8B frame.dll:0x0000000000318839 frame.dll:0x000000000031A08B frame.dll:0x00000000003190BD frame.dll:0x000000000031D719 frame.dll:0x0000000000323C56 frame.dll:0x000000000031796B frame.dll:0x000000000031823B wbase83.dll:0x00000000000371C0 wbase83.dll:0x0000000000018637 wbase83.dll:0x00000000000181F2 wbase83.dll:0x00000000000179DF wbase83.dll:0x0000000000017694 wbase83.dll:0x0000000000008C94 wbase83.dll:0x0000000000008E3B frame.dll:0x0000000000710331 frame.dll:0x000000000070DB96 mngcln.dll:0x00000000000B70AF mngcln.dll:0x00000000000B695B 1cv8c.exe:0x000000000000D239 1cv8c.exe:0x000000000001164B core83.dll:0x000000000021E480 core83.dll:0x0000000000220918 1cv8c.exe:0x000000000001121C 1cv8c.exe:0x00000000000BE31E KERNEL32.DLL:0x0000000000000000 ntdll.dll:0x0000000000000000 ", + "serverStackHash": "514CD1397EC2D7D33D127A5F243C337E" + }, + "applicationErrorInfo": { + "errors": [ + [ + "Ошибка инициализации модуля: ВнешняяОбработка.Ошибка.Форма.Форма.Форма", + [] + ], + [ + "{ВнешняяОбработка.Ошибка.Форма.Форма.Форма(10,2)}: Переменная не определена (НаборыВызовСервера)", + [ + "ScriptCompileError" + ] + ] + ], + "stackHash": "84A1E9821497E377D0E1FB27C47CA522" + } + }, + "screenshot": { + "file": "screenshot.png" + } +} \ No newline at end of file diff --git a/features/fixtures/data/C0627D8FFA4A06A33D3BD77BAAED5667/screenshot.png b/features/fixtures/data/C0627D8FFA4A06A33D3BD77BAAED5667/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..3228808171f26fdff27000177db14810c80a6625 GIT binary patch literal 1656 zcmeAS@N?(olHy`uVBq!ia0y~yU!lvI6;>1s;*b3=BdgAk26#O}>JGfsNPG#WAEJ?(MaWj12}n2R2;zU(ePS zC$Rp~Bk@0b_A@dhyuHK3upwmy1A~$?D}#Wf7DK~{07eFvHZBGQBcS~g7cwz)@Q5-v sj4Bxom(j#9nn^}WhM`&8x^u}Hezfa)WiFlNO7hVkBuT>G^X!^aMYv*aQJ)oppA|gw* z!c=7YG)2;!8kN!WhSfd?9A;ZO))y5WqN(ypW(;O(foj7JYh-r@;bLv3TeA2e? zi5rk;^t~~-&Brr#vl~Gbm@bUX@~DBjXIo-Ds?rhb{`!_W)O|zZta=an_MkX5Ny^Vc zF3Jsm0JvK02BWO!VB_>SWCs~njL%bUj(@mspORM?`502NRsb}53+c(JypV~>H1v`G zEIuas`M!+%fGBQ;Szd2Ht42F2?#5GPn#}&@Uch9oqymdDWMS35Ixgn@ZcG`izHtni ztJzwWBHB4EG>FKlyl0wJn~=LeGUZR6KTUTs#@;eU30XFXJC|8CWW}6AxWkn;QLY6_ z<2w0HIbJm?p5Go{83q3<<-s-h{G@qECVxq%*oTBoUqZCWiIhg#bIaC)$%^V4v<1~) z+N?N0YhL#ns*zU*m%9*z(u0mV80Owhnv3xUgChM((a+0_%lrKNlx?v)}^%hj|G zmzJ+y+2O42vZ#=*l@ogFEo_Xm@Gfy#(n$azU>-Y+M1k)ni#*rn{Js%6XmLW2h z3c?B(k_*CWcf^j!Q*dx;H@=%_|1XTRlYJMb!J%|=XUe^y4ii!_gB2vA-6t)&)>oGp zQ}6eCv1Fl{18bpYsCi~L;fZ7)&sx5Zm~!CL@kyNW7URy;GabgAUO{Hba6@|Vj}fbS zu6K3W@z4DplcL@v9>;Thdu)HLZm@-fY{OJ0KgBd7ES%Zr?;Fm>xA&f^9BDSql3(US zIRr4FqN`OLn}d<3QC%0ATVH0|>p0A<8(kq9OI_(A%)as2ZjAn_PyLKM zYvxpW>M*CzD^DSA_p4q9WfT$l85a4wNM^A!(f5-G3YF??|7bc#ApgtQE#{}_cdxWp zEViz)H?ixaEjdG?$*Rj%Y{0w=$*3bb+j>vu)%C)<>EtgcJ8Y9`Oh&u+d8Fh-2E*lO zN>)6^I5;V}q9}H7fMVKu)fk~G*tS_>MaAUH9PwydzNzxQrez}=f?v3CAlvhN{fWc> zytNeU;(Y1UFy=VdQ{}i2<$~lF79NTV3=YL1$={JXG{5$yWMm!n(g-|MXtmW3ii zj|hlM@HZQ(Jwn>``i#?xHoh4}YepTQWTNt_J3zm}n(X*mJ(Me<`4nGrq7{ zbYm;C(bF2L4+0!*)zAra-qN7ig#ihw>gKILr1ZeXa{Q=oB^?f*%tXZWTQ;?2BhT@~ zEFfiGPXV=#u6O4PoFOFMq?kG73 zfc71yjq*t_&!5w@dcmhNH8&n&^_r3;_g$BE>}Vy*IykrnhpQnE2nziF4aL;~-~mn^ zCT{#?U;UN%Px2pL|AXkwU3h;V#v#{;`{+L_u6Ri0#z`*94!M8RU+B-z@BlEN*HJR% fhyDqk|7LRURPtf%fZ^xP4gh$$hr!LX|5X15#Qa|+ literal 0 HcmV?d00001 diff --git "a/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\227\320\260\320\277\321\200\320\276\321\201\320\260GetInfo.os" "b/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\227\320\260\320\277\321\200\320\276\321\201\320\260GetInfo.os" index 86689ea..381250a 100644 --- "a/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\227\320\260\320\277\321\200\320\276\321\201\320\260GetInfo.os" +++ "b/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\227\320\260\320\277\321\200\320\276\321\201\320\260GetInfo.os" @@ -10,6 +10,7 @@ ВсеТесты.Добавить("ТестДолжен_ОбработатьЗапросGetInfo"); ВсеТесты.Добавить("ТестДолжен_ОбработатьУжеЗарегистрированнуюОшибку"); + ВсеТесты.Добавить("ТестДолжен_ОбработатьУжеЗарегистрированнуюОшибкуБезИдЗадачи"); Возврат ВсеТесты; @@ -69,3 +70,25 @@ Ожидаем.Что(Результат).Равно(Эталон); КонецПроцедуры + +Процедура ТестДолжен_ОбработатьУжеЗарегистрированнуюОшибкуБезИдЗадачи() Экспорт + + ЧтениеТекста = Новый ЧтениеТекста("getInfoDuplicateRequestWithoutIssueID.json", "utf-8"); + ТелоЗапросаТекст = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + ЧтениеТекста = Новый ЧтениеТекста("getInfoResponse.json", "utf-8"); + Эталон = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + ФайловоеХранилище = Новый ФайловоеХранилище("./data"); + МенеджерНастроек.УстановитьХранилищеДанных(ФайловоеХранилище); + + ПровайдерИнтеграции = Новый ПровайдерИнтеграцииRedmine(); + МенеджерНастроек.УстановитьПровайдерИнтеграции(ПровайдерИнтеграции); + + Результат = ЗапросыИнфоОбОшибке.ОбработатьЗапрос(ТелоЗапросаТекст); + + Ожидаем.Что(Результат).Равно(Эталон); + +КонецПроцедуры \ No newline at end of file diff --git "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index e6c8f89..029115a 100644 --- "a/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/tests/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -16,6 +16,7 @@ ВсеТесты.Добавить("ТестДолжен_ЗаписатьОшибкуВФайл"); ВсеТесты.Добавить("ТестДолжен_СохранитьФайлОтчета"); ВсеТесты.Добавить("ТестДолжен_УстановитьИдЗадачиВТрекере"); + ВсеТесты.Добавить("ТестДолжен_ОбработатьПовторноеПолучениеОтчетаПоСуществующейОшибке"); Возврат ВсеТесты; @@ -88,7 +89,7 @@ Результат = МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог).ПолучитьОшибки(); Ожидаем.Что(Результат.Колонки.Количество()).Равно(3); - Ожидаем.Что(Результат.Количество()).Равно(2); + Ожидаем.Что(Результат.Количество()).Равно(3); КонецПроцедуры @@ -112,9 +113,9 @@ ХранилищеДанных.ЗаписатьОшибку(ДанныеОтчетаПоОшибке); Результат = МенеджерХранилищаОшибок.ПолучитьОшибки(); - Ожидаем.Что(Результат.Количество()).Равно(3); + Ожидаем.Что(Результат.Количество()).Равно(4); - НоваяОшибка = Результат[2]; + НоваяОшибка = Результат[3]; // Не выполняется на GA Ожидаем.Что(НоваяОшибка["fingerprint"]).Равно(ДанныеОтчетаПоОшибке.Идентификатор); @@ -150,9 +151,30 @@ Ошибки = МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог).ПолучитьОшибки(); Ожидаем.Что(Ошибки.Колонки.Количество()).Равно(3); - Ожидаем.Что(Ошибки.Количество()).Равно(2); + Ожидаем.Что(Ошибки.Количество()).Равно(3); Ошибка = Ошибки[1]; Ожидаем.Что(Ошибка.external_id).Равно("12345"); +КонецПроцедуры + +Процедура ТестДолжен_ОбработатьПовторноеПолучениеОтчетаПоСуществующейОшибке () Экспорт + + Каталог = "data"; + ХранилищеДанных = Новый ФайловоеХранилище(Каталог); + + ЧтениеДанных = Новый ЧтениеДанных("Ошибка_20220220230255.zip", "utf-8"); + РезультатЧтения = ЧтениеДанных.Прочитать(); + ЧтениеДанных.Закрыть(); + + МенеджерХранилищаОшибок.Инициализировать (ХранилищеДанных, Каталог).ОбработатьОтчетОбОшибке (РезультатЧтения); + + Ошибки = МенеджерХранилищаОшибок.ПолучитьОшибки(); + + Ожидаем.Что(Ошибки.Колонки.Количество()).Равно(3); + Ожидаем.Что(Ошибки.Количество()).Равно(3); + + Ошибка = Ошибки[2]; + Ожидаем.Что(Ошибка.datetime).Равно(Дата ("20220220230255")); + КонецПроцедуры \ No newline at end of file From f3e48f3e52614456e566cccf4306aef413f63e8b Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 22 Feb 2022 12:11:00 +0300 Subject: [PATCH 15/17] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=92=D0=BD=D0=B5=D1=88.=20=D0=B8=D0=B4=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B5=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" "b/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" index 30b35f7..8888cc8 100644 --- "a/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" +++ "b/src/model/modules/\320\227\320\260\320\277\321\200\320\276\321\201\321\213\320\230\320\275\321\204\320\276\320\236\320\261\320\236\321\210\320\270\320\261\320\272\320\265.os" @@ -47,7 +47,7 @@ ХранилищеДанных = МенеджерНастроек.ХранилищеДанных(); ИдОшибки = ХранилищеДанных.ИдентификаторОшибкиВТрекереПоОтпечатку(ЗапросИнфоОбОшибке["x_fingerprint"]); - Если ИдОшибки <> Неопределено Тогда + Если ЗначениеЗаполнено (ИдОшибки) Тогда Ответ.Вставить("ОтправлятьОтчет", Ложь); Сообщение = СтрШаблон("Данная ошибка уже была зарегистрирована. Ид: %1", ИдОшибки); Ответ.Вставить("Сообщение", Сообщение); From db37785e05452b4d58b3fdc68af86453709fe781 Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 22 Feb 2022 12:23:09 +0300 Subject: [PATCH 16/17] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B8=D0=BD=D1=82.=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" index aafb4d7..068934f 100644 --- "a/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" +++ "b/src/model/classes/\320\244\320\260\320\271\320\273\320\276\320\262\320\276\320\265\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\265.os" @@ -115,7 +115,7 @@ СтрокаОшибки = Ошибки.Найти (ДанныеОтчетаОбОшибке.Идентификатор, "fingerprint"); Если СтрокаОшибки = Неопределено Тогда - СтрокаОшибки.Добавить (); + СтрокаОшибки = Ошибки.Добавить (); СтрокаОшибки.fingerprint = ДанныеОтчетаОбОшибке.Идентификатор; КонецЕсли; From 97b2b67632feaceb1ef825aaa2c47143a4e2640c Mon Sep 17 00:00:00 2001 From: Shabanov-Oleg Date: Tue, 22 Feb 2022 12:28:50 +0300 Subject: [PATCH 17/17] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=20=D1=81=D0=BE?= =?UTF-8?q?=20=D1=81=D0=BC=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC=20?= =?UTF-8?q?=D0=B2=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=B8=20=D0=B2=20json=20?= =?UTF-8?q?=D1=81=20=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BE=D0=BC=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=82=D0=B5=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\261\320\272\320\260_20220220230255.zip" | Bin 1931 -> 1932 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/features/fixtures/\320\236\321\210\320\270\320\261\320\272\320\260_20220220230255.zip" "b/features/fixtures/\320\236\321\210\320\270\320\261\320\272\320\260_20220220230255.zip" index ed123039c9ab7aa316530481f1e09994c03f773b..124c64a5345ba097462e40ac042676c16b7edf9c 100644 GIT binary patch delta 1295 zcmV+q1@QWd4~!2JP)h>@6aWGM2mpFxR#dARe%CaS6NZ1GErj%2AQdICOv^jzBm>!} z8-sy9OTu!J<<6- zGEb6w_6~no5C&zIfdoPw$)#)w#+aEVC788jmS>SHiY%}Feks#=oXR_CDHE-^GeZl) zX`CEsOxwxEFpLeN?Ur&ji_`r&ENods+qwOui=mrEuQoRsMQqGMzDXt#*)))aHia3Y z%`xJUz|0s)9O|HTyfHYgSD=7EAj8!qm=`i%PGEmKcjK@OcjYY1!?K&Lc6_;5b=dhN zjO2Eh?$5)0=|b4GSUztBqb!}o`}0=+v(iZxg~`h3-o3B&F5DR6bizWe#@izfnZOdR z3V&wrls(&SJen3Y^Bh0j7fTmyYO5~NZtkjIst?uq;)m*8_2=T*;-orT{8+tPoOae^ z5#@jJY&oI*!iOJ2UQXzA29r68lej$E=~C|!6MJ+Ii&pL+EDmZE8J0983k8;ZgbYh? zP9-t~CE-Mv5l7wCSwDc4k$xJE5;+F-GM~#XU76?Er3r1{EB}+><)+*%!|1yvfGn4S z4#!Edg&w1im&ZKBw8Olp1=g`c8TYj*?2~`^3g`vIRY2-c;dx5v7`CN^$hI4^QIf7Z z^#j-Uv`G$&yat6O3~s8S1FyCMa?2!Y=n!Empk?~pP(fk&$g&g=86*&n0#YmlRcTUe zqaIBQRz?Xuj+JH!bxo$! zF%oV+_NgjsjuE9;1(D}iOu3C6j_g29nPoZ}jt)gMl#k^nA$bILh5|yVGaOCvwiE0d z0x2m$78Yv51iLEe_!RrvSN^@b{x&5;Z+rWbkn2lJOK^F`6gTivEp3ji+uhmeS=_Y| z98=V`g>U&DgWY1o^q~OR!X}+&TWf#*!+}R&Sw_Vbfnbi9e>Eb=@R2qG+cF)mVJP!% z(41%WHd@2XaD~JBuG`u5bwIGwo2L2Ri`{)YvtJgL~>dQ~xt?UGLF#y}!7w>-}}TU$5HBdT(OG^)R)# z?-GxDlzNzO+YI1Pbt&b3(>^bMX-MLzX=>LSpr%u*8^&+zKL_o7pjR&zKS7iCvihq! z)8OG8x;*IgsrB%;C@C|65FHRSy)r;z7-6DdO z4~y?>OT$&O!|D$hKLHDh$2NC}>0$Hz@YbaWpZ>qjZeVna+&qRHegmT?)f*Um0}jq1 z)l;qZq(P?tG~_jW-Z%72yHWkxIXzkYTs?=+TabHI{oYu4)!ff+UZhRZehu{9rmJ?L zKaLaGtcu>EF4v8Vg!N)|)rDbW-x5$7Vc{v~9`bSE5bhdKi%mi<{b&;9Ql`a0RxZ2X z2{@~*d?dqJx?lfBuyOn^vs?vG0SS6zR#dARe%CaUwFXWBU6TX{I{~JXKnFzzp#}f| F004$tb%g)` delta 1294 zcmV+p1@Zcf4~q{IP)h>@6aWGM2mm$-Ra92X!PqmA6NZ1m1JZASRFuRrE$^h03}l~f z3B1DO|bmevwtNQYPqu}RPcz8kjQ zvHL){?PzgSlybV_YM^JuikY1_%CjPylv?Lf!$>=9IXn)LrrmJnaWdAhpp4#ZtPb?a zJW1}^J79l77?fEC5(sr9m$D@oV`iF^VAhgZo<*`Kvb^^DrA+5>D(|GFOtj|C3@r$! zadMhHe(U+T3Imu`vtzCYeNJ(?Ay56lRDv z$B0J)Gh-xisDsw=#^AVKfdT@73|E(6UdVhof$e|Xjl(kBm9sDp%Wk&X@#SLGVds-D zlG|arKM(h%3t`t{`Med3vUC#f&s+V^N+($qCM%~oWA$!v+F6rD zl*fOw<%ISNAASsZIib@TOy(#~;__&xOT9}>?9n|eTDgO;IH*x%SkjOz6j<^RGAzM4 zmB4)dZGSjP@!+}EbCPvUmg#dt1%>4!%ThpOkU%&JNU;!9rAe`k zdNeIq871^MR+=T$HJMVATdXHqLLKeV2#$uUb{XZ^MQV%%qr4B}fb?K)c|jkBvY>y) zNVxsjr>d+uMwDU|M4n?YA}pj-1>mO62k%SnO+YjX28_gWhV92nAyZN z)tJHw*Q3p`iD{27v_p*^>;yPaW7iZ8?y2`o{m;O4y+_ye{^Gi>_t*7)y=pJ(y@?Ii!_?xw zOFZsT>S4ldGk`aXfd zgNJkI@}SeJ&Z_rtf7|wb)jNN!`WqU;*NbP>`^D*&Ry_y7H=udGI9;4pFRGVyiwIUe zEWWQT4Oh($t3P1;1S}{X+uR|hht2oHTbCky`u{q+fzd5;^B8jY4UC>tZ(#5ZI5>w? zPqo^U2ATfTkk{~e-_SGdM)hmw^kngK^&CELLGD%cdt>EQb3eOzkxESaHPCmPuG)qE zI8J1
id datetime fingerprint external_id
@row.id @row.datetime @row.fingerprint @row.external_id