# README
REST-API
Запуск программы
Для сборки проекта и создания исполняемого файла нужно перейти в корневую директорию проекта и выполнить команду make. Исполняемый файл с именем apiserver будет автоматически создан в этой же директории.
Перед первым запуском программы в СУБД PostgreSQL нужно создать пустую базу данных с именем restapi_dev.
Приложение запускается через терминал из корневой директории проекта следующей командой:
./apiserver -ip (host:port) -n (name) -p (password) -dbip (DBServerIP)
где:
(host:port) - ip адрес и порт для прослушивания, например, localhost:8080;
(name) - имя пользователя PostgreSQL;
(password) - пароль пользователя PostgreSQL;
(DBServerIP) - ip адрес сервера PostgreSQL.
(Круглые скобки при вводе значений аргументов командной строки ставить не нужно)
Сервер запустится и будет ожидать запросы. Запросы на сервер нужно отправлять, например, из другого окна терминала посредством библиотеки CURL.
Команды, поддерживаемые сервером:
-
/new Создает в базе данных в таблице Commands новую команду, запускает ее. Записывает в базу в таблицу Log и отправляет ответом на запрос результат выполнения этой команды.
Данная команда представляет из себя POST запрос, в теле которого нужно передать имя создаваемой команды, ее описание и файл Bash-скрипта.
Пример команды с использованием CURL:
curl -X POST http://localhost:8080/new -F File=@/path/to/file.sh -F name="Name" -F desc="Description"
где нужно соответсвенно указать хост и порт, где запущен наш сервер; путь к файлу, содержащему bash-скрипт; имя создаваемой команды; описание создаваемой команды. -
/cmd
GET запрос http://localhost:8080/cmd вернет ответом список внесенных ранее в базу данных пользовательских команд.
GET запрос http://localhost:8080/cmd?name=CommandName вернет ответом команду с именем CommandName и ее описание. -
/exec
GET запрос http://localhost:8080/exec?name=CommandName выполнит пользовательскую команду с именем CommandName. Результат выполнения вернется ответом и будет записан в базу данных в таблицу Log. -
/execlong
GET запрос http://localhost:8080/execlong?name=CommandName запускает в отдельной горутине выполнение долгой команды с именем CommandName и возвращает ответом присвоенный при запуске этой команде ID. Выполнение долгой команды можно прервать командой /stop.
Результат выполнения долгой команды записывается в базу данных в таблицу Log по мере выполнения команды. -
/stop
GET запрос http://localhost:8080/cmd?id=LongCommandID останавливает выполнение длинной команды, id которой равен LongCommandID (был присвоен при запуске длинной команды). Если длинная команда с таким id не выполняется, ответом отправляется соответствующее сообщение. -
/shutdown
GET запрос http://localhost:8080/shutdown позволяет удаленно безопасно завершить работу сервера.
Запуск тестов
Перед первым запуском тестов необходимо создать пустую базу с именем restapi_test.
Для запуска тестов нужно перейти в корневую директорию проекта и открыть для редактирования файл Makefile.
В разделе test в строках
go test -v ./internal/app/store -args -n name -p password -dbip DBServerIP go test -v ./internal/app/cmdexec -args -n name -p password -dbip DBServerIP
нужно заменить значения аргументов командной строки на реальные:
(name) - имя пользователя PostgreSQL;
(password) - пароль пользователя PostgreSQL;
(DBServerIP) - ip адрес сервера PostgreSQL.
После этого нужно в терминале перейти в корневую директорию проекта и выполнить команду make test.