fix merge conflict
This commit is contained in:
18
.idea/workspace.xml
generated
18
.idea/workspace.xml
generated
@@ -8,8 +8,8 @@
|
|||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/client.go" beforeDir="false" afterPath="$PROJECT_DIR$/client.go" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/client.go" beforeDir="false" afterPath="$PROJECT_DIR$/client.go" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/cmd/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/cmd/main.go" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/cmd/main.go" beforeDir="false" afterPath="$PROJECT_DIR$/cmd/main.go" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/execute.go" beforeDir="false" afterPath="$PROJECT_DIR$/execute.go" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/server.go" beforeDir="false" afterPath="$PROJECT_DIR$/server.go" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/server.go" beforeDir="false" afterPath="$PROJECT_DIR$/server.go" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/shared.go" beforeDir="false" afterPath="$PROJECT_DIR$/shared.go" afterDir="false" />
|
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="GOROOT" url="file:///usr/local/go" />
|
<component name="GOROOT" url="file://$PROJECT_DIR$/../../../../../Program Files/Go" />
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
@@ -58,59 +58,59 @@
|
|||||||
<recent name="C:\Users\BGrewell\repos\go-iperf\embedded" />
|
<recent name="C:\Users\BGrewell\repos\go-iperf\embedded" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="Go Build.go build github.com/BGrewell/go-iperf/tests/controller">
|
<component name="RunManager" selected="Go Build.go build github.com/BGrewell/go-iperf/cmd">
|
||||||
<configuration name="go build github.com/BGrewell/go-iperf/cmd" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
<configuration name="go build github.com/BGrewell/go-iperf/cmd" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
||||||
<module name="go-iperf" />
|
<module name="go-iperf" />
|
||||||
<working_directory value="$PROJECT_DIR$" />
|
<working_directory value="$PROJECT_DIR$" />
|
||||||
<kind value="PACKAGE" />
|
<kind value="PACKAGE" />
|
||||||
|
<filePath value="$PROJECT_DIR$/cmd/main.go" />
|
||||||
<package value="github.com/BGrewell/go-iperf/cmd" />
|
<package value="github.com/BGrewell/go-iperf/cmd" />
|
||||||
<directory value="$PROJECT_DIR$" />
|
<directory value="$PROJECT_DIR$" />
|
||||||
<filePath value="$PROJECT_DIR$/cmd/main.go" />
|
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="go build github.com/BGrewell/go-iperf/tests/client" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
<configuration name="go build github.com/BGrewell/go-iperf/tests/client" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
||||||
<module name="go-iperf" />
|
<module name="go-iperf" />
|
||||||
<working_directory value="$PROJECT_DIR$" />
|
<working_directory value="$PROJECT_DIR$" />
|
||||||
<kind value="PACKAGE" />
|
<kind value="PACKAGE" />
|
||||||
|
<filePath value="$PROJECT_DIR$/tests/client/client.go" />
|
||||||
<package value="github.com/BGrewell/go-iperf/tests/client" />
|
<package value="github.com/BGrewell/go-iperf/tests/client" />
|
||||||
<directory value="$PROJECT_DIR$" />
|
<directory value="$PROJECT_DIR$" />
|
||||||
<filePath value="$PROJECT_DIR$/tests/client/client.go" />
|
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="go build github.com/BGrewell/go-iperf/tests/controller" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
<configuration name="go build github.com/BGrewell/go-iperf/tests/controller" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
||||||
<module name="go-iperf" />
|
<module name="go-iperf" />
|
||||||
<working_directory value="$PROJECT_DIR$" />
|
<working_directory value="$PROJECT_DIR$" />
|
||||||
<kind value="PACKAGE" />
|
<kind value="PACKAGE" />
|
||||||
|
<filePath value="$PROJECT_DIR$/tests/controller/main.go" />
|
||||||
<package value="github.com/BGrewell/go-iperf/tests/controller" />
|
<package value="github.com/BGrewell/go-iperf/tests/controller" />
|
||||||
<directory value="$PROJECT_DIR$" />
|
<directory value="$PROJECT_DIR$" />
|
||||||
<filePath value="$PROJECT_DIR$/tests/controller/main.go" />
|
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="go build github.com/BGrewell/go-iperf/tests/extract" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
<configuration name="go build github.com/BGrewell/go-iperf/tests/extract" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
||||||
<module name="go-iperf" />
|
<module name="go-iperf" />
|
||||||
<working_directory value="$PROJECT_DIR$" />
|
<working_directory value="$PROJECT_DIR$" />
|
||||||
<kind value="PACKAGE" />
|
<kind value="PACKAGE" />
|
||||||
|
<filePath value="$PROJECT_DIR$/tests/extract/main.go" />
|
||||||
<package value="github.com/BGrewell/go-iperf/tests/extract" />
|
<package value="github.com/BGrewell/go-iperf/tests/extract" />
|
||||||
<directory value="$PROJECT_DIR$" />
|
<directory value="$PROJECT_DIR$" />
|
||||||
<filePath value="$PROJECT_DIR$/tests/extract/main.go" />
|
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration name="go build github.com/BGrewell/go-iperf/tests/server" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
<configuration name="go build github.com/BGrewell/go-iperf/tests/server" type="GoApplicationRunConfiguration" factoryName="Go Application" temporary="true" nameIsGenerated="true">
|
||||||
<module name="go-iperf" />
|
<module name="go-iperf" />
|
||||||
<working_directory value="$PROJECT_DIR$" />
|
<working_directory value="$PROJECT_DIR$" />
|
||||||
<kind value="PACKAGE" />
|
<kind value="PACKAGE" />
|
||||||
|
<filePath value="$PROJECT_DIR$/tests/server/server.go" />
|
||||||
<package value="github.com/BGrewell/go-iperf/tests/server" />
|
<package value="github.com/BGrewell/go-iperf/tests/server" />
|
||||||
<directory value="$PROJECT_DIR$" />
|
<directory value="$PROJECT_DIR$" />
|
||||||
<filePath value="$PROJECT_DIR$/tests/server/server.go" />
|
|
||||||
<method v="2" />
|
<method v="2" />
|
||||||
</configuration>
|
</configuration>
|
||||||
<recent_temporary>
|
<recent_temporary>
|
||||||
<list>
|
<list>
|
||||||
|
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/cmd" />
|
||||||
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/controller" />
|
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/controller" />
|
||||||
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/extract" />
|
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/extract" />
|
||||||
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/client" />
|
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/client" />
|
||||||
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/server" />
|
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/tests/server" />
|
||||||
<item itemvalue="Go Build.go build github.com/BGrewell/go-iperf/cmd" />
|
|
||||||
</list>
|
</list>
|
||||||
</recent_temporary>
|
</recent_temporary>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
19
client.go
19
client.go
@@ -489,18 +489,31 @@ func (c *Client) SetModeLive() <-chan *StreamIntervalReport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Start() (err error) {
|
func (c *Client) Start() (err error) {
|
||||||
|
_, err = c.start()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) StartEx() (pid int, err error) {
|
||||||
|
return c.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) start() (pid int, err error) {
|
||||||
read := make(chan interface{})
|
read := make(chan interface{})
|
||||||
cmd, err := c.commandString()
|
cmd, err := c.commandString()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return -1, err
|
||||||
}
|
}
|
||||||
var exit chan int
|
var exit chan int
|
||||||
|
<<<<<<< HEAD
|
||||||
if c.Debug {
|
if c.Debug {
|
||||||
fmt.Printf("executing command: %s\n", cmd)
|
fmt.Printf("executing command: %s\n", cmd)
|
||||||
}
|
}
|
||||||
c.outputStream, c.errorStream, exit, c.cancel, err = ExecuteAsyncWithCancelReadIndicator(cmd, read)
|
c.outputStream, c.errorStream, exit, c.cancel, err = ExecuteAsyncWithCancelReadIndicator(cmd, read)
|
||||||
|
=======
|
||||||
|
c.outputStream, c.errorStream, exit, c.cancel, pid, err = ExecuteAsyncWithCancelReadIndicator(cmd, read)
|
||||||
|
>>>>>>> 328913249f87399ed1ce133fec58df85a24aa9b0
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return -1, err
|
||||||
}
|
}
|
||||||
c.Running = true
|
c.Running = true
|
||||||
|
|
||||||
@@ -551,7 +564,7 @@ func (c *Client) Start() (err error) {
|
|||||||
reporter.Stop()
|
reporter.Stop()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
return nil
|
return pid, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Stop() {
|
func (c *Client) Stop() {
|
||||||
|
|||||||
@@ -2,11 +2,14 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
//"fmt"
|
//"fmt"
|
||||||
//"github.com/BGrewell/go-conversions"
|
"github.com/BGrewell/go-conversions"
|
||||||
//"github.com/BGrewell/go-iperf"
|
//"github.com/BGrewell/go-iperf"
|
||||||
//"time"
|
//"time"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
<<<<<<< HEAD
|
||||||
"github.com/BGrewell/go-conversions"
|
"github.com/BGrewell/go-conversions"
|
||||||
|
=======
|
||||||
|
>>>>>>> 328913249f87399ed1ce133fec58df85a24aa9b0
|
||||||
"github.com/BGrewell/go-iperf"
|
"github.com/BGrewell/go-iperf"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -29,12 +29,6 @@ func NewController(port int) (controller *Controller, err error) {
|
|||||||
// server side it listens for new gRPC connections, when a connection is made by a client the client can tell it to
|
// server side it listens for new gRPC connections, when a connection is made by a client the client can tell it to
|
||||||
// start a new iperf server instance. It will start a instance on an unused port and return the port number to the
|
// start a new iperf server instance. It will start a instance on an unused port and return the port number to the
|
||||||
// client. This allows the entire iperf setup and session to be performed from the client side.
|
// client. This allows the entire iperf setup and session to be performed from the client side.
|
||||||
//
|
|
||||||
// CLIENT SERVER
|
|
||||||
// connect to grpc ---> accept grpc connection
|
|
||||||
// call StartServer() ---> find unused port
|
|
||||||
// start iperf server on port
|
|
||||||
// get server port info <--- return port information to client
|
|
||||||
type Controller struct {
|
type Controller struct {
|
||||||
api.UnimplementedCommandServer
|
api.UnimplementedCommandServer
|
||||||
Port int
|
Port int
|
||||||
|
|||||||
18
execute.go
18
execute.go
@@ -42,34 +42,38 @@ func ExecuteAsync(cmd string) (outPipe io.ReadCloser, errPipe io.ReadCloser, exi
|
|||||||
return outPipe, errPipe, exitCode, nil
|
return outPipe, errPipe, exitCode, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExecuteAsyncWithCancel(cmd string) (stdOut io.ReadCloser, stdErr io.ReadCloser, exitCode chan int, cancelToken context.CancelFunc, err error) {
|
func ExecuteAsyncWithCancel(cmd string) (stdOut io.ReadCloser, stdErr io.ReadCloser, exitCode chan int, cancelToken context.CancelFunc, pid int, err error) {
|
||||||
return ExecuteAsyncWithCancelReadIndicator(cmd, nil)
|
return ExecuteAsyncWithCancelReadIndicator(cmd, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExecuteAsyncWithCancelReadIndicator(cmd string, readIndicator chan interface{}) (stdOut io.ReadCloser, stdErr io.ReadCloser, exitCode chan int, cancelToken context.CancelFunc, err error) {
|
func ExecuteAsyncWithCancelReadIndicator(cmd string, readIndicator chan interface{}) (stdOut io.ReadCloser, stdErr io.ReadCloser, exitCode chan int, cancelToken context.CancelFunc, pid int, err error) {
|
||||||
|
return executeAsyncWithCancel(cmd, readIndicator)
|
||||||
|
}
|
||||||
|
|
||||||
|
func executeAsyncWithCancel(cmd string, readIndicator chan interface{}) (stdOut io.ReadCloser, stdErr io.ReadCloser, exitCode chan int, cancelToken context.CancelFunc, pid int, err error) {
|
||||||
exitCode = make(chan int)
|
exitCode = make(chan int)
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
cmdParts := strings.Fields(cmd)
|
cmdParts := strings.Fields(cmd)
|
||||||
binary, err := exec.LookPath(cmdParts[0])
|
binary, err := exec.LookPath(cmdParts[0])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
defer cancel()
|
defer cancel()
|
||||||
return nil, nil, nil, nil, err
|
return nil, nil, nil, nil, -1, err
|
||||||
}
|
}
|
||||||
exe := exec.CommandContext(ctx, binary, cmdParts[1:]...)
|
exe := exec.CommandContext(ctx, binary, cmdParts[1:]...)
|
||||||
stdOut, err = exe.StdoutPipe()
|
stdOut, err = exe.StdoutPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
defer cancel()
|
defer cancel()
|
||||||
return nil, nil, nil, nil, err
|
return nil, nil, nil, nil, -1, err
|
||||||
}
|
}
|
||||||
stdErr, err = exe.StderrPipe()
|
stdErr, err = exe.StderrPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
defer cancel()
|
defer cancel()
|
||||||
return nil, nil, nil, nil, err
|
return nil, nil, nil, nil, -1, err
|
||||||
}
|
}
|
||||||
err = exe.Start()
|
err = exe.Start()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
defer cancel()
|
defer cancel()
|
||||||
return nil, nil, nil, nil, err
|
return nil, nil, nil, nil, -1, err
|
||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
// Note: Wait() will close the Stdout/Stderr and in some cases can do it before we read. In order to prevent
|
// Note: Wait() will close the Stdout/Stderr and in some cases can do it before we read. In order to prevent
|
||||||
@@ -87,5 +91,5 @@ func ExecuteAsyncWithCancelReadIndicator(cmd string, readIndicator chan interfac
|
|||||||
exitCode <- 0
|
exitCode <- 0
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
return stdOut, stdErr, exitCode, cancel, nil
|
return stdOut, stdErr, exitCode, cancel, exe.Process.Pid, nil
|
||||||
}
|
}
|
||||||
@@ -10,6 +10,11 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
|
//TODO: This has not been tested on OS X ... my assumption is it is the exact same as linux but if it's not then the
|
||||||
|
// reporting will be broken
|
||||||
|
|
||||||
|
=======
|
||||||
/*
|
/*
|
||||||
Connecting to host 10.254.100.100, port 5201
|
Connecting to host 10.254.100.100, port 5201
|
||||||
[ 4] local 192.168.3.182 port 54104 connected to 10.254.100.100 port 5201
|
[ 4] local 192.168.3.182 port 54104 connected to 10.254.100.100 port 5201
|
||||||
@@ -45,6 +50,7 @@ Connecting to host 10.254.100.100, port 5201
|
|||||||
iperf Done.
|
iperf Done.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
>>>>>>> 8ad71c4c5699a6d55965c2f1ab99d5c306295c3b
|
||||||
func (r *Reporter) runLogProcessor() {
|
func (r *Reporter) runLogProcessor() {
|
||||||
var err error
|
var err error
|
||||||
r.tailer, err = tail.TailFile(r.LogFile, tail.Config{
|
r.tailer, err = tail.TailFile(r.LogFile, tail.Config{
|
||||||
|
|||||||
19
server.go
19
server.go
@@ -151,17 +151,30 @@ func (s *Server) SetLogFile(filename string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Start() (err error) {
|
func (s *Server) Start() (err error) {
|
||||||
|
_, err = s.start()
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) StartEx() (pid int, err error) {
|
||||||
|
return s.start()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Server) start() (pid int, err error) {
|
||||||
cmd, err := s.commandString()
|
cmd, err := s.commandString()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return -1, err
|
||||||
}
|
}
|
||||||
var exit chan int
|
var exit chan int
|
||||||
|
<<<<<<< HEAD
|
||||||
if s.Debug {
|
if s.Debug {
|
||||||
fmt.Printf("executing command: %s\n", cmd)
|
fmt.Printf("executing command: %s\n", cmd)
|
||||||
}
|
}
|
||||||
s.outputStream, s.errorStream, exit, s.cancel, err = ExecuteAsyncWithCancel(cmd)
|
s.outputStream, s.errorStream, exit, s.cancel, err = ExecuteAsyncWithCancel(cmd)
|
||||||
|
=======
|
||||||
|
s.outputStream, s.errorStream, exit, s.cancel, pid, err = ExecuteAsyncWithCancel(cmd)
|
||||||
|
>>>>>>> 328913249f87399ed1ce133fec58df85a24aa9b0
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return -1, err
|
||||||
}
|
}
|
||||||
s.Running = true
|
s.Running = true
|
||||||
|
|
||||||
@@ -179,7 +192,7 @@ func (s *Server) Start() (err error) {
|
|||||||
s.ExitCode = &exitCode
|
s.ExitCode = &exitCode
|
||||||
s.Running = false
|
s.Running = false
|
||||||
}()
|
}()
|
||||||
return nil
|
return pid,nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Server) Stop() {
|
func (s *Server) Stop() {
|
||||||
|
|||||||
Reference in New Issue
Block a user