ing
This commit is contained in:
		
							parent
							
								
									e07d0717a2
								
							
						
					
					
						commit
						570a0241a0
					
				@ -25,15 +25,15 @@ func DiscoverZone(dz *model.DiscoveryZone) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DiscoverHost(dh *model.DiscoveryHost) {
 | 
			
		||||
	discoverer.discoverHost(dh)
 | 
			
		||||
	discoverer.discoverHost(dh.Zone, dh)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DiscoverPort(dp *model.DiscoveryPort) {
 | 
			
		||||
	discoverer.discoverPort(dp)
 | 
			
		||||
	discoverer.discoverPort(dp.Host, dp)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func DiscoverService(ds *model.DiscoveryService) {
 | 
			
		||||
	discoverer.discoverService(ds)
 | 
			
		||||
	discoverer.discoverService(ds.Port, ds)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func Stop() {
 | 
			
		||||
@ -57,9 +57,6 @@ func (d *discovery) start() {
 | 
			
		||||
	d.sendChan = make(chan interface{})
 | 
			
		||||
	d.errChan = make(chan error)
 | 
			
		||||
	logging.Logger().Info(fmt.Sprintf("Discovery: discovery is started"))
 | 
			
		||||
 | 
			
		||||
	d.stopWg.Add(1)
 | 
			
		||||
	go handle(d)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *discovery) stop() {
 | 
			
		||||
@ -73,47 +70,141 @@ func (d *discovery) stop() {
 | 
			
		||||
	logging.Logger().Info(fmt.Sprintf("Discovery: discovery is stopped"))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func handle(d *discovery) {
 | 
			
		||||
	defer d.stopWg.Done()
 | 
			
		||||
func (d *discovery) discoverZone(dz *model.DiscoveryZone) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverZone is start"))
 | 
			
		||||
 | 
			
		||||
	d.stopWg.Add(1)
 | 
			
		||||
	resultChan := make(chan *model.Zone)
 | 
			
		||||
	errChan := make(chan error)
 | 
			
		||||
	doneChan := make(chan struct{})
 | 
			
		||||
 | 
			
		||||
	defer func() {
 | 
			
		||||
		close(resultChan)
 | 
			
		||||
		close(errChan)
 | 
			
		||||
		close(doneChan)
 | 
			
		||||
		d.stopWg.Done()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	go scanZone(dz, resultChan, errChan, doneChan)
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case z := <-resultChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("zone: %v", z))
 | 
			
		||||
			if nil != dz.DiscoveryHost {
 | 
			
		||||
				d.discoverHost(z, dz.DiscoveryHost)
 | 
			
		||||
			}
 | 
			
		||||
		case err := <-errChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("zone err: %v", err))
 | 
			
		||||
		case <-d.stopChan:
 | 
			
		||||
			return
 | 
			
		||||
		case data := <-d.sendChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("chan: %v", data))
 | 
			
		||||
		case <-doneChan:
 | 
			
		||||
			logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverZone is complete"))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *discovery) discoverZone(dz *model.DiscoveryZone) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverZone is start"))
 | 
			
		||||
 | 
			
		||||
	doneChan := make(chan struct{})
 | 
			
		||||
func (d *discovery) discoverHost(zone *model.Zone, dh *model.DiscoveryHost) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverHost is start"))
 | 
			
		||||
 | 
			
		||||
	d.stopWg.Add(1)
 | 
			
		||||
	defer d.stopWg.Done()
 | 
			
		||||
	resultChan := make(chan *model.Host)
 | 
			
		||||
	errChan := make(chan error)
 | 
			
		||||
	doneChan := make(chan struct{})
 | 
			
		||||
 | 
			
		||||
	go scanZone(d, dz, doneChan)
 | 
			
		||||
	defer func() {
 | 
			
		||||
		close(resultChan)
 | 
			
		||||
		close(errChan)
 | 
			
		||||
		close(doneChan)
 | 
			
		||||
		d.stopWg.Done()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	select {
 | 
			
		||||
	case <-d.stopChan:
 | 
			
		||||
		<-doneChan
 | 
			
		||||
	case <-doneChan:
 | 
			
		||||
		logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverZone is complete"))
 | 
			
		||||
	go scanHost(zone, dh, resultChan, errChan, doneChan)
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case h := <-resultChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("host: %v", h))
 | 
			
		||||
			if nil != dh.DiscoveryPort {
 | 
			
		||||
				d.discoverPort(h, dh.DiscoveryPort)
 | 
			
		||||
			}
 | 
			
		||||
		case err := <-errChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("host err: %v", err))
 | 
			
		||||
		case <-d.stopChan:
 | 
			
		||||
			return
 | 
			
		||||
		case <-doneChan:
 | 
			
		||||
			logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverHost is complete"))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *discovery) discoverHost(dh *model.DiscoveryHost) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("DiscoverHost"))
 | 
			
		||||
func (d *discovery) discoverPort(host *model.Host, dp *model.DiscoveryPort) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverPort is start"))
 | 
			
		||||
 | 
			
		||||
	d.stopWg.Add(1)
 | 
			
		||||
	resultChan := make(chan *model.Port)
 | 
			
		||||
	errChan := make(chan error)
 | 
			
		||||
	doneChan := make(chan struct{})
 | 
			
		||||
 | 
			
		||||
	defer func() {
 | 
			
		||||
		close(resultChan)
 | 
			
		||||
		close(errChan)
 | 
			
		||||
		close(doneChan)
 | 
			
		||||
		d.stopWg.Done()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	go scanPort(host, dp, resultChan, errChan, doneChan)
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case p := <-resultChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("port: %v", p))
 | 
			
		||||
			if nil != dp.DiscoveryService {
 | 
			
		||||
				d.discoverService(p, dp.DiscoveryService)
 | 
			
		||||
			}
 | 
			
		||||
		case err := <-errChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("port err: %v", err))
 | 
			
		||||
		case <-d.stopChan:
 | 
			
		||||
			return
 | 
			
		||||
		case <-doneChan:
 | 
			
		||||
			logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverPort is complete"))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *discovery) discoverPort(dp *model.DiscoveryPort) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("DiscoverPort"))
 | 
			
		||||
}
 | 
			
		||||
func (d *discovery) discoverService(port *model.Port, ds *model.DiscoveryService) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverService is start"))
 | 
			
		||||
 | 
			
		||||
func (d *discovery) discoverService(ds *model.DiscoveryService) {
 | 
			
		||||
	logging.Logger().Debug(fmt.Sprintf("DiscoverService"))
 | 
			
		||||
	d.stopWg.Add(1)
 | 
			
		||||
	resultChan := make(chan *model.Service)
 | 
			
		||||
	errChan := make(chan error)
 | 
			
		||||
	doneChan := make(chan struct{})
 | 
			
		||||
 | 
			
		||||
	defer func() {
 | 
			
		||||
		close(resultChan)
 | 
			
		||||
		close(errChan)
 | 
			
		||||
		close(doneChan)
 | 
			
		||||
		d.stopWg.Done()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	go scanService(port, ds, resultChan, errChan, doneChan)
 | 
			
		||||
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
		case s := <-resultChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("service: %v", s))
 | 
			
		||||
		case err := <-errChan:
 | 
			
		||||
			logging.Logger().Info(fmt.Sprintf("service err: %v", err))
 | 
			
		||||
		case <-d.stopChan:
 | 
			
		||||
			return
 | 
			
		||||
		case <-doneChan:
 | 
			
		||||
			logging.Logger().Debug(fmt.Sprintf("Discovery: DiscoverService is complete"))
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *discovery) sendResult() {
 | 
			
		||||
 | 
			
		||||
@ -2,5 +2,7 @@ package discovery
 | 
			
		||||
 | 
			
		||||
import "git.loafle.net/overflow/overflow_discovery/api/module/discovery/model"
 | 
			
		||||
 | 
			
		||||
func scanHost(d *discovery, dh *model.DiscoveryHost, doneChan chan<- struct{}) {
 | 
			
		||||
func scanHost(zone *model.Zone, dh *model.DiscoveryHost, resultChan chan *model.Host, errChan chan error, doneChan chan<- struct{}) {
 | 
			
		||||
 | 
			
		||||
	doneChan <- struct{}{}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										7
									
								
								discovery/port.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								discovery/port.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
package discovery
 | 
			
		||||
 | 
			
		||||
import "git.loafle.net/overflow/overflow_discovery/api/module/discovery/model"
 | 
			
		||||
 | 
			
		||||
func scanPort(host *model.Host, dp *model.DiscoveryPort, resultChan chan *model.Port, errChan chan error, doneChan chan<- struct{}) {
 | 
			
		||||
	doneChan <- struct{}{}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										7
									
								
								discovery/service.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								discovery/service.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
			
		||||
package discovery
 | 
			
		||||
 | 
			
		||||
import "git.loafle.net/overflow/overflow_discovery/api/module/discovery/model"
 | 
			
		||||
 | 
			
		||||
func scanService(port *model.Port, ds *model.DiscoveryService, resultChan chan *model.Service, errChan chan error, doneChan chan<- struct{}) {
 | 
			
		||||
	doneChan <- struct{}{}
 | 
			
		||||
}
 | 
			
		||||
@ -8,7 +8,7 @@ import (
 | 
			
		||||
	"git.loafle.net/overflow/overflow_discovery/api/module/discovery/model"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func scanZone(d *discovery, dz *model.DiscoveryZone, doneChan chan<- struct{}) {
 | 
			
		||||
func scanZone(dz *model.DiscoveryZone, resultChan chan *model.Zone, errChan chan error, doneChan chan<- struct{}) {
 | 
			
		||||
	var err error
 | 
			
		||||
	var ifaces []net.Interface
 | 
			
		||||
	var addrs []net.Addr
 | 
			
		||||
@ -23,7 +23,7 @@ func scanZone(d *discovery, dz *model.DiscoveryZone, doneChan chan<- struct{}) {
 | 
			
		||||
	// }
 | 
			
		||||
 | 
			
		||||
	if ifaces, err = net.Interfaces(); nil != err {
 | 
			
		||||
		d.errChan <- err
 | 
			
		||||
		errChan <- err
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -32,14 +32,14 @@ func scanZone(d *discovery, dz *model.DiscoveryZone, doneChan chan<- struct{}) {
 | 
			
		||||
	for _, i := range ifaces {
 | 
			
		||||
 | 
			
		||||
		if addrs, err = i.Addrs(); nil != err {
 | 
			
		||||
			d.errChan <- err
 | 
			
		||||
			errChan <- err
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for _, addr := range addrs {
 | 
			
		||||
 | 
			
		||||
			if _, ipnet, err = net.ParseCIDR(addr.String()); nil != err {
 | 
			
		||||
				d.errChan <- err
 | 
			
		||||
				errChan <- err
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			if ipnet.IP.IsLoopback() || checkSameZone(zones, ipnet) || checkExclude(dz.ExcludePatterns, i.Name) {
 | 
			
		||||
@ -55,7 +55,7 @@ func scanZone(d *discovery, dz *model.DiscoveryZone, doneChan chan<- struct{}) {
 | 
			
		||||
				IP:      strings.Split(addr.String(), "/")[0],
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			d.sendChan <- z
 | 
			
		||||
			resultChan <- z
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user