Files
crawlab/backend/services/local_node/node_info.go
2020-05-26 16:15:05 +08:00

75 lines
1.5 KiB
Go

package local_node
import (
"errors"
"github.com/hashicorp/go-sockaddr"
"os"
)
var localNode *LocalNode
type IdentifyType string
const (
Ip = IdentifyType("ip")
Mac = IdentifyType("mac")
Hostname = IdentifyType("hostname")
)
type local struct {
Ip string
Mac string
Hostname string
Identify string
IdentifyType IdentifyType
}
type LocalNode struct {
local
mongo
}
func (l *LocalNode) Ready() error {
err := localNode.load(true)
if err != nil {
return err
}
go localNode.watch()
return nil
}
func NewLocalNode(ip string, identify string, identifyTypeString string) (node *LocalNode, err error) {
addrs, err := sockaddr.GetPrivateInterfaces()
if ip == "" {
if err != nil {
return node, err
}
if len(addrs) == 0 {
return node, errors.New("address not found")
}
ipaddr := *sockaddr.ToIPAddr(addrs[0].SockAddr)
ip = ipaddr.NetIP().String()
}
mac := addrs[0].HardwareAddr.String()
hostname, err := os.Hostname()
if err != nil {
return node, err
}
local := local{Ip: ip, Mac: mac, Hostname: hostname}
switch IdentifyType(identifyTypeString) {
case Ip:
local.Identify = local.Ip
local.IdentifyType = Ip
case Mac:
local.Identify = local.Mac
local.IdentifyType = Mac
case Hostname:
local.Identify = local.Hostname
local.IdentifyType = Hostname
default:
local.Identify = identify
local.IdentifyType = IdentifyType(identifyTypeString)
}
return &LocalNode{local: local, mongo: mongo{}}, nil
}