diff --git a/proxy/target/target_discovery_service.go b/proxy/target/target_discovery_service.go new file mode 100644 index 0000000..99760b9 --- /dev/null +++ b/proxy/target/target_discovery_service.go @@ -0,0 +1,273 @@ +package target + +import ( + "git.loafle.net/overflow/overflow_service/proxy/infra" + "git.loafle.net/overflow/overflow_service/proxy/probe" + "encoding/json" + "git.loafle.net/overflow/overflow_service/proxy/meta" + "strconv" + "git.loafle.net/overflow/discovery/discovery/types" + +) + +type TargetInfo struct { + Hosts *[]*types.DiscoveryHost `json:"hosts,omitempty"` + Probe *probe.Probe `json:"probe,omitempty"` +} + +func registInfraMachine(host * types.DiscoveryHost, p * probe.Probe) (*infra.InfraMachine, error) { + + is := infra.NewInfraService() + + im := infra.InfraMachine{} + im.Probe = p + + out, err := is.RegistMachine(&im) + + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), &im) + if err != nil { + return nil, err + } + + iim := infra.NewInfra(im.Id, &im) + _, err = is.Regist(iim) + if err != nil { + return nil, err + } + + return &im, nil + +} + +func registInfraOS(im *infra.InfraMachine, os string) (*infra.InfraOS, error) { + + is := infra.NewInfraService() + + io := infra.InfraOS{} + io.InfraMachine = im + miv := meta.MetaInfraVendor{} + if os == "Windows" { + miv.Id = "25" + } else if os == "Linux" { + miv.Id = "27" + } + io.MetaInfraVendor = &miv + + out, err := is.RegistOS(&io) + + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), &io) + if err != nil { + return nil, err + } + + iio := infra.NewInfra(io.Id, &io) + _, err = is.Regist(iio) + if err != nil { + return nil, err + } + + return &io, nil + +} + +func registInfraHost(host *types.DiscoveryHost, io *infra.InfraOS, p *probe.Probe ) (*infra.InfraHost, error) { + + is := infra.NewInfraService() + + ih := infra.InfraHost{} + ih.InfraOS = io + ih.Ip = json.Number(strconv.FormatInt(host.Ip, 10)) + ih.Mac = json.Number(strconv.FormatInt(host.Mac, 10)) + + out, err := is.RegistHost(&ih) + + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), &ih) + if err != nil { + return nil, err + } + + iih := infra.NewInfra(ih.Id, &ih) + out, err = is.Regist(iih) + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), iih) + if err != nil { + return nil, err + } + + + err = RegistTarget(host.Target, iih, p) + if err != nil { + return nil, err + } + + return &ih, nil +} + +func registInfraPort(port *types.DiscoveryPort, io *infra.InfraOS, p *probe.Probe) (*infra.InfraOSPort, error) { + + is := infra.NewInfraService() + + ip := infra.InfraOSPort{} + ip.InfraOS = io + ip.Port = json.Number(strconv.FormatUint(uint64(port.Number), 10)) + ip.PortType = port.PortType + //ip.MetaInfraVendor + //ip.TlsType + + out, err := is.RegistOSPort(&ip) + + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), &ip) + if err != nil { + return nil, err + } + + iip := infra.NewInfra(ip.Id, &ip) + out, err = is.Regist(iip) + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), iip) + if err != nil { + return nil, err + } + + err = RegistTarget(port.Target, iip, p) + if err != nil { + return nil, err + } + + return &ip, nil +} + +func registInfraService(ih *infra.InfraHost, port *types.DiscoveryPort, service *types.DiscoveryService, p *probe.Probe) (*infra.InfraServiceApplication, error) { + + is := infra.NewInfraService() + + 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) + + out, err := is.RegistService(&isa) + + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), &isa) + if err != nil { + return nil, err + } + + iisa := infra.NewInfra(isa.Id, &isa) + out, err = is.Regist(iisa) + if err != nil { + return nil, err + } + + err = json.Unmarshal([]byte(out), iisa) + if err != nil { + return nil, err + } + + err = RegistTarget(service.Target, iisa, p) + if err != nil { + return nil, err + } + + return &isa, nil +} + +//FIXME: Discovery Result +func (t *TargetService) RegistTarget(ti *TargetInfo) (string, error) { + + + + for _, host := range *ti.Hosts { + + im, err := registInfraMachine(host, ti.Probe) + + if err != nil { + return "", err + } + + io, err := registInfraOS(im, host.Os) + + if err != nil { + return "", err + } + + ih, err := registInfraHost(host, io, ti.Probe) + + if err != nil { + return "", err + } + + for _, port := range host.Ports { + + _, err := registInfraPort(port, io, ti.Probe) + + if err != nil { + return "", err + } + + for _, service := range port.Services { + + _, err := registInfraService(ih, port, service, ti.Probe) + + if err != nil { + return "", err + } + } + + } + + } + + return "", nil +} + + +func RegistTarget(check bool, i *infra.Infra, p *probe.Probe) error { + + if check == false { + return nil + } + + ttt := &Target{} + ttt.Infra = i + ttt.Probe = p + + ts := NewTargetService() + _, err := ts.Regist(ttt) + + if err != nil { + return err + } + + return nil +} \ No newline at end of file diff --git a/proxy/target/target_discovery_service_test.go b/proxy/target/target_discovery_service_test.go new file mode 100644 index 0000000..659249f --- /dev/null +++ b/proxy/target/target_discovery_service_test.go @@ -0,0 +1,49 @@ +package target + +import ( + "git.loafle.net/overflow/overflow_service/proxy/probe" + "testing" + "git.loafle.net/overflow/overflow_service/proxy/infra" + "reflect" + "encoding/json" + "io/ioutil" +) + +func TestTargetDiscovery(t *testing.T) { + + contents,_ := ioutil.ReadFile("../../dh.json") + + ti := TargetInfo{} + + err := json.Unmarshal(contents, &ti) + + if err != nil{ + t.Fatal(err) + } + + t.Log(ti) + + ts := NewTargetService() + ppp := probe.Probe{} + ppp.Id = "1" + ti.Probe = &ppp + out, err := ts.RegistTarget(&ti) + + if err != nil { + t.Fatal(err) + } + + t.Log(out) +} + +func TestInterface(t *testing.T) { + + aaa := &infra.InfraMachine{} + + var o interface{} = aaa + + tt := reflect.TypeOf(o) + t.Log(tt.Name()) + t.Log(tt.String()) + +} diff --git a/proxy/target/target_service.go b/proxy/target/target_service.go index 2b673b9..cc24ae5 100644 --- a/proxy/target/target_service.go +++ b/proxy/target/target_service.go @@ -3,12 +3,12 @@ package target import ( "encoding/json" "git.loafle.net/overflow/commons_go/model/timestamp" - "git.loafle.net/overflow/discovery/discovery/types" + "git.loafle.net/overflow/overflow_service/proxy/infra" - "git.loafle.net/overflow/overflow_service/proxy/meta" + "git.loafle.net/overflow/overflow_service/proxy/probe" "git.loafle.net/overflow/overflow_service/proxy/utils" - "strconv" + ) @@ -20,10 +20,7 @@ type Target struct { Infra *infra.Infra `json:"infra,omitempty"` } -type TargetInfo struct { - Hosts *[]*types.DiscoveryHost `json:"hosts,omitempty"` - Probe *probe.Probe `json:"probe,omitempty"` -} + type TargetService struct { } @@ -78,195 +75,3 @@ func (t *TargetService) Remove(target *Target) (string, error) { 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 - } - - iim := infra.NewInfra(im.Id, &im) - _, err = is.Regist(iim) - 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 - - out, err = is.RegistOS(&io) - - if err != nil { - return "", err - } - - err = json.Unmarshal([]byte(out), &io) - if err != nil { - return "", err - } - - iio := infra.NewInfra(io.Id, &io) - _, err = is.Regist(iio) - if err != nil { - return "", err - } - - ih := infra.InfraHost{} - ih.InfraOS = &io - ih.Ip = json.Number(strconv.FormatInt(host.Ip, 10)) - ih.Mac = json.Number(strconv.FormatInt(host.Mac, 10)) - - out, err = is.RegistHost(&ih) - - if err != nil { - return "", err - } - - err = json.Unmarshal([]byte(out), &ih) - if err != nil { - return "", err - } - - iih := infra.NewInfra(ih.Id, &ih) - out, err = is.Regist(iih) - if err != nil { - return "", err - } - - err = json.Unmarshal([]byte(out), iih) - if err != nil { - return "", err - } - - - err = RegistTarget(host.Target, iih, ti.Probe) - if err != nil { - return "", err - } - - - 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 - - out, err = is.RegistOSPort(&ip) - - if err != nil { - return "", err - } - - err = json.Unmarshal([]byte(out), &ip) - if err != nil { - return "", err - } - - iip := infra.NewInfra(ip.Id, &ip) - out, err = is.Regist(iip) - if err != nil { - return "", err - } - - err = json.Unmarshal([]byte(out), iip) - if err != nil { - return "", err - } - - err = RegistTarget(port.Target, iip, ti.Probe) - if err != nil { - return "", err - } - - 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) - - out, err = is.RegistService(&isa) - - if err != nil { - return "", err - } - - err = json.Unmarshal([]byte(out), &isa) - if err != nil { - return "", err - } - - iisa := infra.NewInfra(isa.Id, &isa) - out, err = is.Regist(iisa) - if err != nil { - return "", err - } - - err = json.Unmarshal([]byte(out), iisa) - if err != nil { - return "", err - } - - err = RegistTarget(service.Target, iisa, ti.Probe) - if err != nil { - return "", err - } - - } - - } - - } - - return "", nil -} - - -func RegistTarget(check bool, i *infra.Infra, p *probe.Probe) error { - - if check == false { - return nil - } - - ttt := &Target{} - ttt.Infra = i - ttt.Probe = p - - ts := NewTargetService() - _, err := ts.Regist(ttt) - - if err != nil { - return err - } - - return nil -} \ No newline at end of file diff --git a/proxy/target/target_service_test.go b/proxy/target/target_service_test.go index 22cc2f8..d0a8ff6 100644 --- a/proxy/target/target_service_test.go +++ b/proxy/target/target_service_test.go @@ -7,9 +7,6 @@ import ( "git.loafle.net/overflow/overflow_service/proxy/probe" "testing" - - "io/ioutil" - "reflect" ) func TestTargetRegist(t *testing.T) { @@ -65,42 +62,3 @@ func TestTargetDelete(t *testing.T) { } t.Log(res) } - -func TestTargetDiscovery(t *testing.T) { - - contents,_ := ioutil.ReadFile("../../dh.json") - - ti := TargetInfo{} - - err := json.Unmarshal(contents, &ti) - - if err != nil{ - t.Fatal(err) - } - - t.Log(ti) - - ts := NewTargetService() - ppp := probe.Probe{} - ppp.Id = "1" - ti.Probe = &ppp - out, err := ts.RegistTarget(&ti) - - if err != nil { - t.Fatal(err) - } - - t.Log(out) -} - -func TestInterface(t *testing.T) { - - aaa := &infra.InfraMachine{} - - var o interface{} = aaa - - tt := reflect.TypeOf(o) - t.Log(tt.Name()) - t.Log(tt.String()) - -}