-
Notifications
You must be signed in to change notification settings - Fork 1
[WIP] Сериализация настроек бенчмарков #28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
0c3ba6b
3d65698
b1a2979
d3e55ec
fe3ba8c
edd2140
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -44,9 +44,9 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &Флаг | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Перем _ПропускнаяСпособность; // Булево, Неопределено | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &Опция(Имя = "c config", Описание = "Файл конфигурации бенчмарков в формате JSON") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &Опция(Имя = "settings", Описание = "Файл настроек бенчмарков в формате JSON") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &ТСтрока | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Перем _ФайлКонфигурации; // Строка | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Перем _ФайлНастроек; // Строка | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &Опция(Имя = "runtime", Описание = "Версии OneScript через запятую (current, stable, dev, x.x.x)") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &ТСтрока | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -62,51 +62,87 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &ТМассивСтрок | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Перем _МассивФайлов; // Массив из Строка | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Перем _Лог; // Лог | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &КомандаПриложения(Имя = "run", Описание = "Запуск бенчмарков") | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Процедура ПриСозданииОбъекта() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| _Лог = Логирование.ПолучитьЛог("oscript.lib.benchmark"); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецПроцедуры | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| &ВыполнениеКоманды | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Процедура Запустить() Экспорт | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| УстановитьРежимВоркер(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для Каждого Каталог Из КаталогиБенчмарков() Цикл | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Бенчмаркинг.ЗапуститьИзКаталога(Каталог, _Рекурсивно, ПрочитатьКонфигурацию()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЦикла; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ПодключенныеТипы = ПодключитьТипы(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Настройки = ПрочитатьНастройки(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Конфигурация = ПрочитатьКонфигурацию(Настройки); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для Каждого ИмяФайла Из ФайлыБенчмарков() Цикл | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Не Тип = Неопределено Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Конфигурация = Новый КонфигурацияБенчмарков(Тип); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Конфигурация.Объединить(ПрочитатьКонфигурацию()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Бенчмаркинг.Запустить(Тип, Конфигурация); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для Каждого Тип Из ПодключенныеТипы Цикл | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонфигурацияТипа = Новый КонфигурацияБенчмарков(Тип); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонфигурацияТипа.Объединить(Конфигурация); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Не Настройки = Неопределено И Настройки.ДескрипторыБенчмарков.Количество() > 0 Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Источник = Настройки.ДескрипторыБенчмарков; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Иначе | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Источник = Тип; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЕсли; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Попытка | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Бенчмаркинг.Запустить(Источник, КонфигурацияТипа); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Исключение | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| _Лог.Ошибка("Возникла ошибка при запуске бенчмарков <%1>: %2", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Тип, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ОписаниеОшибки()); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецПопытки; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЦикла; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецПроцедуры | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция КаталогиБенчмарков() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Каталоги = Новый Массив(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция ПрочитатьНастройки() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для Каждого ИмяФайла Из _МассивФайлов Цикл | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если ФС.КаталогСуществует(ИмяФайла) Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Каталоги.Добавить(ИмяФайла); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Не ЗначениеЗаполнено(_ФайлНастроек) Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Возврат Неопределено; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЕсли; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Сериализатор = Новый СериализаторНастроекБенчмарков(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Возврат Сериализатор.ПрочитатьИзJson(_ФайлНастроек); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецФункции | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+104
to
+113
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chainVerify error handling in СериализаторНастроекБенчмарков. Ensure that Run this script to verify error handling: 🏁 Script executed: #!/bin/bash
# Description: Check if СериализаторНастроекБенчмарков handles file errors
ast-grep --pattern $'class СериализаторНастроекБенчмарков {
$$$
ПрочитатьИзJson($$$) {
$$$
}
$$$
}'Length of output: 0 Length of output: 68 🏁 Script executed: #!/bin/bash
# Search for the ПрочитатьИзJson method definition
rg -n "ПрочитатьИзJson" --type-add 'os:*.os' --type os -A 10 -B 2Length of output: 7384 🏁 Script executed: #!/bin/bash
# Search for the СериализаторНастроекБенчмарков class/method structure
rg -n "СериализаторНастроекБенчмарков" --type-add 'os:*.os' --type os -C 5Length of output: 3872 Length of output: 458 🏁 Script executed: #!/bin/bash
# Check if there are any Попытка (try) blocks in the file to understand error handling patterns
rg -n "Попытка|Исключение" src/BenchmarkOneScript/core/Классы/СериализаторНастроекБенчмарков.osLength of output: 0 Add error handling to The method reads files and deserializes JSON without any error handling. If the file doesn't exist, is unreadable, or contains invalid JSON, it will crash with an unclear error. Wrap file operations in a try/catch block ( Affected code: 🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция ПодключитьТипы() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ПодключенныеТипы = Новый Массив(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для Каждого ИмяФайла Из НайтиФайлыБенчмарков() Цикл | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Не Тип = Неопределено Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ПодключенныеТипы.Добавить(Тип); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЕсли; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЦикла; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Возврат Каталоги; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Возврат ПодключенныеТипы; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецФункции | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+115
to
127
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion | 🟠 Major Add error handling for class connection failures. If Apply this diff: Функция ПодключитьТипы()
ПодключенныеТипы = Новый Массив();
Для Каждого ИмяФайла Из НайтиФайлыБенчмарков() Цикл
- Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла);
- Если Не Тип = Неопределено Тогда
- ПодключенныеТипы.Добавить(Тип);
- КонецЕсли;
+ Попытка
+ Тип = Бенчмаркинг.ПодключитьКласс(ИмяФайла);
+ Если Не Тип = Неопределено Тогда
+ ПодключенныеТипы.Добавить(Тип);
+ КонецЕсли;
+ Исключение
+ _Лог.Ошибка("Не удалось подключить класс из файла <%1>: %2",
+ ИмяФайла,
+ ОписаниеОшибки());
+ КонецПопытки;
КонецЦикла;
Возврат ПодключенныеТипы;📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция ФайлыБенчмарков() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция НайтиФайлыБенчмарков() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Файлы = Новый Массив(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для Каждого ИмяФайла Из _МассивФайлов Цикл | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Не ФС.КаталогСуществует(ИмяФайла) Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Файлы.Добавить(ПолноеИмяФайлаСценария(ИмяФайла)); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если ФС.КаталогСуществует(ИмяФайла) Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| НайденныеФайлы = НайтиФайлы(ИмяФайла, , _Рекурсивно); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Для Каждого ИмяФайлаВКаталоге Из НайденныеФайлы Цикл | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Файлы.Найти(ИмяФайлаВКаталоге) = Неопределено Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Файлы.Добавить(ИмяФайлаВКаталоге); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЕсли; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЦикла; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Иначе | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ПолноеИмяФайла = ПолноеИмяФайлаСценария(ИмяФайла); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Файлы.Найти(ПолноеИмяФайла) = Неопределено Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Файлы.Добавить(ПолноеИмяФайла); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЕсли; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЕсли; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЦикла; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
@@ -131,11 +167,10 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецФункции | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция ПрочитатьКонфигурацию() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Функция ПрочитатьКонфигурацию(Настройки) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если ЗначениеЗаполнено(_ФайлКонфигурации) Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Сериализатор = Новый СериализаторКонфигурацииБенчмарков(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Конфигурация = Сериализатор.ДесериализоватьИзJSON(_ФайлКонфигурации); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Если Настройки <> Неопределено Тогда | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Конфигурация = Настройки.Конфигурация; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Иначе | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Конфигурация = Новый КонфигурацияБенчмарков(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| КонецЕсли; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add validation for empty benchmark types.
If
ПодключитьТипы()returns an empty array (e.g., no valid benchmark files found), the loop won't execute and the command will exit silently without informing the user. This could lead to confusion.Consider adding validation:
📝 Committable suggestion
🤖 Prompt for AI Agents