//Временно неактуально, проект в стадии разработки
Привет, дорогой проверяющий! Я рад представить мой проект! Начну с инструкции по запуску, после чего представлю архитектуру проекта, используемые технологии и описание работы. Если будут вопросы: @simplykorall - tg
-
git clone https://github.com/ddlifter/ya-proj -
cd ya-proj/cmd/app/ -
go get github.com/mattn/go-sqlite3 && go get github.com/gorilla/mux -
go run .
Нужно подождать пока не появится надпись server started
Далее необходимо открыть страницу в браузере по адресу http://localhost:8000/api/go/
Клиент отправляет на сервер выражения для вычисления. Тот в свою очередь взаимодействует с базой данных, в которой хранит все выражения(их статус и результат), операции(+-*/) и время их выполнения, а также состояния агентов. Далее создатеся пул задач и пул свободных агентов, размеры которых по умолчанию равны, однако в коде присутсвует возможность их изменения. Каждый из созданных агентов конкурентно решает свою задачу и после завершения сообщает результат серверу, который в свою очередб обновляет информацию в базе данных и предоставляет клиенту пользовательский интерфейс для просмотра данных.
В рамках проекта, безусловно, в качестве основного сервереного языка использовался Go, в качестве СУБД я выбрал маленькую и легко переносимую sqlite3, файл с которой находится в директории проекта. Для написания пользовательского интерфейса были применены HTML, CSS и JS. К сожалению, я не успел доделать фронтенд до конца и на двух страничках данные просто отображены в формате JSON. В качестве web фреймворка для маршрутизации и построение основной логики приложения я выбрал gorilla/mux, также использовал go-sqlite3 для взаимодействия с базой данных. Я отказался от использования Docker и Docker-compose ввиду отсутствия времени и желания нагромождать проект очередной бизнес-логикой.
- В директории cmd/app лежит файл main.go, который является точкой входа в приложение. Именно он описывает маршруты моего приложения.
- package server описывает основную логику работы сервера и взаимодействия с таблицей задач.
- package agent описывает непосредственно запуск работы агентов, а также взаимодействие с таблицами агентов и операций.
- package database содержит описание моделей и устанавливает соединение со всеми таблицами
- package workers описывает конкурентную работу агентов
- package calculate описывает преобразование строкового выражения и его ручное вычисление
- На вкладке с операциями мы можем указать любое время выполнения(в секундах, также необходимо нажать кнопку обновить), например:

- Сервер может решать любые элементарные выражения, например, введем 5+5 и отправим:

- Также пользователь может отправлять выражения в несколько действий, например, (1+2)*(5-1)+(3+2):

- Посмотрим результаты наших выражений и увидим верные ответы:

- Кроме того, допускается возможность того, что одно выражение находится в процессе вычислений, а второе уже выполнилось, так, например, поставим операции + время 10 секунд, а операции - 1 секунду и отправим на вычисление два выражения: 1+1 и 1-1. Тогда после того, как выполнится второе выражение, его статус будет complete, в то время как выражение с + будет pending. Также все выражения до того, как будут отправлены на вычисления кнопкой Отправить будут иметь статус waiting
