Skip to content

Commit

Permalink
Вывод команды в отдельные логи #18
Browse files Browse the repository at this point in the history
Merge pull request #30 from artbear/feature/add-log-18
  • Loading branch information
artbear authored Nov 14, 2017
2 parents a0bbf85 + a7e6f73 commit 90e9807
Show file tree
Hide file tree
Showing 4 changed files with 131 additions and 9 deletions.
36 changes: 36 additions & 0 deletions features/step_definitions/ВыполнениеКоманды.os
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
ВсеШаги.Добавить("ЯУстанавливаюОжидаемыйДиапазонКодовВозвратаОтДоДляКоманды");
ВсеШаги.Добавить("ЯУстанавливаюПериодОпросаЗавершенияКомандыВМиллисекунду");
ВсеШаги.Добавить("ЯСнимаюФлагПоказаНемедленногоВыводаКоманды");
ВсеШаги.Добавить("ЯПодключаюВыводКомандыВЛог");
ВсеШаги.Добавить("ЯПодключаюВыводВФайлДляЛога");
ВсеШаги.Добавить("ЯУстанавливаюФлагПоказаНемедленногоВыводаКоманды");

Возврат ВсеШаги;
КонецФункции
Expand Down Expand Up @@ -89,6 +92,13 @@
Команда.ПоказыватьВыводНемедленно(Ложь);
КонецПроцедуры

//Я устанавливаю флаг показа немедленного вывода команды "oscript"
Процедура ЯУстанавливаюФлагПоказаНемедленногоВыводаКоманды(Знач ИмяИлиТекстКоманды) Экспорт
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);

Команда.ПоказыватьВыводНемедленно(Истина);
КонецПроцедуры

//Я добавляю параметры для команды "oscript"
//| -version |
//| -encoding=utf-8 |
Expand All @@ -101,8 +111,34 @@
Команда.ДобавитьПараметры(МассивПараметров);
КонецПроцедуры

//Я подключаю вывод команды "oscript" в лог "ТестовыйЛог"
Процедура ЯПодключаюВыводКомандыВЛог(Знач ИмяИлиТекстКоманды, Знач ИмяЛога) Экспорт
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);
Команда.ДобавитьЛогВыводаКоманды(ИмяЛога);

НовыйЛог = Логирование.ПолучитьЛог(ИмяЛога);
НовыйЛог.УстановитьРаскладку(ЭтотОбъект);
КонецПроцедуры

//Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог"
Процедура ЯПодключаюВыводВФайлДляЛога(Знач ПутьФайла, Знач ИмяЛога) Экспорт
НовыйЛог = Логирование.ПолучитьЛог(ИмяЛога);

ФайлЖурнала = Новый ВыводЛогаВФайл;
ФайлЖурнала.ОткрытьФайл(ПутьФайла);

НовыйЛог.ДобавитьСпособВывода(ФайлЖурнала);

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

// { Служебные функции

Функция Форматировать(Знач Уровень, Знач Сообщение) Экспорт

Возврат СтрШаблон("ФИЧА ВыполнениеКоманды: %1 - %2", УровниЛога.НаименованиеУровня(Уровень), Сообщение);

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

Процедура ВыполнитьКоманду(Знач ИмяИлиТекстКоманды, Знач ИспользуемКомандныйПроцессор = Истина)
Команда = ПолучитьКомандуИзКонтекста(ИмяИлиТекстКоманды);
Команда.УстановитьИсполнениеЧерезКомандыСистемы(ИспользуемКомандныйПроцессор);
Expand Down
50 changes: 50 additions & 0 deletions features/ВыполнениеКоманды.feature
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,53 @@
Когда Я устанавливаю ожидаемый диапазон кодов возврата от 1 до 10 для команды "oscript"
Тогда Я получаю исключение при выполнении команды "oscript"
И Код возврата команды "oscript" равен 0

Сценарий: Выполнение команды с выводом в отдельный лог
Допустим Я создаю временный каталог и сохраняю его в контекст
И Я устанавливаю временный каталог как рабочий каталог
И Я установил рабочий каталог как текущий каталог

Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог"
И Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог"
И Я добавляю параметр "-version" для команды "oscript"

Когда Я выполняю команду "oscript"
Тогда я не вижу в консоли строку подобно "(\d+\.){3}\d+"
Тогда я не вижу в консоли вывод "ФИЧА ВыполнениеКоманды"
И Код возврата команды "oscript" равен 0
И Файл "лог1.Log" содержит "ФИЧА ВыполнениеКоманды"

Сценарий: Выполнение команды с выводом в отдельные логи
Допустим Я создаю временный каталог и сохраняю его в контекст
И Я устанавливаю временный каталог как рабочий каталог
И Я установил рабочий каталог как текущий каталог

Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог"
И Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог"
И Я подключаю вывод в файл "лог2.txt" для лога "ТестовыйЛог2"
Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог2"
И Я добавляю параметр "-version" для команды "oscript"

Когда Я выполняю команду "oscript"
Тогда я не вижу в консоли строку подобно "(\d+\.){3}\d+"
Тогда я не вижу в консоли вывод "ФИЧА ВыполнениеКоманды"
И Код возврата команды "oscript" равен 0
И Файл "лог1.Log" содержит "ФИЧА ВыполнениеКоманды"
И Файл "лог2.txt" содержит "ФИЧА ВыполнениеКоманды"

Сценарий: Выполнение команды с выводом в отдельный лог при включенном немедленном выводом команды
Допустим Я создаю временный каталог и сохраняю его в контекст
И Я устанавливаю временный каталог как рабочий каталог
И Я установил рабочий каталог как текущий каталог

Допустим Я устанавливаю флаг показа немедленного вывода команды "oscript"
Допустим Я подключаю вывод команды "oscript" в лог "ТестовыйЛог"
И Я подключаю вывод в файл "лог1.Log" для лога "ТестовыйЛог"
И Я добавляю параметр "-version" для команды "oscript"

Когда Я выполняю команду "oscript"
Тогда я не вижу в консоли строку подобно "(\d+\.){3}\d+"
Тогда я не вижу в консоли вывод "ФИЧА ВыполнениеКоманды"
И Код возврата команды "oscript" равен 0

И Файл "лог1.Log" содержит "ФИЧА ВыполнениеКоманды"
52 changes: 44 additions & 8 deletions src/Команда.os
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
Перем МаксимальныйОжидаемыйКодВозврата;
Перем ПериодОпросаВМиллисекундах;
Перем НемедленнныйВывод;
Перем ПодключенныеЛоги;

Перем ЭтоWindows;
Перем Лог;
Expand All @@ -30,7 +31,12 @@

ПроверитьВозможностьВыполненияКоманды();

КодВозврата = ЗапуститьИПодождать();
КодВозврата = ЗапуститьИПодождать();

Для каждого ПодключенныйЛог Из ПодключенныеЛоги Цикл
ПодключенныйЛог.Закрыть();
КонецЦикла;

Лог.Отладка("Код возврата равен %1", КодВозврата);
Возврат КодВозврата;

Expand Down Expand Up @@ -149,6 +155,22 @@
НемедленнныйВывод = НемедленныйПоказ;
КонецПроцедуры

// Устанавливает передачу вывода команды в дополнительный лог
//
// Параметры:
// ИмяЛогаИлиЛог - <Строка, Лог> - имя лога или объект лога
//
Процедура ДобавитьЛогВыводаКоманды(Знач ИмяЛогаИлиЛог) Экспорт

НовыйЛог = ИмяЛогаИлиЛог;
Если ТипЗнч(ИмяЛогаИлиЛог) = Тип("Строка") Тогда
НовыйЛог = Логирование.ПолучитьЛог(ИмяЛогаИлиЛог);
КонецЕсли;

ПодключенныеЛоги.Добавить(НовыйЛог);

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

// Установить ожидаемый код возврата
// После исполнения команды будет выброшено исключение, если полученный код возврата не совпадает с ожидаемым
//
Expand Down Expand Up @@ -353,12 +375,12 @@
КонецЕсли;

ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "В цикле");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "В цикле");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "В цикле", Истина);

КонецЦикла;

ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокВывода, ЗаписьXML, "После цикла");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "После цикла");
ОбработатьОчереднуюСтрокуВывода(Процесс.ПотокОшибок, ЗаписьXML, "После цикла", Истина);

РезультатРаботыПроцесса = ЗаписьXML.Закрыть();
Если Не НемедленнныйВывод Тогда
Expand All @@ -370,19 +392,31 @@
УстановитьВывод(РезультатРаботыПроцесса);
КонецПроцедуры

Функция ОбработатьОчереднуюСтрокуВывода(ПотокПроцесса, ЗаписьXML, Знач ПрефиксДляОтладки)
Функция ОбработатьОчереднуюСтрокуВывода(ПотокПроцесса, ЗаписьXML, Знач ПрефиксДляОтладки, Знач ЭтоВыводОшибки = Ложь)
Рез = "";
Если ПотокПроцесса.ЕстьДанные Тогда
Рез = ПотокПроцесса.Прочитать();
КонецЕсли;

Если Рез <> "" Тогда
Лог.Отладка("в цикле %2%1", Рез, Символы.ПС);
ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС);

Если НемедленнныйВывод Тогда
Сообщить(Рез);
Если ЗначениеЗаполнено(ПодключенныеЛоги) Тогда
Лог.Отладка(" Вывожу в отдельные логи");
Для каждого ПодключенныйЛог Из ПодключенныеЛоги Цикл
Если ЭтоВыводОшибки Тогда
ПодключенныйЛог.Ошибка(Рез);
Иначе
ПодключенныйЛог.Информация(Рез);
КонецЕсли;
КонецЦикла;
Иначе
ЗаписьXML.ЗаписатьБезОбработки(Рез + Символы.ПС);

Если НемедленнныйВывод Тогда
Сообщить(Рез);
КонецЕсли;
КонецЕсли;

КонецЕсли;

Возврат Рез;
Expand Down Expand Up @@ -433,6 +467,8 @@

ПериодОпросаВМиллисекундах = 100;
НемедленнныйВывод = Ложь;

ПодключенныеЛоги = Новый Массив;

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

Expand Down
2 changes: 1 addition & 1 deletion tasks/test.os
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
Если РезультатыВыполнения.Строки.Количество() > 0 Тогда
СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения);

// ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, ФайлФичи.ЭтоКаталог());
ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, Файл_КаталогФич.ЭтоКаталог());
КонецЕсли;

ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit;
Expand Down

0 comments on commit 90e9807

Please sign in to comment.