Regata Core представляет собой платформу, унифицирующую работу программ нашего сектора.
RegataCore имеет монолитную архитектуру и состоит 18 библиотек, некоторые из которых связаны между собой.
Основные потребности сектора - связь с базой данных для работы с информацией об образцах, стандартах, мониторах, облучениях и измерениях, а также работа с оборудованием.
Предполагалось, что программы будут доступны только через использование удаленного доступа на Windows Server. Таким образом вся архитектура платформы заточена на использование на сервере, что дает возможность опустить работу связанною с безопасностью:
- аутинтификация в БД (на сервере будет выполнятся через пользователя)
- передача адреса сервера БД
Кроме того, работа на сервере делает ненужной систему развертывания на основе GitHub actions программ-клиентов для конечных пользователей.
Программный стек на данный момент(02.2022):
- .NET5
- Microsoft Sql Server 2017 (Linux)
- EF Core
- MS Test
- NuGet
- Git
- GitHub
- WinForms
- NLog
- CredentialManager
От двух последних позиций можно избавиться заменив их на входящие в состав .net библиотеки:
- NLog -> ILogger
- CredentialManager на Microsoft.PowerShell.Security
Переход на собственный Windows Server также решает проблему доступа к данным. Сейчас мы используем вирутальную машину развернутую на JinrCloud с MS Sql Server 2017 for Linux, но после перехода на Windows Server, мы перейдем на MS Sql Server 2019. Так как сервер располагается в зале с экспериментальной установкой, соединение может быть настроено по локальной сети, что снимает проблему доступа к базе во время проведения эксперимента.
Всё разработанное программное обеспечение находится в облачном репозитории GitHub https://github.com/regata-jinr под лицензией GPL 3.0.
Указанный программный стек и Windows Server выбран не просто так. Мы имеем сильную зависимость в виде программ входящих в состав экспериментальной установки. Наши HPGE детекторы подключатся к ОС Windows. Также программа обработки спектров и библиотеки автоматизации доступны только под этой ОС.
Сборка программ может осуществляться как через Visual Studio, так и с помощью коммандной строки. Для упрощения сборки написан powershell скрипт build, который позволяет рекурсивно (добавление новых проектов не требует изменений в скрипте) производить:
- сборку всех или выбранного по именам проектов с указанной конфигурации
- тестирование выбранных проектов
- упаковку собираемых библиотек в nuget пакет, для последующего подключения к программам-клиентам и копирование пакетов в единую директорию packages\regata.core.[name]\version
- копирование файлов динамических библиотек в единую директорию, которую удобно использовать для ссылок: artifacts\Release[Name]
Пример использования скрипта:
.\build.ps1 -Release -IgnoreTest -Name base
Microsoft (R) Build Engine version 17.0.0+c9eb9dd64 for .NET
Copyright (C) Microsoft Corporation. All rights reserved.
Determining projects to restore...
All projects are up-to-date for restore.
Base -> D:\GoogleDrive\Job\flnp\dev\regata\Core\artifacts\Release\Base\Base.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:00.29
Все модули имееют единое пространство имен, корневым пространством является пространство
Regata.Core
Подключить модуль можно двумя способами:
- добавить в ручную ссылку на dll проекта в файл csproj, для этого я использовал переменную окружения REGATA_ARTIFACTS, которая содержит путь к директории с библиотеками и создается автоматически при запуски скрипта сборки.
<ItemGroup>
<Reference Include="base">
<HintPath>$(REGATA_ARTIFACTS)\dlls\$(Configuration)\base\base.dll</HintPath>
</Reference>
</ItemGroup>
- используя пакетный менеджер nuget (предпочтительный способ, так как позволяет переключаться между версиями)
dotnet add .\MyProj.csproj package Regata.Core.Base -s $env:REGATA_ARTIFACTS\packages\
Предоставляет классы описывающие системы и компоненты, лежащие в основе всех используемых програм:
-
Codes используется для описания ошибок разных уровней. Каждой обрабатываемой и необрабатываемой ситуации ставится в соответствии код, обладающий определенным форматом, из которого можно определеить статус ситуации и ее номер, по которому можно найти место возникновение ситуации и её описание.
-
Messages содержит базовый класс для сообщения, который используется для логов и отображения через графический интерфейс пользователя(ГИП)
-
Report библиотека оповещения о статусе программ. Позволяет вести журналирование, уведомлять пользователя о возникновении ситуаций через ГИП, а также электронную почту.
-
Settings библиотека настроек приложений. На основе этой библиотеки все необходимые настойки можно выделить в класс, который будет сериализирован при изменении параметров или десериализирован при загрузке приложения из определенного файла настроек.
-
Database библиотека взаимодействия с базой данных. Мы используем EF Core. Библиотека включается в себя модели описывающие наши данные, а также контекстный менеджер для обращения и работы с ними.
Библиотека взаимодейтсвия с облачным сервисом ОИЯИ, который используется для хранения спектров образцов и других файлов сектора.
Библиотека взаимодействия с файлами спектров (.cnf) позволяет читать и записывать данные в уже существующий спектр. Используется для программы просмотра информации в спектрах.
Библиотека экспорта и импорта табличных данных.
Поддерживается импорт из GoogleSheet и CSV, планируется поддержка Excel.
Библиотеки взаимодействия с оборудованием.
-
Detector библиотека взаимодействия с детектором HPGe Canberra.
-
SampleChanger бибилотека взаимодействия с устройством смены образцов Xemo Systec
-
Scales библиотека взаимодействия с весами
Содержит шаблоны интерфейсов. Палнируется перейти от winforms на .NET Multi-platform App UI.
- WinForms Библиотека содержащая шаблоны интерфейсов на WinForms.