# README
DAEE
Запуск
В моем проекте 3 основных компонента - сервер на go, бд postgresql и вебсайт на react. К сожалению оркестратор и агент в докер закинуть не смог(если быть точнее смог, но агент не принимал запросы, хотя запускался), из-за чего их придется запустить вручную. Но начнем с бд и вебсайта . Для их запуска нужно прописать 2 строчки в терминале:
docker-compose build
docker-compose up
В итоге поднимется бд на порту 5342 и вебсайт на 3000. Если у вас уже установлен и зупущен postgresql - остановите его, ведь при поднятии докера выйдет ошибка.
sudo systemctl stop postgresql
Далее запускаем go файлы, но перед этим скачиваем все packages
go mod download
go run agent/cmd/main.go
go run orchestrator/cmd/main.go
Первый этап завершен. Ниже приведен список сервиса/портов:
- Оркестратор:8080
- Агент:5000-5003
- Постгрес:5342
- Реакт:3000
Теперь самое время перейти на вебсайт
Вебсайт
Для начала вы попадете на регистрационную форму, если нет то нажмите на "Log out". Здесь вы можете создать новый аккаунт или войти уже в существующий. Для этого введите данные и сначала нажмите "Sign up"(зарегестрироватся), а потом "Sign in". Далее вам нужно будет нажимать только sign in.
Вы попадете на некоторую страницу. Перейдите с помощью Navbar в Home и введите любое выражение. Очень важно чтобы между всеми операторами были пробелы, к примеру "2 + 2 * 2", "2+ 2*2" не решится. С помощью стрелочек можете выбрать сколько будет решаться каждая из операция в секундах. Отправив выражение вы получите его id, который можете забить в поисковик -> нажать Enter и получить информацию.
Также вы можете нажать на "Expressions", чтобы получить все свои выражение. Сайт имеет небольшой баг, из-за чего он не покажет вам весь список, а пагинацию делать мне лень. В "Operations" тот же самый баг, в данной странице можно посмотреть на операции вычисляющие в настоящий момент времени .
В "Agents" можно посмотреть на статус агентов и когда последний раз были пингануты
А теперь переходим к самому коду
Структура
В папке cmd main.go файлы для запуска оркестратора и агента.
Internal: в папке db написаны функции для взаимодействия с бд, handler- хэндлер запросов, server- некоторые шаблонные функции, distributer- вычислить выражения, accessible- проверяет агентов на доступность.
Proto: прото файлы
Webdaee: фронтенд, на реакте
Прото файл
У просто два сообщение- проверка на доступность и для вычисления.
//Сообщения для описания запроса на доступность агента
message AvRequest {}
// Сообщение для описания результата доступности агента(да/нет)
message AvResponse {
bool result = 1;
}
Проверка на доступность ничего не принимает, возвращает доступность/занятость агента.
//Сообщение для описания запроса на вычисление выражения
message OpRequest {
float a = 1;
float b = 2;
string operator = 3;
int64 time = 4;
}
//Сообщение для описания результата вычислениgit я выражения
message OpResponse {
float result = 1;
}
Оперэйшн сообщение принимает две цифры, операцию и время выполнения, а возвращает результат. Думаю важно отметить что при /0 он вернет ноль, ведь не расчитан на ошибки, но отправив такой же запрос на оркестратор получите ошибку, ведь это проверяется в папке distributor при вычислении.
Тестирование
Описание запросов на оркестратор и агент можете скопировать с файла Insomnia. Чтобы воспользоваться этим файлом установите insomnia на свой компьютер и импортируйте туда данный файл. Вверхние два запроса - запросы агента(gRPC), остальные идут оркестратору.
В некоторых модулях и у main.go файлов имеются тесты, которые вы можете прогнать
API
АПИ можно посмотреть через Insomnia