package models import ( "encoding/json" "fmt" "log" "main/configs" "net/http" "time" ) type Server struct { ID int `json:"id" gorm:"primary_key"` Name string `json:"name"` Type string `json:"type"` // (訓練|推理) IP string `json:"ip"` Port int `json:"port"` Status string `json:"status"` // (異常|初始化|閒置|就緒|工作中|關閉中) UserName string `json:"username"` Password string `json:"password"` Models []map[string]interface{} `json:"models" gorm:"-"` // 數據庫不必保存 CreatedAt time.Time `json:"created_at" gorm:"autoCreateTime"` UpdatedAt time.Time `json:"updated_at" gorm:"autoUpdateTime"` } func (server *Server) CheckStatus() (err error) { // 不用類型的模型有不同的狀態檢查方式 if server.Type == "train" { } resp, err := http.Get(fmt.Sprintf("http://%s:%d/status", server.IP, server.Port)) if err != nil { log.Println("服務器狀態異常", err) server.Status = "異常" return } defer resp.Body.Close() // 解碼json var data map[string]interface{} if err = json.NewDecoder(resp.Body).Decode(&data); err != nil { return } log.Println("data:", data) // 檢查服務器是否正常 if data["status"] != "ok" { log.Println("服務器狀態異常", err) server.Status = "異常" return } configs.ORMDB().Save(&server) // 檢查服務器是否正常 return } func init() { configs.ORMDB().AutoMigrate(&Server{}) // 添加一個預設的訓練機 configs.ORMDB().Create(&Server{ Name: "GPU T4", Type: "train", IP: "106.15.192.42", Port: 7860, Status: "閒置", }) // 檢查所有服務器的狀態, 無效的服務器設置為異常 var servers []Server configs.ORMDB().Find(&servers) for _, server := range servers { server.CheckStatus() } }