Skip to content

Commit

Permalink
#331 Сбор окружения
Browse files Browse the repository at this point in the history
  • Loading branch information
alkoleft committed May 22, 2024
1 parent 4e55456 commit 678c7ee
Show file tree
Hide file tree
Showing 12 changed files with 252 additions and 43 deletions.
4 changes: 2 additions & 2 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<!-- Важно: Пожалуйста, перед созданием PR создайте проблему (issue) -->
<!-- Любые изменения необходимо описать и при необходимостиобсудить, прежде чем продолжить. Невыполнение этого требования может привести к отклонению запроса на включение. -->
<!-- Любые изменения необходимо описать и при необходимости обсудить, прежде чем продолжить. Невыполнение этого требования может привести к отклонению запроса на включение. -->

## Описание изменний
## Описание изменений

<!-- Разместите здесь краткое описание изменений -->

Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"помогаторы",
"пресетов",
"Регистронезависимое",
"реквеста",
"релизный",
"Сериализатор",
"сериализацию",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,47 +70,12 @@

КорневойКаталог = ЮТФайлы.ОбъединитьПути(Результат, "..", "..", "..");
КаталогКомпонент = ЮТФайлы.ОбъединитьПути(КорневойКаталог, "ExtCompT");

ПараметрыТихойУстановки.РабочийКаталог = КаталогКомпонент;
Информация = Новый СистемнаяИнформация();
ОперационнаяСистема = Неопределено;
Архитектура = Неопределено;

Linux = "Linux";
Windows = "Windows";
MacOS = "MacOS";

//@skip-check bsl-variable-name-invalid
x86 = "i386";
//@skip-check bsl-variable-name-invalid
x64 = "x86_64";

ТипКлиентскойПлатформы = Информация.ТипПлатформы;

Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда
ОперационнаяСистема = Linux;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда
ОперационнаяСистема = Linux;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда
ОперационнаяСистема = Windows;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда
ОперационнаяСистема = Windows;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x64;
Иначе
ЮТИсполнительСлужебныйКлиент.ОбработкаОшибки("Неподдерживаемый тип платформы");
КонецЕсли;

ПараметрыТихойУстановки.ОперационнаяСистема = ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = Архитектура;
ОписаниеПлатформы = ЮТОкружениеСлужебныйКлиентСервер.Платформа(Новый СистемнаяИнформация());
ПараметрыТихойУстановки.ОперационнаяСистема = ОписаниеПлатформы.ОперационнаяСистема;
ПараметрыТихойУстановки.Архитектура = ОписаниеПлатформы.Архитектура;

ЮТАсинхроннаяОбработкаСлужебныйКлиент.ВызватьСледующийОбработчик(ПараметрыТихойУстановки);

КонецПроцедуры
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,12 @@

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

Функция ВычислитьБезопасноНаСервере(Знач Выражение) Экспорт

Возврат ЮТОбщийСлужебныйВызовСервера.ВычислитьБезопасноНаСервере(Выражение);

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

Функция ВызватьФункцию(ПолноеИмяМетода, Параметры, Безопасно = Истина) Экспорт

Выражение = СтрокаВызоваМетода(ПолноеИмяМетода, Параметры);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@

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

Функция ВычислитьБезопасноНаСервере(Знач Выражение) Экспорт

Возврат ЮТМетодыСлужебный.ВычислитьБезопасно(Выражение);

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

#КонецОбласти

#Область СлужебныеПроцедурыИФункции
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//

#Область СлужебныйПрограммныйИнтерфейс

// Собирает информацию об окружения, как сервера, так и клиента.
//
// Возвращаемое значение:
// Структура - Описание окружения:
// * ВерсияПлатформы - Строка
// * ФайловаяБаза - Булево
// * ОбычноеПриложение - Булево
// * ВебКлиент - Булево
// * ТолстыйКлиент - Булево
// * ЛокальПлатформы - Строка
// * ЛокальИнтерфейса - Строка
// * ОперационнаяСистемаКлиент - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураКлиент - Строка - Возможные значения: x86_64, i386
// * ОперационнаяСистемаСервер - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураСервер - Строка - Возможные значения: x86_64, i386
// * ВстроенныйЯзык - Строка - Возможные значения: ru, en
// * ИнформационнаяСреда - Строка
Функция ОписаниеОкружения() Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация();

Окружение = Новый Структура;
Окружение.Вставить("ВерсияПлатформы", СистемнаяИнформация.ВерсияПриложения);
Окружение.Вставить("ФайловаяБаза", ЭтоФайловаяБаза());
Окружение.Вставить("ОбычноеПриложение", Ложь);
Окружение.Вставить("ВебКлиент", Ложь);
Окружение.Вставить("ТолстыйКлиент", Ложь);
Окружение.Вставить("ЛокальПлатформы", ЛокальПлатформы());
Окружение.Вставить("ЛокальИнтерфейса", ЛокальИнтерфейса());
Окружение.Вставить("ИнформационнаяСреда", "DEV");

#Если ВебКлиент Тогда
Окружение.ВебКлиент = Истина;
#ИначеЕсли ТолстыйКлиентОбычноеПриложение Тогда
Окружение.ОбычноеПриложение = Истина;
Окружение.ТолстыйКлиент = Истина;
#ИначеЕсли ТолстыйКлиентУправляемоеПриложение Тогда
Окружение.ТолстыйКлиент = Истина;
#КонецЕсли

Платформа = Платформа(СистемнаяИнформация);
Окружение.Вставить("ОперационнаяСистемаКлиент", Платформа.ОперационнаяСистема);
Окружение.Вставить("АрхитектураКлиент", Платформа.Архитектура);

// TODO придумать другой безопасный универсальный вызов сервера
ОписаниеСерверногоОкружения = ЮТМетодыСлужебный.ВычислитьБезопасноНаСервере("ЮТОкружениеСлужебныйКлиентСервер.ОписаниеСерверногоОкружения()");
Окружение.Вставить("ОперационнаяСистемаСервер", ОписаниеСерверногоОкружения.ОперационнаяСистема);
Окружение.Вставить("АрхитектураСервер", ОписаниеСерверногоОкружения.Архитектура);
Окружение.Вставить("ВстроенныйЯзык", ОписаниеСерверногоОкружения.ВстроенныйЯзык);

//@skip-check constructor-function-return-section
Возврат Окружение;

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

#КонецОбласти

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

Процедура Инициализация(ПараметрыЗапуска) Экспорт

Окружение = ОписаниеОкружения();
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("Окружение", Окружение, Истина);

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

Функция ЭтоФайловаяБаза()

Возврат СтрНайти(Врег(СтрокаСоединенияИнформационнойБазы()), "FILE=") = 0;

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

Функция Платформа(СистемнаяИнформация) Экспорт

ОперационнаяСистема = Неопределено;
Архитектура = Неопределено;

Linux = "Linux";
Windows = "Windows";
MacOS = "MacOS";

//@skip-check bsl-variable-name-invalid
x86 = "i386";
//@skip-check bsl-variable-name-invalid
x64 = "x86_64";

ТипКлиентскойПлатформы = СистемнаяИнформация.ТипПлатформы;

Если ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86 Тогда
ОперационнаяСистема = Linux;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Linux_x86_64 Тогда
ОперационнаяСистема = Linux;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86 Тогда
ОперационнаяСистема = Windows;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.Windows_x86_64 Тогда
ОперационнаяСистема = Windows;
Архитектура = x64;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x86;
ИначеЕсли ТипКлиентскойПлатформы = ТипПлатформы.MacOS_x86_64 Тогда
ОперационнаяСистема = MacOS;
Архитектура = x64;
Иначе
ВызватьИсключение "Неподдерживаемый тип платформы";
КонецЕсли;

Возврат Новый Структура("ОперационнаяСистема, Архитектура", ОперационнаяСистема, Архитектура);

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

#Если Сервер Тогда
Функция ОписаниеСерверногоОкружения() Экспорт

СистемнаяИнформация = Новый СистемнаяИнформация();
Платформа = Платформа(СистемнаяИнформация);

Окружение = Новый Структура;
Окружение.Вставить("ОперационнаяСистема", Платформа.ОперационнаяСистема);
Окружение.Вставить("Архитектура", Платформа.Архитектура);
Окружение.Вставить("ВстроенныйЯзык", Формат(Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский, "БЛ=en; БИ=ru;"));

Возврат Окружение;

КонецФункции
#КонецЕсли

Функция ЛокальИнтерфейса()

#Если Клиент Тогда
Возврат ТекущийЯзык();
#Иначе
Возврат ТекущийЯзык().КодЯзыка;
#КонецЕсли

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

Функция ЛокальПлатформы()

Возврат ТекущийЯзыкСистемы();

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

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f53b66d1-d3a6-48ff-86e3-d684d219a58d">
<name>ЮТОкружениеСлужебныйКлиентСервер</name>
<synonym>
<key>ru</key>
<value>Окружение служебный</value>
</synonym>
<clientManagedApplication>true</clientManagedApplication>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
24 changes: 24 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТест/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -220,4 +220,28 @@

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

// Возвращает информацию об окружении.
//
// Возвращаемое значение:
// Структура - Описание окружения:
// * ВерсияПлатформы - Строка
// * ФайловаяБаза - Булево
// * ОбычноеПриложение - Булево
// * ВебКлиент - Булево
// * ТолстыйКлиент - Булево
// * ЛокальПлатформы - Строка
// * ЛокальИнтерфейса - Строка
// * ОперационнаяСистемаКлиент - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураКлиент - Строка - Возможные значения: x86_64, i386
// * ОперационнаяСистемаСервер - Строка - Возможные значения: Linux, Windows, MacOS
// * АрхитектураСервер - Строка - Возможные значения: x86_64, i386
// * ВстроенныйЯзык - Строка - Возможные значения: ru, en
// * ИнформационнаяСреда - Строка
Функция Окружение() Экспорт

//@skip-check constructor-function-return-section
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста("Окружение");

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

#КонецОбласти
1 change: 1 addition & 0 deletions exts/yaxunit/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@
<commonModules>CommonModule.ЮТНастройкиВыполнения</commonModules>
<commonModules>CommonModule.ЮТОбщий</commonModules>
<commonModules>CommonModule.ЮТОбщийСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ЮТОкружениеСлужебныйКлиентСервер</commonModules>
<commonModules>CommonModule.ЮТОтчетAllureСлужебный</commonModules>
<commonModules>CommonModule.ЮТОтчетJSONСлужебный</commonModules>
<commonModules>CommonModule.ЮТОтчетJUnitСлужебный</commonModules>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<content>CommonModule.ЮТМетодыСлужебный</content>
<content>CommonModule.ЮТНастройкиВыполнения</content>
<content>CommonModule.ЮТОбщийСлужебныйВызовСервера</content>
<content>CommonModule.ЮТОкружениеСлужебныйКлиентСервер</content>
<content>CommonModule.ЮТОтчетСлужебный</content>
<content>CommonModule.ЮТПодключаемыеМодулиСлужебный</content>
<content>CommonModule.ЮТПроверкиСлужебный</content>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@
</synonym>
<includeHelpInContents>true</includeHelpInContents>
<content>CommonModule.ЮТЗависимостиСлужебный</content>
<content>CommonModule.ЮТОкружениеСлужебныйКлиентСервер</content>
<parentSubsystem>Subsystem.ЮТПодключаемыеМодули.Subsystem.ОбработчикиСобытий</parentSubsystem>
</mdclass:Subsystem>
Loading

0 comments on commit 678c7ee

Please sign in to comment.