Skip to content

Commit

Permalink
Merge branch 'release/v.0.4.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
arkuznetsov committed Aug 22, 2019
2 parents ede2506 + e5e3d5e commit e17d25a
Show file tree
Hide file tree
Showing 10 changed files with 248 additions and 35 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
testdata/
.vscode/
.sonarlint/
.sonarlint/
*.ospx
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,16 @@
- Список версий хранилища из отчета по версиям хранилища (MXL)
- Результаты замера производительности (PFF)

## Команды

- **process** (p) - выполняет обработку данных настройкам из файла (.json)
- _<Путь>_ - путь к файлу настроек (по умолчанию ./ybrsettings.json)
- _--work-dir_ _<путь к рабочему каталогу (по умолчанию: текущий каталог)>_
- **test** (t) - выполняет чтение указанного файла в скобочном формате 1С, выводит результаты в консоль (возможен замер времени)
- _<Путь>_ - путь к файлу в скобочном формате 1С
- _--start-row_ _<начальная строка для чтения (по умолчанию 1)>_
- _--mesure-rate_ _<частота замера скорости выполнения (по умолчанию 100)>_

## Управляющие обработки

### МенеджерОбработкиДанных.os
Expand Down Expand Up @@ -108,7 +118,7 @@

### ВыводДанныхВКонсоль.os

Пример обработки вывода данных, любые входящие данные преобразует в формат JSON и выводит в панель сообщений.
Пример обработки вывода данных, любые входящие данные преобразует в формат JSON и выводит в консоль.

### ВыводДанныхВФайлJSON.os

Expand Down
1 change: 1 addition & 0 deletions lib.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<package-def>
<class name="Тест" file="src/Классы/КомандаТест.os"/>
<class name="МенеджерОбработкиДанных" file="src/Классы/МенеджерОбработкиДанных.os"/>
<class name="ЧтениеКаталога" file="src/Классы/ЧтениеКаталога.os"/>
<class name="ЧтениеСкобкоФайла" file="src/Классы/ЧтениеСкобкоФайла.os"/>
Expand Down
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
.ВключитьФайл("lib.config")
.ВключитьФайл("README.md")
.ВключитьФайл("LICENSE")
.ИсполняемыйФайл("src/yabr.os", yabr);
.ИсполняемыйФайл("src/yabr.os");
15 changes: 15 additions & 0 deletions src/lib.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<package-def>
<class name="Тест" file="Классы/КомандаТест.os"/>
<class name="МенеджерОбработкиДанных" file="Классы/МенеджерОбработкиДанных.os"/>
<class name="ЧтениеКаталога" file="Классы/ЧтениеКаталога.os"/>
<class name="ЧтениеСкобкоФайла" file="Классы/ЧтениеСкобкоФайла.os"/>
<class name="ЧтениеЖР" file="Классы/ЧтениеЖР.os"/>
<class name="ЧтениеСловаряЖР" file="Классы/ЧтениеСловаряЖР.os"/>
<class name="ЧтениеСпискаИБ" file="Классы/ЧтениеСпискаИБ.os"/>
<class name="ЧтениеЗамераПроизводительности" file="Классы/ЧтениеЗамераПроизводительности.os"/>
<class name="ЧтениеОтчетаПоВерсиямХранилища" file="Классы/ЧтениеОтчетаПоВерсиямХранилища.os"/>
<class name="ВыводДанныхВКонсоль" file="Классы/ВыводДанныхВКонсоль.os"/>
<class name="ВыводДанныхВФайлJSON" file="Классы/ВыводДанныхВФайлJSON.os"/>
<class name="ВыводДанныхВЭластик" file="Классы/ВыводДанныхВЭластик.os"/>
<module name="ПараметрыПриложения" file="Модули/ПараметрыПриложения.os"/>
</package-def>
34 changes: 10 additions & 24 deletions src/yabr.os
Original file line number Diff line number Diff line change
Expand Up @@ -14,39 +14,25 @@

МенеджерОбработкиДанных = Новый МенеджерОбработкиДанных();

МенеджерОбработкиДанных.ДобавитьРабочийКаталог("$yabrDir", ТекущийСценарий().Каталог);

Приложение = Новый КонсольноеПриложение(ПараметрыПриложения.ИмяПриложения(),
"приложение для обработки файлов скобочного формата 1С",
МенеджерОбработкиДанных);
"приложение для обработки файлов скобочного формата 1С");
Приложение.Версия("version", ПараметрыПриложения.Версия());
Приложение.Аргумент("PATH", "./yabrsettings.json", "путь к файлу настроек обработки данных (.json)")
.ТСтрока()
.ВОкружении("YABR_SETTINGS");
Приложение.Опция("W work-dir", "", "Рабочий каталог")
.ТСтрока()
.ВОкружении("YABR_WORKDIR");

МенеджерОбработкиДанных.ДобавитьРабочийКаталог("$yabrDir", ТекущийСценарий().Каталог);

Приложение.ДобавитьКоманду("process p", "Запускает обраотку данных по указанной настройке (json)",
МенеджерОбработкиДанных);
Приложение.ДобавитьКоманду("test t", "Запускает тестовое чтение файла в скобочном формате 1С",
Новый Тест());


Приложение.Запустить(АргументыКоманднойСтроки);

КонецПроцедуры // ВыполнитьПриложение()

Процедура ВыполнитьКоманду(Знач КомандаПриложения) Экспорт

КомандаПриложения.ВывестиСправку();

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

Процедура ПередВыполнениемКоманды(Знач Команда) Экспорт

ПараметрыПриложения.УстановитьРежимОтладкиПриНеобходимости(ВыводДополнительнойИнформации);

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

///////////////////////////////////////////////////////

Лог = ПараметрыПриложения.Лог();
Лог.УстановитьУровень(УровниЛога.Отладка);

Попытка

Expand Down
78 changes: 73 additions & 5 deletions src/Классы/ВыводДанныхВЭластик.os
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
Перем Данные; // Структура - данные для отправки в эластик 1С

Перем Эластик_Сервер; // Строка - адрес сервера http-сервиса Elastic
Перем Эластик_Порт; // Число - порт сервера http-сервиса Elastic
Перем Эластик_Пользователь; // Строка - имя пользователя сервиса Elastic
Перем Эластик_Пароль; // Строка - пароль пользователя сервиса Elastic
Перем Эластик_Соединение; // HTTP-соединение - объект соединения с http-сервисом для повторного использования
Expand Down Expand Up @@ -72,8 +73,14 @@
"Эластик_Сервер",
"Строка",
Истина,
"http://localhost:9200",
"localhost",
"Адрес сервера http-сервиса Elastic.");
ДобавитьОписаниеПараметра(Параметры,
"Эластик_Порт",
"Число",
Ложь,
9200,
"Порт сервера http-сервиса Elastic.");
ДобавитьОписаниеПараметра(Параметры,
"Эластик_Пользователь",
"Строка",
Expand Down Expand Up @@ -187,9 +194,25 @@
ПараметрыОбработки = НовыеПараметры;

Если ПараметрыОбработки.Свойство("Эластик_Сервер") Тогда
Эластик_Сервер = ПараметрыОбработки.Эластик_Сервер;

ОписаниеСервера = РазложитьАдресСервера(ПараметрыОбработки.Эластик_Сервер);

Эластик_Сервер = ОписаниеСервера.Сервер;

Если ОписаниеСервера.Свойство("Порт") Тогда
Эластик_Порт = ОписаниеСервера.Порт;
КонецЕсли;

Иначе
Эластик_Сервер = "http://localhost:9200";
Эластик_Сервер = "localhost";
КонецЕсли;

Если НЕ ЗначениеЗаполнено(Эластик_Порт) Тогда
Эластик_Порт = 9200;
КонецЕсли;

Если ПараметрыОбработки.Свойство("Эластик_Порт") И ЗначениеЗаполнено(ПараметрыОбработки.Эластик_Порт) Тогда
Эластик_Порт = ПараметрыОбработки.Эластик_Порт;
КонецЕсли;

Если ПараметрыОбработки.Свойство("Эластик_Пользователь") Тогда
Expand Down Expand Up @@ -268,6 +291,8 @@

Если ВРег(ИмяПараметра) = ВРег("Эластик_Сервер") Тогда
Эластик_Сервер = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Эластик_Порт") Тогда
Эластик_Порт = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Эластик_Пользователь") Тогда
Эластик_Пользователь = Значение;
ИначеЕсли ВРег(ИмяПараметра) = ВРег("Эластик_Пароль") Тогда
Expand Down Expand Up @@ -562,7 +587,7 @@

//Подключаем http-сервис указанный в настройках подключения к базе
Попытка
Эластик_Соединение = Новый HTTPСоединение("localhost", 9200, Эластик_Пользователь, Эластик_Пароль);
Эластик_Соединение = Новый HTTPСоединение(Эластик_Сервер, Эластик_Порт, Эластик_Пользователь, Эластик_Пароль);
Исключение
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ВызватьИсключение СтрШаблон("%1: %2", Эластик_Сервер, ТекстОшибки);
Expand Down Expand Up @@ -698,4 +723,47 @@

КонецПроцедуры // ДобавитьОписаниеПараметра()

#КонецОбласти // СлужебныеПроцедурыИФункции()
// Функция - раскладывает строку адреса сервера на протокол, сервер, порт
//
// Параметры:
// СтрокаАдреса - Строка - адрес сервера
//
// Возвращаемое значение:
// Структура - результат разбора
// * Протокол - Строка - наименование протокола (http, https)
// * Сервер - Строка - адрес/имя сервера
// * Порт - Число - номер порта (если указан)
//
Функция РазложитьАдресСервера(Знач СтрокаАдреса)

ЧастиАдреса = СтрРазделить(СтрокаАдреса, ":");

Результат = Новый Структура();

КоличествоЭлементов1 = 1;
КоличествоЭлементов2 = 2;
КоличествоЭлементов3 = 3;

Если ЧастиАдреса.Количество() = КоличествоЭлементов1 Тогда
Результат.Вставить("Сервер", ЧастиАдреса[0]);
ИначеЕсли ЧастиАдреса.Количество() = КоличествоЭлементов2 Тогда
Если Лев(ЧастиАдреса[1], 2) = "//" Тогда
Результат.Вставить("Протокол", ЧастиАдреса[0]);
Результат.Вставить("Сервер", Сред(ЧастиАдреса[1], 3));
Иначе
Результат.Вставить("Сервер", ЧастиАдреса[0]);
Результат.Вставить("Порт", Число(ЧастиАдреса[1]));
КонецЕсли;
ИначеЕсли ЧастиАдреса.Количество() = КоличествоЭлементов3 Тогда
Результат.Вставить("Протокол", ЧастиАдреса[0]);
Результат.Вставить("Сервер", Сред(ЧастиАдреса[1], 3));
Результат.Вставить("Порт", Число(ЧастиАдреса[2]));
Иначе
ВызватьИсключение СтрШаблон("Некорректно указан адрес сервера %1", СтрокаАдреса);
КонецЕсли;

Возврат Результат;

КонецФункции // РазложитьАдресСервера()

#КонецОбласти // СлужебныеПроцедурыИФункции
106 changes: 106 additions & 0 deletions src/Классы/КомандаТест.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
//----------------------------------------------------------
//This Source Code Form is subject to the terms of the
//Mozilla Public License, v.2.0. If a copy of the MPL
//was not distributed with this file, You can obtain one
//at http://mozilla.org/MPL/2.0/.
//----------------------------------------------------------
//Codebase: https://github.com/ArKuznetsov/yabr.os/
//----------------------------------------------------------

Процедура ОписаниеКоманды(Команда) Экспорт

Команда.Опция("s start-row", 1, "начальная строка для чтения")
.ТЧисло()
.ПоУмолчанию(1);

Команда.Опция("r mesure-rate", "", "частота замера скорости выполнения")
.ТЧисло()
.ПоУмолчанию(100);
КонецПроцедуры

Процедура ВыполнитьКоманду(Знач Команда) Экспорт

Лог = ПараметрыПриложения.Лог();

Данные = Команда.ЗначениеАргумента("PATH");
НачальнаяСтрока = Команда.ЗначениеОпции("start-row");
ЧастотаЗамера = Команда.ЗначениеОпции("mesure-rate");

ПараметрыОбработки = Новый Структура();
ПараметрыОбработки.Вставить("НачальнаяСтрока" , НачальнаяСтрока);
ПараметрыОбработки.Вставить("ЧастотаЗамераСкоростиВыполнения", ЧастотаЗамера);

Чтение = Новый ЧтениеСкобкоФайла();

Чтение.УстановитьПараметрыОбработкиДанных(ПараметрыОбработки);

Чтение.УстановитьДанные(Данные);

Чтение.ОбработатьДанные();

РезультатОбработки = Чтение.РезультатОбработки();

УдалитьДанныеНеСовместимыеСJSON(РезультатОбработки);

Сообщить(ЗаписатьДанныеВJSON(РезультатОбработки));

Если ЧастотаЗамера > 0 Тогда
Сообщить(Символы.ПС + ЗаписатьДанныеВJSON(Чтение.ЗамерСкоростиВыполнения()));
КонецЕсли;

КонецПроцедуры // ВыполнитьКоманду

#Область СлужебныеПроцедурыИФункции

// Процедура - удаляет из состава структуры циклические ссылки и соответствия номеров строк
//
// Параметры:
// Данные - Структура - даныые для обработки
//
Процедура УдалитьДанныеНесовместимыеСJSON(Данные)

Если НЕ ТипЗнч(Данные) = Тип("Структура") Тогда
Возврат;
КонецЕсли;

Если Данные.Свойство("Родитель") Тогда
Данные.Удалить("Родитель");
КонецЕсли;

Если Данные.Свойство("НомераСтрок") Тогда
Данные.Удалить("НомераСтрок");
КонецЕсли;

Если Данные.Свойство("Значения") И ТипЗнч(Данные.Значения) = Тип("Массив") Тогда
Для Каждого ТекЭлемент Из Данные.Значения Цикл
УдалитьДанныеНесовместимыеСJSON(ТекЭлемент);
КонецЦикла;
КонецЕсли;

КонецПроцедуры // УдалитьДанныеНесовместимыеСJSON()

// Функция - возвращает представление данных в текстовом формате JSON
//
// Параметры:
// Данные - Структура, Массив(Структура) - данные для преобразования
//
// Возвращаемое значение:
// Строка - представление данных в текстовом формате JSON
//
Функция ЗаписатьДанныеВJSON(Знач Данные)

Запись = Новый ЗаписьJSON();
Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix, Символы.Таб));

Попытка
ЗаписатьJSON(Запись, Данные);
Исключение
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ВызватьИсключение ТекстОшибки;
КонецПопытки;

Возврат Запись.Закрыть();

КонецФункции // ЗаписатьДанныеВJSON()

#КонецОбласти // СлужебныеПроцедурыИФункции
Loading

0 comments on commit e17d25a

Please sign in to comment.