overflow_service/proxy/target/target_service.go
snoop 6476e82b2a ing
target create
2017-06-27 12:11:38 +09:00

148 lines
3.1 KiB
Go

package target
import (
"encoding/json"
"git.loafle.net/overflow/commons_go/model/timestamp"
"git.loafle.net/overflow/overflow_service/proxy/infra"
"git.loafle.net/overflow/overflow_service/proxy/probe"
"git.loafle.net/overflow/overflow_service/proxy/utils"
"strconv"
"git.loafle.net/overflow/overflow_service/proxy/meta"
"git.loafle.net/overflow/discovery/discovery/types"
)
type Target struct {
Id json.Number `json:"id,Number,omitempty"`
CreateDate timestamp.Timestamp `json:"createDate,omitempty"`
Probe *probe.Probe `json:"probe,omitempty"`
Infra *infra.Infra `json:"infra,omitempty"`
}
type TargetInfo struct {
Hosts *[]*types.DiscoveryHost `json:"hosts,omitempty"`
Probe *probe.Probe `json:"probe,omitempty"`
}
type TargetService struct {
}
func NewTargetService() *TargetService {
return &TargetService{}
}
func (t *TargetService) GetModel() interface{} {
return &Target{}
}
func (t *TargetService) ReadAllByProbe(p *probe.Probe) (string, error) {
out, err := utils.InvokeDBByModel("target", "findAllByProbe", p, utils.MODEL_PROBE)
if err != nil {
return "", err
}
return out, err
}
func (t *TargetService) Regist(target *Target) (string, error) {
out, err := utils.InvokeDBByModel("target", "save", target, utils.MODEL_TARGET)
if err != nil {
return "", err
}
return out, nil
}
func (t *TargetService) Read(id string) (string, error) {
out, err := utils.InvokeDBByModel("target", "findOne", id, utils.MODEL_LONG)
if err != nil {
return "", err
}
return out, nil
}
func (t *TargetService) Remove(target *Target) (string, error) {
out, err := utils.InvokeDBByModel("target", "delete", target, utils.MODEL_TARGET)
if err != nil {
return "", err
}
return out, nil
}
//FIXME: Discovery Result
func (t *TargetService) RegistTarget(ti *TargetInfo) (string, error) {
is := infra.NewInfraService()
for _, host := range *ti.Hosts {
im := infra.InfraMachine{}
im.Probe = *ti.Probe
out, err := is.RegistMachine(&im)
if err != nil {
return "", err
}
err = json.Unmarshal([]byte(out), &im)
if err != nil {
return "", err
}
io := infra.InfraOS{}
io.InfraMachine = im
miv := meta.MetaInfraVendor{}
if host.Os == "Windows" {
miv.Id = "25"
} else if host.Os == "Linux" {
miv.Id = "27"
}
io.MetaInfraVendor = miv
ih := infra.InfraHost{}
ih.InfraOS = io
ih.Ip = json.Number(strconv.FormatInt(host.Ip, 10))
ih.Mac = json.Number(strconv.FormatInt(host.Mac, 10))
//i := infra.Infra{}
for _, port := range host.Ports{
ip := infra.InfraOSPort{}
ip.InfraOS = io
ip.Port = json.Number(strconv.FormatUint(uint64(port.Number), 10))
ip.PortType = port.PortType
//ip.MetaInfraVendor
//ip.TlsType
for _, service := range port.Services {
isa := infra.InfraServiceApplication{}
isa.InfraHost = ih
isa.PortType = port.PortType
//isa.TlsType
isa.Port = json.Number(strconv.FormatUint(uint64(port.Number), 10))
//isa.MetaInfraVendor
isa.MetaInfraVendor = *meta.NewMetaInfraVendorByService(service.ServiceName)
}
}
}
return "", nil
}