mirror of
https://github.com/Luzifer/continuous-spark.git
synced 2024-12-20 01:31:24 +00:00
Add source interface selection
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
fe7f6ac428
commit
ad2b39d4b9
2 changed files with 31 additions and 7 deletions
3
main.go
3
main.go
|
@ -18,6 +18,7 @@ var (
|
|||
InfluxHost string `flag:"influx-host" default:"http://localhost:8086" description:"Host with protocol of the InfluxDB"`
|
||||
InfluxPass string `flag:"influx-pass" default:"" description:"Password for the InfluxDB user"`
|
||||
InfluxUser string `flag:"influx-user" default:"" description:"Username for the InfluxDB connection"`
|
||||
Interface string `flag:"interface" default:"" description:"Bind to interface for testing a specific interface throughput"`
|
||||
Interval time.Duration `flag:"interval" default:"15m" description:"Interval to execute test in"`
|
||||
LogLevel string `flag:"log-level" default:"info" description:"Set log level (debug, info, warning, error)"`
|
||||
OneShot bool `flag:"oneshot,1" default:"false" description:"Execute one measurement and exit (for cron execution)"`
|
||||
|
@ -183,7 +184,7 @@ func writeTSV(t *testResult) error {
|
|||
func execTest() (*testResult, error) {
|
||||
t := newTestResult()
|
||||
|
||||
sc := newSparkClient(cfg.Server, cfg.Port)
|
||||
sc := newSparkClient(cfg.Server, cfg.Port, cfg.Interface)
|
||||
if err := sc.ExecutePingTest(t); err != nil {
|
||||
return nil, errors.Wrap(err, "Ping-test failed")
|
||||
}
|
||||
|
|
35
spark.go
35
spark.go
|
@ -61,19 +61,42 @@ func (t testResult) String() string {
|
|||
}
|
||||
|
||||
type sparkClient struct {
|
||||
remote string
|
||||
conn net.Conn
|
||||
reader *bufio.Reader
|
||||
bindInterfaceName string
|
||||
remote string
|
||||
conn net.Conn
|
||||
reader *bufio.Reader
|
||||
}
|
||||
|
||||
func newSparkClient(hostname string, port int) *sparkClient {
|
||||
func newSparkClient(hostname string, port int, bindInterfaceName string) *sparkClient {
|
||||
return &sparkClient{
|
||||
remote: fmt.Sprintf("%s:%d", hostname, port),
|
||||
bindInterfaceName: bindInterfaceName,
|
||||
remote: fmt.Sprintf("%s:%d", hostname, port),
|
||||
}
|
||||
}
|
||||
|
||||
func (s *sparkClient) dial() error {
|
||||
c, err := net.Dial("tcp", s.remote)
|
||||
d := net.Dialer{}
|
||||
|
||||
if s.bindInterfaceName != "" {
|
||||
iface, err := net.InterfaceByName(s.bindInterfaceName)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "select interface")
|
||||
}
|
||||
|
||||
addrs, err := iface.Addrs()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "get interface IPs")
|
||||
}
|
||||
|
||||
if len(addrs) == 0 {
|
||||
return errors.New("no addresses found on interface")
|
||||
}
|
||||
|
||||
d.LocalAddr = &net.TCPAddr{IP: addrs[0].(*net.IPNet).IP}
|
||||
log.WithField("ip", d.LocalAddr).Warn("Set local address")
|
||||
}
|
||||
|
||||
c, err := d.Dial("tcp", s.remote)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Unable to dial")
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue