{"id":21363390,"url":"https://github.com/nsstnc/code-processor","last_synced_at":"2026-04-02T03:03:10.259Z","repository":{"id":258862550,"uuid":"869680444","full_name":"nsstnc/code-processor","owner":"nsstnc","description":"👨🏻‍💻 Code processor on Golang","archived":false,"fork":false,"pushed_at":"2024-11-06T01:47:50.000Z","size":202,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T16:32:47.478Z","etag":null,"topics":["api","docker","docker-compose","dockerfile","go","golang","grafana","http","microservices","postgresql","prometheus","rabbitmq","redis","rest-api"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nsstnc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-08T17:48:08.000Z","updated_at":"2024-11-06T01:52:46.000Z","dependencies_parsed_at":"2024-11-22T07:01:17.399Z","dependency_job_id":null,"html_url":"https://github.com/nsstnc/code-processor","commit_stats":null,"previous_names":["nsstnc/code-processor"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nsstnc/code-processor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcode-processor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcode-processor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcode-processor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcode-processor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nsstnc","download_url":"https://codeload.github.com/nsstnc/code-processor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nsstnc%2Fcode-processor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31294828,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:43:37.129Z","status":"online","status_checked_at":"2026-04-02T02:00:08.535Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","docker","docker-compose","dockerfile","go","golang","grafana","http","microservices","postgresql","prometheus","rabbitmq","redis","rest-api"],"created_at":"2024-11-22T06:19:21.874Z","updated_at":"2026-04-02T03:03:10.237Z","avatar_url":"https://github.com/nsstnc.png","language":"Go","readme":"# REST API для запуска кода\n\n## Обзор\nПроект включает в себя REST API для запуска кода на языках Python и C++ (при желании список доступных языков легко расширяется) с регистрацией и аутентификацией, которым можно пользоваться через документацию Swagger.\nВесь проект запускается в Docker-контейнере. Задачи с кодом, которые принимает API запускаются в контейнере внутри общего Docker-контейнера.\nСам проект содержит отдельный HTTP-сервис для запросов и сервис для настройки и запуска Docker-контейнера с кодом, а общаются они через RabbitMQ.\n\n## Возможности\n\n**REST API** позволяет:\n- **Регистрироваться в системе** по логину и паролю\n- **Аутентифицироваться в системе** по логину и паролю, а также получать токен доступа, хранящийся в сессии\n- Отправлять задачи по **запуску кода**\n- Получать статусы и результаты задач\n\nВ целом весь проект включает в себя:\n- HTTP-микросервис для работы с запросами\n- Микросервис для запуска кода в Docker-контейнере\n- RabbitMQ для координации между микросервисами\n- Базу данных PostgreSQL для хранения пользователей и задач\n- Хранилище Redis для сессий\n- docker-compose с описанием образов, а также настроенный makefile\n- Настроенные Prometheus и Grafana для отслеживания метрик\n\n## Стек технологий\n\n- **Backend**: Golang, PostgreSQL, RabbitMQ, Docker, Makefile, Redis, Prometheus, Grafana\n- **Frontend**: Swagger API\n\n## Маршруты HTTP-сервера\n| Описание маршрута | Маршрут |\n|------------|------------|\n| Зарегистрироваться | /register |\n| Залогиниться | /login |\n| Получить результат задачи | /result/{task_id} |\n| Получить статус задачи  | /status/{task_id} |\n| Создать задачу | /task |\n\n\n## Установка\n\n1. Клонировать репозиторий\n\n    ```bash\n    git clone https://github.com/nsstnc/code-processor.git\n    cd code-processor\n    ```\n\n## Запуск проекта\n1. Убедиться, что запущен docker daemon\n2. Собрать образы Docker\n```bash\n    make build\n```\n3. Запустить контейнеры\n```bash\n    make up\n```\n## Остановка проекта\n1. Убедиться, что запущен docker daemon\n2. Остановить и удалить все контейнеры\n```bash\n    make down\n```\n## Прогон тестов\n1. Запустить тесты\n```bash\n    make test\n```\n\n## Использование\n### Swagger API\nSwagger документация будет доступна по адресу: http://localhost:8000/swagger/index.html\n![Swagger](markdown-images/swagger.png)\nЧтобы воспользоваться маршрутами задач tasks, нужно сначала зарегистрироваться в системе, а затем залогиниться и получить токен доступа.\n#### После получения токена доступа прописываем задачу\n![Creating task](markdown-images/creating_task.png)\nОтправляем запрос и получаем id нашей задачи, с его помощью можем получить статус и результат задачи.\n#### Пример получения результата задачи\n![Getting task result](markdown-images/getting_result.png)\n\n### Prometheus и Grafana\nИнтерфейс Prometheus будет доступен по адресу: http://localhost:9090/\nИнтерфейс Grafana будет доступен по адресу: http://localhost:3000/. Пароль и логин задаются в docker-compose.yml файле. Логин: admin, пароль: admin\n\n## Файловая структура\n```\ncode-processor/  \n├── markdown-images/ # Папка с изображениями для README.md файла  \n├── docs/ # Папка c файлами документации Swagger \n├── http/ # Директория HTTP-сервиса\n   └── handlers.go # Хэндлеры HTTP-сервиса\n   └── metrics.go # Дополнительные метрики для Prometheus\n   └── routes.go # Маршрутизатор HTTP-сервиса\n├── processor/ # Директория сервиса Code Processor\n   └── docker.go # Сущность для настройки, запуска, получения результата и удаления внутреннего Docker-контейнера\n   └── Dockerfile # Dockerfile внутреннего контейнера\n   └── run_code.sh # shell-скрипт, который используется внутри Docker-контейнера для запуска переданного кода\n├── rabbitmq/\n   └── rabbitmq.go # Сущность для работы с RabbitMQ\n├── storage/ # Директория для работы с хранилищами\n    └── config.go # Конфиг для подключения к БД и Redis\n    └── session_repository.go # Хэндлеры для работы с сессиями\n    └── storage.go # Инициализация БД и создание таблиц\n    └── task_repository.go # Модели и хэндлеры для работы с задачами\n    └── user_repository.go # Модели и хэндлеры для работы с пользователями\n├── tests/ # Репозиторий с тестами на python\n├── config.yml # Файл конфигурации для PostgreSQL и Redis\n├── docker-compose.yml # Описание всех docker-образов проекта\n├── Dockerfile # Докерфайл контейнера code-processor\n├── go.mod # Модуль go\n├── go.sum # Контрольные суммы go.mod\n├── main.go # Основной файл с запуском HTTP-сервера, RabbitMQ и хранилища\n├── Makefile # Makefile для работы с проектом\n├── prometheus.yml # Конфигурация Prometheus\n├── README.md # Документация\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnsstnc%2Fcode-processor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnsstnc%2Fcode-processor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnsstnc%2Fcode-processor/lists"}