This commit is contained in:
2023-05-14 07:00:24 +08:00
parent 2423213e9a
commit ee3b60eccc
18 changed files with 273 additions and 1221 deletions

View File

@@ -1,13 +1,5 @@
package models
import (
"log"
"main/configs"
"net/http"
"strconv"
"time"
)
type Task struct {
ID int `json:"id"`
Name string `json:"name"`
@@ -19,183 +11,45 @@ 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 {
log.Println(err)
return err
}
defer db.Close()
stmt, err := db.Prepare("INSERT INTO tasks(name, type, created_at, updated_at) values(?, ?, ?, ?)")
if err != nil {
log.Println(err)
return err
}
defer stmt.Close()
result, err := stmt.Exec(task.Name, task.Type, task.CreatedAt, task.UpdatedAt)
if err != nil {
log.Println(err)
return err
}
id, err := result.LastInsertId()
if err != nil {
return err
}
task.ID = int(id)
return nil
}
func (task *Task) Delete() error {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return err
}
defer db.Close()
stmt, err := db.Prepare("DELETE FROM tasks WHERE id = ?")
if err != nil {
log.Println(err)
return err
}
defer stmt.Close()
_, err = stmt.Exec(task.ID)
if err != nil {
log.Println(err)
return err
}
return nil
}
func (task *Task) Update() error {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return err
}
defer db.Close()
stmt, err := db.Prepare("UPDATE tasks SET name = ?, type = ?, updated_at = ? WHERE id = ?")
if err != nil {
log.Println(err)
return err
}
defer stmt.Close()
_, err = stmt.Exec(task.Name, task.Type, task.UpdatedAt, task.ID)
if err != nil {
log.Println(err)
return err
}
return nil
}
func (task *Task) Get() error {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return err
}
defer db.Close()
err = db.QueryRow("SELECT name, type, created_at, updated_at FROM tasks WHERE id = ?", task.ID).Scan(&task.Name, &task.Type, &task.CreatedAt, &task.UpdatedAt)
if err != nil {
log.Println(err)
return err
}
return nil
}
func QueryTask(id int) (task Task) {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return
}
defer db.Close()
err = db.QueryRow("SELECT id, name, type, created_at, updated_at FROM tasks WHERE id = ?", id).Scan(&task.ID, &task.Name, &task.Type, &task.CreatedAt, &task.UpdatedAt)
if err != nil {
log.Println(err)
return
}
return
}
func QueryTasks(page int, pagesize int) (tasks []interface{}) {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return
}
defer db.Close()
rows, err := db.Query("SELECT id, name, type, created_at, updated_at FROM tasks LIMIT ?, ?", (page-1)*pagesize, pagesize)
if err != nil {
log.Println(err)
return
}
defer rows.Close()
for rows.Next() {
task := Task{}
err := rows.Scan(&task.ID, &task.Name, &task.Type, &task.CreatedAt, &task.UpdatedAt)
if err != nil {
log.Println(err)
return
}
tasks = append(tasks, task)
}
return
}
func CountTasks() (count int) {
db, err := configs.GetDB()
if err != nil {
log.Println(err)
return
}
defer db.Close()
err = db.QueryRow("SELECT COUNT(*) FROM tasks").Scan(&count)
if err != nil {
log.Println(err)
return
}
return
}
//// 推理任務
//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
// }
// }
//
//}