From 2ab29d1e022b94cff687475fa1fef15d5ea7a8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=9C=E8=8F=AF?= Date: Thu, 11 May 2023 07:50:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E4=BD=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + configs/sqlite3.go | 2 ++ models/{Servers.go => Server.go} | 1 + models/Task.go | 46 ++++++++++++++++++++++++++++++++ models/User.go | 42 +++++++++++++++++++++++++++++ routers/users.go | 18 +++++++++++++ 6 files changed, 110 insertions(+) rename models/{Servers.go => Server.go} (98%) create mode 100644 routers/users.go diff --git a/README.md b/README.md index e5c4875..5d002e1 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ POST | /api/{name} | 篩選:創建新對象 - [ ] /api/models/{model_id} [#模型詳情](#模型詳情) - [ ] /api/images/{image_id} [#圖片詳情](#圖片詳情) - [ ] /api/params/{params_id} [#參數詳情](#參數詳情) +- [ ] /api/server/{server_id} [#服務詳情](#服務詳情) 詳情接口-請求方式: diff --git a/configs/sqlite3.go b/configs/sqlite3.go index 06e899b..c7987e3 100644 --- a/configs/sqlite3.go +++ b/configs/sqlite3.go @@ -61,7 +61,9 @@ func init() { CREATE TABLE IF NOT EXISTS users( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, + email TEXT, password TEXT, + slat TEXT, created_at TEXT, updated_at TEXT ); diff --git a/models/Servers.go b/models/Server.go similarity index 98% rename from models/Servers.go rename to models/Server.go index 5fbc6c0..8eea7ab 100644 --- a/models/Servers.go +++ b/models/Server.go @@ -8,6 +8,7 @@ import ( type Server struct { ID int `json:"id"` Name string `json:"name"` + Type string `json:"type"` // (訓練|推理) IP string `json:"ip"` Port int `json:"port"` Username string `json:"username"` diff --git a/models/Task.go b/models/Task.go index b316ca5..bcdc2d6 100644 --- a/models/Task.go +++ b/models/Task.go @@ -3,6 +3,9 @@ package models import ( "log" "main/configs" + "net/http" + "strconv" + "time" ) type Task struct { @@ -16,6 +19,49 @@ type Task struct { UserID int `json:"user_id"` } +// 推理任務 +func startInferenceTask(task *Task) { + + // 獲取一臺可用的 GPU 資源 + // ... + + // 執行推理任務 + // ... + + // 更新任務狀態 + task.Status = "running" + task.Progress = 0 + task.Update() + + // 監聽任務狀態 + for { + // 延遲 1 秒 + time.Sleep(1 * time.Second) + + // 查詢任務狀態 + resp, err := http.Get("http://localhost:5000/api/v1/tasks/" + strconv.Itoa(task.ID)) + if err != nil { + log.Println(err) + continue + } + defer resp.Body.Close() + + // 解析任務狀態 + // ... + + // 更新任務狀態 + task.Progress = 100 + task.Status = "success" + task.Update() + + // 任務結束判定 + if task.Progress == 100 { + break + } + } + +} + func (task *Task) Create() error { db, err := configs.GetDB() if err != nil { diff --git a/models/User.go b/models/User.go index 9030a25..be015c0 100644 --- a/models/User.go +++ b/models/User.go @@ -9,6 +9,8 @@ type User struct { ID int `json:"id"` Name string `json:"name"` Email string `json:"email"` + Password string `json:"password"` + Slat string `json:"slat"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` } @@ -136,3 +138,43 @@ func (user *User) GetByEmail() error { } return nil } + +func QueryUsers(page, pagesize int) (list []interface{}) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return + } + defer db.Close() + rows, err := db.Query("SELECT id, name, email, created_at, updated_at FROM users LIMIT ?, ?", (page-1)*pagesize, pagesize) + if err != nil { + log.Println(err) + return + } + defer rows.Close() + for rows.Next() { + var user User + err := rows.Scan(&user.ID, &user.Name, &user.Email, &user.CreatedAt, &user.UpdatedAt) + if err != nil { + log.Println(err) + return + } + list = append(list, user) + } + return +} + +func CountUsers() (count int) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return + } + defer db.Close() + err = db.QueryRow("SELECT COUNT(*) FROM users").Scan(&count) + if err != nil { + log.Println(err) + return + } + return +} diff --git a/routers/users.go b/routers/users.go new file mode 100644 index 0000000..4b3da70 --- /dev/null +++ b/routers/users.go @@ -0,0 +1,18 @@ +package routers + +import ( + "main/models" + "main/utils" + "net/http" +) + +func UsersGet(w http.ResponseWriter, r *http.Request) { + var listview models.ListView + listview.Page = utils.ParamInt(r.URL.Query().Get("page"), 1) + listview.PageSize = utils.ParamInt(r.URL.Query().Get("pageSize"), 10) + listview.List = models.QueryUsers(listview.Page, listview.PageSize) + listview.Total = models.CountUsers() + listview.Next = listview.Page*listview.PageSize < listview.Total + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(listview.ToJSON()) +}