fix issues with reporter closing

main
Ben Grewell 4 years ago
parent 03d6ae7d3b
commit 0dc467f289

@ -3,7 +3,9 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="fc2840de-29dc-4fca-8e0e-a283562f60ca" name="Default Changelist" comment=""> <list default="true" id="fc2840de-29dc-4fca-8e0e-a283562f60ca" name="Default Changelist" comment="">
<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$/reporter.go" beforeDir="false" afterPath="$PROJECT_DIR$/reporter.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/reporter_linux.go" beforeDir="false" afterPath="$PROJECT_DIR$/reporter_linux.go" afterDir="false" /> <change beforePath="$PROJECT_DIR$/reporter_linux.go" beforeDir="false" afterPath="$PROJECT_DIR$/reporter_linux.go" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tests/client/client.go" beforeDir="false" afterPath="$PROJECT_DIR$/tests/client/client.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" />

@ -1,9 +1,15 @@
package iperf package iperf
import (
"fmt"
"github.com/BGrewell/tail"
)
type Reporter struct { type Reporter struct {
ReportingChannel chan *StreamIntervalReport ReportingChannel chan *StreamIntervalReport
LogFile string LogFile string
running bool running bool
tailer *tail.Tail
} }
func (r *Reporter) Start() { func (r *Reporter) Start() {
@ -13,7 +19,10 @@ func (r *Reporter) Start() {
func (r *Reporter) Stop() { func (r *Reporter) Stop() {
r.running = false r.running = false
r.tailer.Stop()
r.tailer.Cleanup()
close(r.ReportingChannel) close(r.ReportingChannel)
fmt.Println("reporter stopped")
} }
// runLogProcessor is OS specific because of differences in iperf on Windows and Linux // runLogProcessor is OS specific because of differences in iperf on Windows and Linux

@ -7,6 +7,7 @@ import (
"log" "log"
"strconv" "strconv"
"strings" "strings"
"time"
) )
/* /*
@ -44,9 +45,10 @@ Connecting to host 10.254.100.100, port 5201
iperf Done. iperf Done.
*/ */
//TODO: NEED TO UPDATE WINDOWS IMPLEMENTATION ALSO!!!!!
func (r *Reporter) runLogProcessor() { func (r *Reporter) runLogProcessor() {
tailer, err := tail.TailFile(r.LogFile, tail.Config{ var err error
r.tailer, err = tail.TailFile(r.LogFile, tail.Config{
Follow: true, Follow: true,
ReOpen: true, ReOpen: true,
Poll: true, // on linux we don't need to poll as the fsnotify works properly Poll: true, // on linux we don't need to poll as the fsnotify works properly
@ -55,8 +57,13 @@ func (r *Reporter) runLogProcessor() {
if err != nil { if err != nil {
log.Fatalf("failed to tail log file: %v", err) log.Fatalf("failed to tail log file: %v", err)
} }
for line := range tailer.Lines {
// TODO: For now this only cares about individual streams it ignores the sum lines for {
select {
case line := <- r.tailer.Lines:
if line == nil {
continue
}
if len(line.Text) > 5 { if len(line.Text) > 5 {
id := line.Text[1:4] id := line.Text[1:4]
stream, err := strconv.Atoi(strings.TrimSpace(id)) stream, err := strconv.Atoi(strings.TrimSpace(id))
@ -113,11 +120,10 @@ func (r *Reporter) runLogProcessor() {
r.ReportingChannel <- report r.ReportingChannel <- report
} }
} }
case <- time.After(1 * time.Second):
if !r.running { if !r.running {
fmt.Println("reporter is finished. exiting")
close(r.ReportingChannel)
return return
} }
} }
}
} }

@ -10,8 +10,8 @@ func main() {
includeServer := true includeServer := true
proto := "tcp" proto := "tcp"
runTime := 30 runTime := 10
omitSec := 10 omitSec := 0
length := "65500" length := "65500"
c := iperf.NewClient("10.254.100.100") c := iperf.NewClient("10.254.100.100")
@ -22,7 +22,6 @@ func main() {
c.SetLength(length) c.SetLength(length)
c.SetJSON(false) c.SetJSON(false)
c.SetIncludeServer(false) c.SetIncludeServer(false)
c.SetTimeSec(20)
c.SetStreams(2) c.SetStreams(2)
reports := c.SetModeLive() reports := c.SetModeLive()

Loading…
Cancel
Save