e6956aa001
- React frontend with route-level code splitting - Backend rebranded from Baihu to TaskPool - DB brand migration script and local compatibility
86 lines
2.2 KiB
Go
86 lines
2.2 KiB
Go
package services
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/engigu/taskpool/internal/database"
|
|
"github.com/engigu/taskpool/internal/models"
|
|
"github.com/engigu/taskpool/internal/utils"
|
|
)
|
|
|
|
type InterconnectService struct{}
|
|
|
|
func NewInterconnectService() *InterconnectService {
|
|
return &InterconnectService{}
|
|
}
|
|
|
|
func (s *InterconnectService) GetNodes() ([]*models.InterconnectNode, error) {
|
|
var nodes []*models.InterconnectNode
|
|
err := database.DB.Find(&nodes).Error
|
|
return nodes, err
|
|
}
|
|
|
|
func (s *InterconnectService) GetNodeByID(id string) (*models.InterconnectNode, error) {
|
|
var node models.InterconnectNode
|
|
err := database.DB.Where("id = ?", id).First(&node).Error
|
|
return &node, err
|
|
}
|
|
|
|
func (s *InterconnectService) CreateNode(name, url, token, remark string) (*models.InterconnectNode, error) {
|
|
nodeID := utils.GenerateID()
|
|
if url == "" {
|
|
url = "tunnel://" + nodeID
|
|
}
|
|
node := &models.InterconnectNode{
|
|
ID: nodeID,
|
|
Name: name,
|
|
URL: url,
|
|
Token: strings.ToLower(token),
|
|
Remark: remark,
|
|
CreatedAt: models.Now(),
|
|
UpdatedAt: models.Now(),
|
|
}
|
|
err := database.DB.Create(node).Error
|
|
return node, err
|
|
}
|
|
|
|
func (s *InterconnectService) UpdateNode(id, name, url, token, remark string) (*models.InterconnectNode, error) {
|
|
node, err := s.GetNodeByID(id)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
node.Name = name
|
|
if url != "" {
|
|
node.URL = url
|
|
}
|
|
node.Token = token
|
|
node.Remark = remark
|
|
node.UpdatedAt = models.Now()
|
|
|
|
err = database.DB.Save(node).Error
|
|
return node, err
|
|
}
|
|
|
|
func (s *InterconnectService) DeleteNode(id string) error {
|
|
return database.DB.Where("id = ?", id).Delete(&models.InterconnectNode{}).Error
|
|
}
|
|
|
|
func (s *InterconnectService) GetNodeByToken(token string) (*models.InterconnectNode, error) {
|
|
var node models.InterconnectNode
|
|
err := database.DB.Where("token = ?", token).First(&node).Error
|
|
return &node, err
|
|
}
|
|
|
|
func (s *InterconnectService) UpdateNodeMonitorData(id string, metrics models.NodeMetrics) error {
|
|
now := models.Now()
|
|
return database.DB.Model(&models.InterconnectNode{}).
|
|
Where("id = ?", id).
|
|
Select("status", "metrics", "last_heartbeat_at", "updated_at").
|
|
Updates(models.InterconnectNode{
|
|
Status: "online",
|
|
Metrics: metrics,
|
|
LastHeartbeatAt: &now,
|
|
UpdatedAt: now,
|
|
}).Error
|
|
}
|