Skip to content

Commit

Permalink
Добавлен повтор при ошибке через тайаут, что бы не закрывало exe
Browse files Browse the repository at this point in the history
  • Loading branch information
Navakouski committed Sep 22, 2024
1 parent c1843c8 commit 0559299
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 29 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,10 @@ https://github.com/Tavalik/TMail/tree/master
"ОписаниеИнформационнойБазы": "моя база для тестов",
"ЧислоСтрокДляЗаписи": 1000, - число строк которые будет переносить за один запрос к sql. Максимум 1000. Например если за паузу между загрузкой успели создать в журнале только 500 новых записей, то загрузит 500, не дожидаясь полного пакета.
"НачатьСПервойВSQLLite": "Ложь", - Если мы загружаем базу первый раз, то Истина. Например есть журнал который сокращался и сейчас хранятся записи с id от 500 до 10000. Мы получим минимальный айди и начнем загрузку с него. Для таблицы ЗаписиДанных.
"ОбрабатываемаяСтрокаСобытий": 0, - Если по какой то причине у нас затерлись данные или пропустили часть строк то можно начать загрузку с конкретного айди что бы догрузить. Для таблицы ЗаписиДанных.
"ПаузаСекунд": 60, - Пауза между обращением к базам. Мы получаем таблицы последних айди для каждой таблицы в SQL и журнале регистрации. После чего проходим все таблицы по очереди загружая новые записи. После этого пауза на указанное время перед новой итерацией.
"ВыводитьЛог": "Истина" - Если истина выводится информация по количеству итераций, загрузке таблиц.
"ОбрабатываемаяСтрокаСобытий": 0, - Если по какой то причине у нас затерлись данные или пропустили часть строк то можно начать загрузку с конкретного айди что бы догрузить. Для таблицы ЗаписиДанных.
"ПаузаСекунд": 60, - Пауза между обращением к базам. Мы получаем таблицы последних айди для каждой таблицы в SQL и журнале регистрации. После чего проходим все таблицы по очереди загружая новые записи. После этого пауза на указанное время перед новой итерацией.
"ВыводитьЛог": "Истина", - Если истина выводится информация по количеству итераций, загрузке таблиц.
"ПродолжатьПриОшибке": "Ложь", - Если истина не прекратит работу при ошибке. Автоматически попробует еще раз через таймаут.
"ПаузаСекундПриОшибке": 1800 - Пауза до повторного запуска если произошла ошибка
}

Binary file not shown.
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Описание.Имя("Zhurnal-Registracii")

.Версия("1.1.0")
.Версия("1.1.2")

.Автор("Новоковский Игорь")

Expand Down
6 changes: 4 additions & 2 deletions setting.Json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
"ЧислоСтрокДляЗаписи": 1000,
"НачатьСПервойВSQLLite": "Ложь",
"ОбрабатываемаяСтрокаСобытий": 0,
"ПаузаСекунд": 60,
"ВыводитьЛог": "Истина"
"ПаузаСекунд": 600,
"ВыводитьЛог": "Истина",
"ПродолжатьПриОшибке": "Ложь",
"ПаузаСекундПриОшибке": 1800
}
}
16 changes: 14 additions & 2 deletions src/Классы/ОбработкаЖурнала.os
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
Перем НачатьСПервойВSQLLite; // Если мы загружаем базу первый раз, то Истина. Например есть журнал который сокращался и сейчас хранятся записи с id от 500 до 10000. Мы получим минимальный айди и начнем загрузку с него. Для таблицы ЗаписиДанных.
Перем ПаузаСекунд; // Пауза между обращением к базам. Мы получаем таблицы последних айди для каждой таблицы в SQL и журнале регистрации. После чего проходим все таблицы по очереди загружая новые записи. После этого пауза на указанное время перед новой итерацией.
Перем ВыводитьЛог; // Если истина выводится информация по количеству итераций, загрузке таблиц.
Перем ПродолжатьПриОшибке; // Не прекратит работу при ошибке. Автоматически попробует еще раз через таймаут
Перем ПаузаСекундПриОшибке; // Пауза до повторного запуска если произошла ошибка

Перем СоединениеSqlLite;
Перем СоединениеSql;
Expand Down Expand Up @@ -51,7 +53,9 @@
ВыводитьЛог = ОписаниеБулево.ПривестиЗначение(НастройкиЧтенияЖурнала.ВыводитьЛог);
ОбрабатываемаяСтрокаСобытий = ОписаниеЧисла.ПривестиЗначение(НастройкиЧтенияЖурнала.ОбрабатываемаяСтрокаСобытий);
ПаузаСекунд = ОписаниеЧисла.ПривестиЗначение(НастройкиЧтенияЖурнала.ПаузаСекунд);

ПаузаСекундПриОшибке = ОписаниеЧисла.ПривестиЗначение(НастройкиЧтенияЖурнала.ПаузаСекундПриОшибке);
ПродолжатьПриОшибке = ОписаниеБулево.ПривестиЗначение(НастройкиЧтенияЖурнала.ПродолжатьПриОшибке);

НастройкиОбработкиНастройкиПочты = НастройкиОбработки.НастройкиПочты;

ИспользоватьSSL = ОписаниеБулево.ПривестиЗначение(НастройкиОбработкиНастройкиПочты.ИспользоватьSSL);
Expand Down Expand Up @@ -86,10 +90,18 @@
Возврат ВыводитьЛог;
КонецФункции

Функция ПолучитьПродолжатьПриОшибке() Экспорт
Возврат ПродолжатьПриОшибке;
КонецФункции

Функция ПолучитьПаузаСекунд() Экспорт
Возврат ПаузаСекунд;
КонецФункции

Функция ПолучитьПаузаСекундПриОшибке() Экспорт
Возврат ПаузаСекундПриОшибке;
КонецФункции

Функция ПолучитьНастройкиПочты() Экспорт
Возврат НастройкиПочты;
КонецФункции
Expand Down Expand Up @@ -194,7 +206,7 @@
Ожидаем.Что(ОписаниеИнформационнойБазы, "ОписаниеИнформационнойБазы должен быть заполнен").Заполнено();
Ожидаем.Что(ЧислоСтрокДляЗаписи, "ЧислоСтрокДляЗаписи должен быть заполнен").Заполнено();
Ожидаем.Что(ПаузаСекунд, "ПаузаСекунд должен быть заполнен").Заполнено();

КонецЕсли;

КонецПроцедуры
Expand Down
53 changes: 34 additions & 19 deletions src/Модули/ЧтениеИЗаписьВБазу.os
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,37 @@

НастройкиПочты = ОбработкаЖурнала.ПолучитьНастройкиПочты();

Попытка
ЗапуститьОбработку(ОбработкаЖурнала, НастройкиПочты);
Исключение

ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Если НЕ Логирование.ЗаписатьСтрокуЛога(ТекстСообщения) Тогда
Сообщить("ЗаписатьСтрокуЛога: " + Логирование.ТекстОшибки);
КонецЕсли;

Если НастройкиПочты.ОтправлятьПисьмоПриОшибке Тогда
ОтправитьПисьмо(ОбработкаЖурнала, ТекстСообщения, ИмяФайлаЛога);
ВызватьИсключение ТекстСообщения;
ПродолжатьЧтение = Истина;
ПродолжатьПриОшибке = ОбработкаЖурнала.ПолучитьПродолжатьПриОшибке();
ПаузаСекундПриОшибке = ОбработкаЖурнала.ПолучитьПаузаСекундПриОшибке();
ПаузаСекундПриОшибкеВремя = ПаузаСекундПриОшибке * 1000;

Пока ПродолжатьЧтение Цикл

Попытка
ЗапуститьОбработку(ОбработкаЖурнала, НастройкиПочты);
Исключение

ТекстСообщения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
Если НЕ Логирование.ЗаписатьСтрокуЛога(ТекстСообщения) Тогда
Сообщить("ЗаписатьСтрокуЛога: " + Логирование.ТекстОшибки);
КонецЕсли;

Если НастройкиПочты.ОтправлятьПисьмоПриОшибке Тогда
ОтправитьПисьмо(ОбработкаЖурнала, ТекстСообщения, ИмяФайлаЛога);
ВызватьИсключение ТекстСообщения;
КонецЕсли;

КонецПопытки;

Если ПродолжатьПриОшибке Тогда
Приостановить(ПаузаСекундПриОшибкеВремя);
Иначе
Прервать;
КонецЕсли;

КонецПопытки;
КонецЦикла;

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

#КонецОбласти
Expand Down Expand Up @@ -128,16 +143,16 @@

СоответствиеТаблиц = СоответствиеТаблиц();

IDпоследнейЗаписиВSQLLite = IDПоследнейЗаписиВEventLogMetadataSqlLite(ОбработкаЖурнала);
SQLLiteIDпоследнейЗаписи = IDПоследнейЗаписиВEventLogMetadataSqlLite(ОбработкаЖурнала);
НоваяСтрокаТаблицы = ТаблицаПоследнихIDSqlLite.Добавить();
НоваяСтрокаТаблицы.name = "EventLogMetadata";
НоваяСтрокаТаблицы.seq = IDпоследнейЗаписиВSQLLite;
НоваяСтрокаТаблицы.seq = SQLLiteIDпоследнейЗаписи;

IDпоследнейЗаписиВSQL = IDПоследнейЗаписиВСоответствияСтрокМетаданнымSql(ОбработкаЖурнала);
SQLIDпоследнейЗаписи = IDПоследнейЗаписиВСоответствияСтрокМетаданнымSql(ОбработкаЖурнала);
НоваяСтрокаТаблицы = ТаблицаПоследнихIDSql.Добавить();
НоваяСтрокаТаблицы.ИнформационнаяСистема = ОбработкаЖурнала.ПолучитьИнформационнаяСистема();
НоваяСтрокаТаблицы.Наименование = "СоответствияСтрокМетаданным";
НоваяСтрокаТаблицы.ID = IDпоследнейЗаписиВSQL;
НоваяСтрокаТаблицы.ID = SQLIDпоследнейЗаписи;

Для Каждого ТекСтрока Из ТаблицаПоследнихIDSqlLite Цикл

Expand Down Expand Up @@ -389,7 +404,7 @@

ЗапросВставка = Новый Запрос();
ЗапросВставка.УстановитьСоединение(СоединениеSqlLite);
ЗапросВставка.Текст = "Select eventLogID From EventLogMetadata ORDER BY rowID DESC LIMIT 1";
ЗапросВставка.Текст = "Select eventLogID From EventLogMetadata ORDER BY eventLogID DESC LIMIT 1";
Рез = ЗапросВставка.Выполнить();

Ожидаем.Что(Рез.Пустой()).Равно(Ложь);
Expand Down
6 changes: 4 additions & 2 deletions ГотоваяСборка/setting.Json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@
"ЧислоСтрокДляЗаписи": 1000,
"НачатьСПервойВSQLLite": "Ложь",
"ОбрабатываемаяСтрокаСобытий": 0,
"ПаузаСекунд": 60,
"ВыводитьЛог": "Истина"
"ПаузаСекунд": 600,
"ВыводитьЛог": "Истина",
"ПродолжатьПриОшибке": "Ложь",
"ПаузаСекундПриОшибке": 1800
}
}
Binary file not shown.
Binary file not shown.
Binary file modified ЗапуститьЧтениеЖурнала.exe
Binary file not shown.

0 comments on commit 0559299

Please sign in to comment.