package model import ( "crawlab/database" "github.com/apex/log" "github.com/globalsign/mgo" "github.com/globalsign/mgo/bson" "runtime/debug" "time" ) type Node struct { Id bson.ObjectId `json:"_id" bson:"_id"` Name string `json:"name" bson:"name"` Status string `json:"status" bson:"status"` Ip string `json:"ip" bson:"ip"` Port string `json:"port" bson:"port"` Mac string `json:"mac" bson:"mac"` Description string `json:"description" bson:"description"` // 前端展示 IsMaster bool `json:"is_master"` UpdateTs time.Time `json:"update_ts" bson:"update_ts"` CreateTs time.Time `json:"create_ts" bson:"create_ts"` } func (n *Node) Save() error { s, c := database.GetCol("nodes") defer s.Close() n.UpdateTs = time.Now() if err := c.UpdateId(n.Id, n); err != nil { return err } return nil } func (n *Node) Add() error { s, c := database.GetCol("nodes") defer s.Close() n.Id = bson.NewObjectId() n.UpdateTs = time.Now() n.CreateTs = time.Now() if err := c.Insert(&n); err != nil { debug.PrintStack() return err } return nil } func (n *Node) Delete() error { s, c := database.GetCol("nodes") defer s.Close() if err := c.RemoveId(n.Id); err != nil { debug.PrintStack() return err } return nil } func (n *Node) GetTasks() ([]Task, error) { tasks, err := GetTaskList(bson.M{"node_id": n.Id}, 0, 10, "-create_ts") //tasks, err := GetTaskList(nil, 0, 10, "-create_ts") if err != nil { debug.PrintStack() return []Task{}, err } return tasks, nil } func GetNodeList(filter interface{}) ([]Node, error) { s, c := database.GetCol("nodes") defer s.Close() var results []Node if err := c.Find(filter).All(&results); err != nil { debug.PrintStack() return results, err } return results, nil } func GetNode(id bson.ObjectId) (Node, error) { s, c := database.GetCol("nodes") defer s.Close() var node Node if err := c.FindId(id).One(&node); err != nil { if err != mgo.ErrNotFound { log.Errorf(err.Error()) debug.PrintStack() } return node, err } return node, nil } func GetNodeByMac(mac string) (Node, error) { s, c := database.GetCol("nodes") defer s.Close() var node Node if err := c.Find(bson.M{"mac": mac}).One(&node); err != nil { if err != mgo.ErrNotFound { log.Errorf(err.Error()) debug.PrintStack() } return node, err } return node, nil } func UpdateNode(id bson.ObjectId, item Node) error { s, c := database.GetCol("nodes") defer s.Close() var node Node if err := c.FindId(id).One(&node); err != nil { return err } if err := item.Save(); err != nil { return err } return nil } func GetNodeTaskList(id bson.ObjectId) ([]Task, error) { node, err := GetNode(id) if err != nil { return []Task{}, err } tasks, err := node.GetTasks() if err != nil { return []Task{}, err } return tasks, nil }