Skip to content

Commit

Permalink
Merge branch 'feature/duplicate-errors-clean' into develop
Browse files Browse the repository at this point in the history
  • Loading branch information
ovcharenko-di committed Dec 2, 2020
2 parents d05cde2 + df6616b commit 6b31a15
Show file tree
Hide file tree
Showing 30 changed files with 558 additions and 312 deletions.
2 changes: 1 addition & 1 deletion .bsl-language-server.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"parameters": {
"Typo": {
"minWordLength": 3,
"userWordsToIgnore": "Логгер"
"userWordsToIgnore": "Логгер,Трекеры"
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
- Сохранение запросов информации об ошибках, которые направляет клиентское приложение.
- Распаковка поступающих отчетов об ошибках.
- Автоматическая регистрация ошибок в баг-трекере (Jira, Redmine).
- Отображение Ид задачи из баг-трекера прямо в окне 1С, если такая ошибка уже была зарегистрирована там ранее.
- Запрет повторной регистрации одной и той же ошибки.
- Отправка сообщений с информацией об ошибке в точку обмена RabbitMQ.
- Отправка сообщений с информацией об ошибке в Sentry.

Expand All @@ -40,7 +42,7 @@
- перейти в каталог проекта в командной строке
- выполнить команду `'docker build -t <tag> .'`, где:
- `<tag>` - метка образа, задается произвольно
- выполнить команду `'docker run --name <name> -v <localPath>:<dockerPath> -p <port>:5000 <tag>'`, где:
- выполнить команду `'docker run -d --name <name> -v <localPath>:<dockerPath> -p <port>:5000 <tag>'`, где:
- `<name>` - имя контейнера, задается произвольно
- `<localPath>` - локальный каталог, в котором будут храниться данные приложения
- `<dockerPath>` - каталог внутри контейнера, в который изначально записываются данные приложения (устанавливается в `appsettings.json`)
Expand Down Expand Up @@ -94,7 +96,6 @@ URL, по которому доступно приложение, надо ук

## Ограничения

- на данный момент приложение не умеет гибко управлять процессом регистрации ошибок. Например, на любой запрос о регистрации ошибки приложение отвечает, что ее **необходимо** регистрировать. Это значит, что если 10 пользователей столкнутся с одной и той же ошибкой, то в вашем баг-трекере может появиться 10 тикетов.
- ошибки регистрируются в баг-трекере от имени владельца API-ключа, а не от лица пользователя информационной базы.
- веб-интерфейс пока почти полностью состоит из заглушек.
- какие-либо ограничения доступа на уровне веб-приложения отсутствуют. Любой, кто сможет открыть веб-интерфейс, сможет просматривать всю информацию.
Expand All @@ -108,7 +109,6 @@ URL, по которому доступно приложение, надо ук
- поддержка СППР ред. 1 и 2 в качестве баг-трекера
- гибкая настройка параметров регистрации ошибок
- определение необходимости регистрации ошибки
- определение "дублей" ошибок
- кастомизация сообщения, которое выводится пользователю
- перевод приложения на библиотеку [entity](https://github.com/oscript-library/entity)
- поддержка хранения данных во внешней БД
Expand Down
15 changes: 9 additions & 6 deletions features/fixtures/data/errorInfoRequests.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
[
{
"id": "7054dd5d-f0b8-491d-8dcc-18bc1d2cbc83",
"datetime": "2020-10-05T21:58:45Z",
"x_id": "7054dd5d-f0b8-491d-8dcc-18bc1d2cbc83",
"x_datetime": "2020-10-05T21:58:45Z",
"x_fingerprint": "1111-2222-33333333-4444",
"configHash": "bd56b503adfc454b9fc84d7b0fea3e7900000000",
"сonfigName": "Config1",
"configVersion": "1.0.1.265",
Expand All @@ -15,8 +16,9 @@
"systemcrash": ""
},
{
"id": "b4fe5366-193b-4f4b-8609-6a727b316ca5",
"datetime": "2020-10-06T11:20:33Z",
"x_id": "b4fe5366-193b-4f4b-8609-6a727b316ca5",
"x_datetime": "2020-10-06T11:20:33Z",
"x_fingerprint": "1111-2222-33333333-5555",
"configHash": "ac83b503adfc454b9fc84d7b0fea3e7900000000",
"сonfigName": "Config2",
"configVersion": "1.0.1.265",
Expand All @@ -30,8 +32,9 @@
"systemcrash": ""
},
{
"id": "2ac96a47-156b-40cf-8403-ea4e0287deba",
"datetime": "2020-10-06T11:29:17Z",
"x_id": "2ac96a47-156b-40cf-8403-ea4e0287deba",
"x_datetime": "2020-10-06T11:29:17Z",
"x_fingerprint": "1111-2222-33333333-6666",
"configHash": "or96e421adfc454b9fc84d7b0fea3e7900000000",
"сonfigName": "Config3",
"configVersion": "1.0.1.265",
Expand Down
10 changes: 9 additions & 1 deletion features/fixtures/data/errors.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
[
{
"id": "61001a5e-09d5-47b8-bf19-e7672eda10e5",
"datetime": "2020-10-05T21:58:45Z"
"datetime": "2020-10-05T21:58:45Z",
"fingerprint": "C0627D8FFA4A06A33D3BD77BAAED5667",
"external_id": "11331"
},
{
"id": "68359124-56e5-93aa-cd94-9531aa526f4",
"datetime": "2020-10-08T12:03:54Z",
"fingerprint": "B07F49C8154BA4E20BA3FAAD30507F25",
"external_id": ""
}
]
13 changes: 13 additions & 0 deletions features/fixtures/getInfoDuplicateRequest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"configHash": "ac83b503adfc454b9fc84d7b0fea3e7900000000",
"сonfigName": "Config2",
"configVersion": "1.0.1.265",
"appStackHash": "5E78AD0E93E8D3963841DFD479A597EF",
"clientStackHash": "84A1E9821497E377D0E1FB27C47CA522",
"serverStackHash": "",
"platformType": "Windows_x86_64",
"appName": "1CV8C",
"appVersion": "8.3.17.1549",
"configurationInterfaceLanguageCode": "ru",
"systemcrash": ""
}
5 changes: 5 additions & 0 deletions features/fixtures/getInfoDuplicateResponse.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"needSendReport": false,
"userMessage": "Данная ошибка уже была зарегистрирована. Ид: 11331",
"dumpType": "0"
}
File renamed without changes.
5 changes: 5 additions & 0 deletions features/fixtures/getInfoResponse.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"needSendReport": true,
"userMessage": "Отчет об ошибке будет отправлен автоматически.",
"dumpType": "0"
}
5 changes: 0 additions & 5 deletions features/fixtures/responseBodyGetInfo.json

This file was deleted.

Binary file added features/fixtures/Ошибка_20201123003806.zip
Binary file not shown.
4 changes: 2 additions & 2 deletions src/controllers/errorInfoRequests.os
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
&HttpMethod("GET")
Функция Index() Экспорт

ТаблицаЗапросовИнформацииОбОшибке = ЗапросыИнфоОбОшибке.ПолучитьСписок();
Возврат Представление(ТаблицаЗапросовИнформацииОбОшибке);
ЗапросыИнформацииОбОшибке = ЗапросыИнфоОбОшибке.ПолучитьСписок();
Возврат Представление(ЗапросыИнформацииОбОшибке);

КонецФункции

Expand Down
4 changes: 2 additions & 2 deletions src/controllers/errorReports.os
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
&HttpMethod("GET")
Функция Index() Экспорт

ТаблицаОшибок = ЗарегистрированныеОшибки.ПолучитьСписок();
Возврат Представление(ТаблицаОшибок);
СписокОтчетовОбОшибках = ОтчетыОбОшибках.ПолучитьСписок();
Возврат Представление(СписокОтчетовОбОшибках);

КонецФункции

Expand Down
9 changes: 1 addition & 8 deletions src/controllers/getInfo.os
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#использовать json

&HttpMethod("POST")
Функция Index() Экспорт

Expand All @@ -9,12 +7,7 @@
ТелоЗапросаТекст = ЧтениеТекста.Прочитать();
ЧтениеТекста.Закрыть();

ПарсерJSON = Новый ПарсерJSON;
ЗапросИнфоОбОшибке = ПарсерJSON.ПрочитатьJSON(ТелоЗапросаТекст);

ЗапросыИнфоОбОшибке.Записать(ЗапросИнфоОбОшибке);

Ответ = ЗапросыИнфоОбОшибке.СформироватьОтвет(ЗапросИнфоОбОшибке);
Ответ = ЗапросыИнфоОбОшибке.ОбработатьЗапрос(ТелоЗапросаТекст);

Возврат Содержимое(Ответ);

Expand Down
8 changes: 4 additions & 4 deletions src/controllers/pushReport.os
Original file line number Diff line number Diff line change
Expand Up @@ -7,21 +7,21 @@
ДанныеФормы = ЗапросHttp.ДанныеФормы;

Если ДанныеФормы = Неопределено Тогда
Возврат КодСостояния(200);
Возврат КодСостояния(400);
КонецЕсли;

ФайлыЗапроса = ДанныеФормы.Файлы;

Если ФайлыЗапроса = Неопределено Тогда
Возврат КодСостояния(200);
Возврат КодСостояния(400);
КонецЕсли;

Если ФайлыЗапроса.Количество() <> 1 Тогда
ВызватьИсключение("Количество файлов не равно одному");
Возврат КодСостояния(400);
КонецЕсли;

Попытка
ОбработкаОшибок.ОбработатьОтчетОбОшибке(ФайлыЗапроса[0]);
ОтчетыОбОшибках.ОбработатьОтчетОбОшибке(ФайлыЗапроса[0]);
Возврат КодСостояния(200);
Исключение
Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Expand Down
11 changes: 8 additions & 3 deletions src/model/classes/ПровайдерИнтеграцииJira.os
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@

КонецФункции

Процедура ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт
Функция ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт

URLIssues = СтрШаблон("%1/issue", URL);

Expand Down Expand Up @@ -116,8 +116,13 @@
КонецЕсли;

КонецЕсли;

РезультатЗапросаJSON = РезультатЗапроса.JSON();
ИдЗадачиВТрекере = РезультатЗапросаJSON["id"];

КонецПроцедуры
Возврат ИдЗадачиВТрекере;

КонецФункции

Процедура ПрикрепитьФайлКЗадаче(URL, ПрикрепляемыйФайл)

Expand Down Expand Up @@ -157,7 +162,7 @@
Issue.Вставить("issuetype", Новый Структура("id", ИдТипаЗадачи));
Issue.Вставить("summary", ТемаЗадачи);

Описание = ОбработкаОшибок.СформироватьОписаниеОшибки(ДанныеОтчетаОбОшибке);
Описание = ОтчетыОбОшибках.СформироватьОписаниеОшибки(ДанныеОтчетаОбОшибке);
Issue.Вставить("description", Описание);

ТелоЗапросаJSON = Новый Структура;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@

КонецФункции

Процедура ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт
Функция ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт

Соединение = Новый СоединениеRMQ;

Expand All @@ -85,12 +85,15 @@
КонецПопытки;

Соединение.Закрыть();

// Для провайдера RMQ не существует такого понятия как ИдЗадачиВТрекере
Возврат Неопределено;

КонецПроцедуры
КонецФункции

Функция СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке) Экспорт

Описание = ОбработкаОшибок.СформироватьТелоОписанияОшибкиJSON(ДанныеОтчетаОбОшибке);
Описание = ОтчетыОбОшибках.СформироватьТелоОписанияОшибкиJSON(ДанныеОтчетаОбОшибке);

ПарсерJSON = Новый ПарсерJSON();
Возврат ПарсерJSON.ЗаписатьJSON(Описание);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@

КонецФункции

Процедура ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт
Функция ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт

URLIssues = СтрШаблон("%1/issues.json", URLRedmine);

Expand All @@ -108,8 +108,13 @@
Если РезультатЗапроса.КодСостояния <> 201 Тогда
ВызватьИсключение("Не удалось зарегистрировать ошибку Redmine"); // TODO: сделать внятное сообщение
КонецЕсли;

РезультатЗапросаJSON = РезультатЗапроса.JSON();
ИдЗадачиВТрекере = РезультатЗапросаJSON["issue"]["id"];

КонецПроцедуры
Возврат ИдЗадачиВТрекере;

КонецФункции

Функция СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке) Экспорт

Expand All @@ -118,7 +123,7 @@
Issue.Вставить("tracker_id", ИдТрекера);
Issue.Вставить("subject", Тема);

Описание = ОбработкаОшибок.СформироватьОписаниеОшибки(ДанныеОтчетаОбОшибке);
Описание = ОтчетыОбОшибках.СформироватьОписаниеОшибки(ДанныеОтчетаОбОшибке);
Issue.Вставить("description", Описание);
Issue.Вставить("priority_id", ИдПриоритета);
Issue.Вставить("status_id", ИдСтатуса);
Expand Down Expand Up @@ -211,7 +216,7 @@

ПолноеИмяФайла = Файл.ПолноеИмя;

URL = СтрШаблон("%1/uploads.json?filename=", URLRedmine, ПолноеИмяФайла);
URL = СтрШаблон("%1/uploads.json?filename=%2", URLRedmine, ПолноеИмяФайла);
ПрикрепляемыйФайлДД = Новый ДвоичныеДанные(ПолноеИмяФайла);

Заголовки = Новый Соответствие;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@

КонецПроцедуры

Процедура ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт
Функция ЗарегистрироватьОшибку(ДанныеОтчетаОбОшибке) Экспорт

ТелоЗапроса = СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке);

Expand All @@ -67,8 +67,11 @@
Если РезультатЗапроса.КодСостояния <> 200 Тогда
ВызватьИсключение("Не удалось отправить событие в Sentry"); // TODO: сделать внятное сообщение
КонецЕсли;

// В Sentry отправляется каждая ошибка
Возврат Неопределено;

КонецПроцедуры
КонецФункции

Функция СформироватьТелоЗапроса(ДанныеОтчетаОбОшибке) Экспорт

Expand Down
Loading

0 comments on commit 6b31a15

Please sign in to comment.