73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"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() bool {
|
|
resp, err := http.Get(fmt.Sprintf("http://%s:%d/status", server.IP, server.Port))
|
|
if err != nil {
|
|
return false
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
// 解碼json
|
|
var data map[string]interface{}
|
|
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
|
|
return false
|
|
}
|
|
|
|
fmt.Println("data:", data)
|
|
|
|
// 檢查服務器是否正常
|
|
if data["status"] != "ok" {
|
|
return false
|
|
}
|
|
|
|
// 檢查服務器是否正常
|
|
return true
|
|
}
|
|
|
|
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 {
|
|
if server.Status != "異常" {
|
|
if !server.CheckStatus() {
|
|
server.Status = "異常"
|
|
configs.ORMDB().Save(&server)
|
|
}
|
|
}
|
|
}
|
|
}
|