From c0e8690bae308c4d75f8a5901ff7ff9a88acadaa Mon Sep 17 00:00:00 2001 From: vitaliy Date: Fri, 20 Jun 2025 15:11:48 +0300 Subject: [PATCH] first commit --- .gitignore | 0 README.md | 23 ++++++ cmd/agent_service.go | 167 +++++++++++++++++++++++++++++++++++++++ cmd/frontend_service.go | 115 +++++++++++++++++++++++++++ cmd/push_service.go | 138 ++++++++++++++++++++++++++++++++ cmd/rest_service.go | 123 ++++++++++++++++++++++++++++ cmd/templates/chat.html | 37 +++++++++ cmd/templates/index.html | 97 +++++++++++++++++++++++ doc/services.png | Bin 0 -> 50437 bytes go.mod | 3 + 10 files changed, 703 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 cmd/agent_service.go create mode 100644 cmd/frontend_service.go create mode 100644 cmd/push_service.go create mode 100644 cmd/rest_service.go create mode 100644 cmd/templates/chat.html create mode 100644 cmd/templates/index.html create mode 100644 doc/services.png create mode 100644 go.mod diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md new file mode 100644 index 0000000..d438b1e --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Code Runner + +Миссия проекта **Code Runner** — предоставить платформу, где студенты могут совершенствовать свои навыки программирования посредством решения различных задач на разных языках программирования. + + +## Поддержа языков + +Платформа поддерживает 1 язык программирования Python. + +## Дизайн системы + +![Описание изображения](doc/services.png) + + +## Рабочие Endpoints: + +### Frontend Service + +- `GET /task/{id}` \- Получить задачу по UUID + +### REST API Service + +- `POST /run` \- Отправить код на проверку diff --git a/cmd/agent_service.go b/cmd/agent_service.go new file mode 100644 index 0000000..48faf32 --- /dev/null +++ b/cmd/agent_service.go @@ -0,0 +1,167 @@ +package main + +import ( + "encoding/base64" + "encoding/json" + "fmt" + "log" + "os" + "os/exec" + + "github.com/streadway/amqp" +) + +func main() { + + type Code struct { + IDTask string `json:"id_task"` + TpRunner string `json:"tp_runner"` + Code string `json:"code"` + Test string `json:"test"` + } + + // Define RabbitMQ server URL. + amqpServerURL := os.Getenv("AMQP_SERVER_URL") + if amqpServerURL == "" { + amqpServerURL = "amqp://guest:guest@localhost:5672/" // Default URL if not set + } + + // Create a new RabbitMQ connection. + connectRabbitMQ, err := amqp.Dial(amqpServerURL) + if err != nil { + panic(err) + } + defer connectRabbitMQ.Close() + + // Opening a channel to our RabbitMQ instance over + // the connection we have already established. + channelRabbitMQ, err := connectRabbitMQ.Channel() + if err != nil { + panic(err) + } + defer channelRabbitMQ.Close() + + // Subscribing to QueueService1 for getting messages. + messages, err := channelRabbitMQ.Consume( + "QueueService1", // queue name + "", // consumer + true, // auto-ack + false, // exclusive + false, // no local + false, // no wait + nil, // arguments + ) + if err != nil { + log.Println(err) + } + + // Build a welcome message. + log.Println("Successfully connected to RabbitMQ") + log.Println("Waiting for messages") + + // Make a channel to receive messages into infinite loop. + forever := make(chan bool) + + go func() { + for message := range messages { + // For example, show received message in a console. + log.Printf(" > Received message: %s\n", message.Body) + // Создание экземпляра структуры Task + + var code_obj Code + + // Разбор JSON строки в структуру + err := json.Unmarshal([]byte(message.Body), &code_obj) + if err != nil { + log.Fatalf("Ошибка при разборе JSON: %v", err) + } + mkdir(code_obj.IDTask) + mkfile(code_obj.IDTask, code_obj.Code, "main.py") + mkfile(code_obj.IDTask, code_obj.Test, "test_hello.py") + run(code_obj.IDTask) + + fmt.Println(code_obj.Code) + + } + }() + + <-forever +} + +func mkdir(dirName string) { + // Имя директории, которую нужно создать + + // Права доступа к директории (0755 - чтение, запись, выполнение для владельца, чтение и выполнение для группы и остальных) + permissions := os.ModeDir | 0755 + + // Создание директории + err := os.Mkdir(dirName, permissions) + if err != nil { + log.Printf("Ошибка при создании директории: %v", err) + } + + fmt.Printf("Директория '%s' успешно создана.\n", dirName) +} + +func mkfile(dirName string, base64String string, fName string) { + + // Декодирование Base64 строки + decodedBytes, er := base64.StdEncoding.DecodeString(base64String) + if er != nil { + log.Fatalf("Ошибка при декодировании Base64: %v", er) + } + + // Преобразование байтов в строку + fileContent := string(decodedBytes) + + // Права доступа к файлу (0644 - чтение и запись для владельца, чтение для группы и остальных) + fileName := "./" + dirName + "/" + fName + permissions := 0644 + + // Преобразование содержимого в слайс байтов + data := []byte(fileContent) + + // Создание файла и запись содержимого + err := os.WriteFile(fileName, data, os.FileMode(permissions)) + if err != nil { + log.Fatalf("Ошибка при создании файла: %v", err) + } + + fmt.Printf("Файл '%s' успешно создан с содержимым.\n", fileName) + +} + +func run(idTask string) { + + // Получение текущей рабочей директории + currentDir, err := os.Getwd() + if err != nil { + log.Fatalf("Ошибка при получении текущей директории: %v", err) + } + + dir := currentDir + "/" + idTask + + // Изменение текущей рабочей директории + err = os.Chdir(dir) + if err != nil { + log.Fatalf("Ошибка при изменении директории: %v", err) + } + + // Команда для запуска Python с кодом + fileName := "test_hello.py" + + + cmd := exec.Command("python", "-m", "unittest", fileName) + + // Запуск команды и получение вывода + output, err := cmd.CombinedOutput() + if err != nil { + log.Fatalf("Ошибка при выполнении Python кода: %v\nВывод: %s", err, string(output)) + } + + // Вывод результата + // todo: записать в топик RMQ id_user_id_UUID + // { data: output} + fmt.Printf("Вывод Python:\n%s\n", string(output)) + +} diff --git a/cmd/frontend_service.go b/cmd/frontend_service.go new file mode 100644 index 0000000..d67be89 --- /dev/null +++ b/cmd/frontend_service.go @@ -0,0 +1,115 @@ +package main + +import ( + "context" + "database/sql" + "fmt" + "log" + "net/http" + + "github.com/gin-gonic/gin" + _ "github.com/lib/pq" // Import the PostgreSQL driver + "github.com/redis/go-redis/v9" +) + +const ( + dbHost = "localhost" + dbPort = 5432 + dbUser = "postgres" + dbPassword = "123" // Замените на свой пароль + dbName = "auth" +) + +func main() { + + // Создание клиента Redis + rdb := redis.NewClient(&redis.Options{ + Addr: "localhost:6379", // Адрес Redis сервера + Password: "", // Пароль, если требуется + DB: 0, // Номер базы данных + }) + + // Проверка подключения + ctx := context.Background() + pong, err := rdb.Ping(ctx).Result() + if err != nil { + fmt.Println("Ошибка подключения к Redis:", err) + return + } + + fmt.Println("Успешное подключение к Redis! Ответ:", pong) + + // Строка подключения к базе данных + connStr := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable", + dbHost, dbPort, dbUser, dbPassword, dbName) + + // to-do: написать обращение в кеш Redis + // Подключение к базе данных + db, err := sql.Open("postgres", connStr) + if err != nil { + log.Fatal(err) + } + defer db.Close() + + // Проверка подключения + err = db.Ping() + if err != nil { + log.Fatal(err) + } + + fmt.Println("Connected to the database!") + + router := gin.Default() + router.LoadHTMLGlob("./templates/*") + + // Обработчик для получения фрагмента кода + router.GET("/task/:id", func(c *gin.Context) { + var code string + + id := c.Param("id") + code, err := rdb.Get(ctx, id).Result() + if err != nil { + err := db.QueryRow("SELECT json_text FROM task WHERE id = $1", id).Scan(&code) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + // Пример использования: установка и получение значения + err = rdb.Set(ctx, id, code, 0).Err() + if err != nil { + fmt.Println("Ошибка при установке значения:", err) + return + } + fmt.Println("Установили значение по ключу:", err) + } + c.JSON(http.StatusOK, gin.H{"code": code}) + }) + + // Обработчик для обновления фрагмента кода + router.POST("/task/:id", func(c *gin.Context) { + id := c.Param("id") + var requestBody struct { + Code string `json:"code" binding:"required"` + } + + if err := c.BindJSON(&requestBody); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + _, err := db.Exec("UPDATE snippets SET code = $1 WHERE id = $2", requestBody.Code, id) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "Snippet updated successfully"}) + }) + + router.GET("/", func(c *gin.Context) { + c.HTML(http.StatusOK, "index.html", gin.H{}) + }) + + // Запуск сервера + router.Run(":8080") +} diff --git a/cmd/push_service.go b/cmd/push_service.go new file mode 100644 index 0000000..27b2416 --- /dev/null +++ b/cmd/push_service.go @@ -0,0 +1,138 @@ +package main + +import ( + "encoding/json" + "fmt" + "log" + "net/http" + + "os" + "github.com/streadway/amqp" + "github.com/gorilla/websocket" +) + + + +var upgrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + return true // Allow all origins (for development). In production, specify allowed origins. + }, +} + +func handleConnections(w http.ResponseWriter, r *http.Request) { + + type Code struct { + IDTask string `json:"id_task"` + TpRunner string `json:"tp_runner"` + Code string `json:"code"` + Test string `json:"test"` + } + + // Define RabbitMQ server URL. + amqpServerURL := os.Getenv("AMQP_SERVER_URL") + if amqpServerURL == "" { + amqpServerURL = "amqp://guest:guest@localhost:5672/" // Default URL if not set + } + + // Create a new RabbitMQ connection. + connectRabbitMQ, err := amqp.Dial(amqpServerURL) + if err != nil { + panic(err) + } + defer connectRabbitMQ.Close() + + // Opening a channel to our RabbitMQ instance over + // the connection we have already established. + channelRabbitMQ, err := connectRabbitMQ.Channel() + if err != nil { + panic(err) + } + defer channelRabbitMQ.Close() + + + // todo: заменен QueueService1 на динамический + // id_user_id_task + // Subscribing to QueueService1 for getting messages. + messages, err := channelRabbitMQ.Consume( + "QueueService1", // queue name + "", // consumer + true, // auto-ack + false, // exclusive + false, // no local + false, // no wait + nil, // arguments + ) + if err != nil { + log.Println(err) + } + + // Build a welcome message. + log.Println("Successfully connected to RabbitMQ") + log.Println("Waiting for messages") + + // Upgrade initial GET request to a websocket + ws, err := upgrader.Upgrade(w, r, nil) + if err != nil { + log.Fatal(err) + } + // Make sure we close the connection when the function returns + defer ws.Close() + + + // Make a channel to receive messages into infinite loop. + forever := make(chan bool) + + go func() { + for message := range messages { + // For example, show received message in a console. + log.Printf(" > Received message: %s\n", message.Body) + // Создание экземпляра структуры Task + + var code_obj Code + + // Разбор JSON строки в структуру + err := json.Unmarshal([]byte(message.Body), &code_obj) + if err != nil { + log.Fatalf("Ошибка при разборе JSON: %v", err) + } + // Write message back to browser + err = ws.WriteMessage(websocket.TextMessage, []byte(code_obj.Code)) + if err != nil { + log.Println(err) + return + } + fmt.Println(code_obj.Code) + + } + }() + + <-forever + + + // for { + // // Read message from browser + // _, msg, err := ws.ReadMessage() + // if err != nil { + // log.Println(err) + // return + // } + + // // Print the message to the console + // fmt.Printf("Received: %s\n", msg) + + // // Write message back to browser + // err = ws.WriteMessage(websocket.TextMessage, msg) + // if err != nil { + // log.Println(err) + // return + // } + // } +} + +func main() { + + fmt.Println("Starting WebSocket server...") + http.HandleFunc("/ws", handleConnections) + + log.Fatal(http.ListenAndServe(":8081", nil)) +} \ No newline at end of file diff --git a/cmd/rest_service.go b/cmd/rest_service.go new file mode 100644 index 0000000..9fbf493 --- /dev/null +++ b/cmd/rest_service.go @@ -0,0 +1,123 @@ +package main + +import ( + "fmt" + "log" + "os" + + "encoding/json" + + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/cors" + "github.com/gofiber/fiber/v2/middleware/logger" + "github.com/streadway/amqp" +) + +// Структура для JSON данных +type Code struct { + Id_task string `json:"id_task"` + Tp_runner string `json:"tp_runner"` + Code string `json:"code"` + Test string `json:"test"` +} + +func main() { + // Define RabbitMQ server URL. + amqpServerURL := os.Getenv("AMQP_SERVER_URL") + if amqpServerURL == "" { + amqpServerURL = "amqp://guest:guest@localhost:5672/" // Default URL if not set + } + + // Create a new RabbitMQ connection. + connectRabbitMQ, err := amqp.Dial(amqpServerURL) + if err != nil { + panic(err) + } + defer connectRabbitMQ.Close() + + // Let's start by opening a channel to our RabbitMQ + // instance over the connection we have already + // established. + channelRabbitMQ, err := connectRabbitMQ.Channel() + if err != nil { + panic(err) + } + defer channelRabbitMQ.Close() + + // With the instance and declare Queues that we can + // publish and subscribe to. + _, err = channelRabbitMQ.QueueDeclare( + "QueueService1", // queue name + true, // durable + false, // auto delete + false, // exclusive + false, // no wait + nil, // arguments + ) + if err != nil { + panic(err) + } + + // Create a new Fiber instance. + app := fiber.New() + + app.Use(cors.New(cors.Config{ + AllowOrigins: "*", + AllowMethods: "GET,POST,HEAD,PUT,DELETE,PATCH", + AllowHeaders: "Origin, Content-Type, Accept, Authorization", + })) + + // Add middleware. + app.Use( + logger.New(), // add simple logger + ) + + app.Get("/", func(c *fiber.Ctx) error { + return c.SendString("Hello, CORS is enabled!") + }) + // Add route. ?msg=bla + + app.Post("/run", func(c *fiber.Ctx) error { + //todo: Тестирование ручки на взаимодействие + // c клиентом. Расширить json добавив ID_USER + // из AUTH SERVICE + + // Create a message to publish. + // to-do: дописать приемку json + mess := new(Code) + + // Разбираем JSON из тела запроса и заполняем структуру + _ = c.BodyParser(mess) + jsonBody, err := json.Marshal(mess) + if err != nil { + log.Fatalf("Error encoding JSON: %v", err) + } + + fmt.Println(mess.Code) + message := amqp.Publishing{ + ContentType: "application/json", + Body: jsonBody, + } + + // message := amqp.Publishing{ + // ContentType: "text/plain", + // Body: []byte("Hello"), + // } + + // Attempt to publish a message to the queue. + if err := channelRabbitMQ.Publish( + "", // exchange + "QueueService1", // queue name + false, // mandatory + false, // immediate + message, // message to publish + ); err != nil { + return err + } + + return nil + }) + + // Start Fiber API server. + log.Fatal(app.Listen(":3000")) +} diff --git a/cmd/templates/chat.html b/cmd/templates/chat.html new file mode 100644 index 0000000..e6edc58 --- /dev/null +++ b/cmd/templates/chat.html @@ -0,0 +1,37 @@ + + + + WebSocket Client + + +

WebSocket Client

+ + +
+ + + + \ No newline at end of file diff --git a/cmd/templates/index.html b/cmd/templates/index.html new file mode 100644 index 0000000..484ece0 --- /dev/null +++ b/cmd/templates/index.html @@ -0,0 +1,97 @@ + + + + + + Code Editor + + + + + + +

Code Editor

+ + + + +
+ + + + \ No newline at end of file diff --git a/doc/services.png b/doc/services.png new file mode 100644 index 0000000000000000000000000000000000000000..086833fcb35329f42c294b2b3bcac09084f3dde9 GIT binary patch literal 50437 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 literal 0 HcmV?d00001 diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..a066529 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module git.gocommunity.ru/chertkov/code_runner + +go 1.23.6