From 2cee825711c820dfb9ba526dfd59770d0465aff0 Mon Sep 17 00:00:00 2001 From: Eli Mallon Date: Wed, 23 Aug 2023 14:31:41 -0700 Subject: [PATCH 1/2] go.mod: remove exclude so we can `go install` this --- go.mod | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.mod b/go.mod index 33d4327a..29793c69 100644 --- a/go.mod +++ b/go.mod @@ -189,5 +189,3 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect lukechampine.com/blake3 v1.2.1 // indirect ) - -exclude github.com/gosuri/uilive v0.0.4 // cause memory corruption From c6254f568417e222b8e7ec46aa00c44d74635703 Mon Sep 17 00:00:00 2001 From: Eli Mallon Date: Wed, 23 Aug 2023 16:40:13 -0700 Subject: [PATCH 2/2] testers/m3utester2: implement polling for record-tester monitoring --- internal/app/recordtester/recordtester_app.go | 93 +++++++++++-------- internal/testers/m3utester2.go | 2 +- 2 files changed, 54 insertions(+), 41 deletions(-) diff --git a/internal/app/recordtester/recordtester_app.go b/internal/app/recordtester/recordtester_app.go index 10cfa117..28c08750 100644 --- a/internal/app/recordtester/recordtester_app.go +++ b/internal/app/recordtester/recordtester_app.go @@ -282,60 +282,73 @@ func (rt *recordTester) Start(fileName string, testDuration, pauseDuration time. } glog.Infof("Streaming done, waiting for recording URL to appear. streamId=%s playbackId=%s", stream.ID, stream.PlaybackID) - if rt.useForceURL { - time.Sleep(5 * time.Second) - } else { - time.Sleep(rt.recordingWaitTime) - } - if err = rt.isCancelled(); err != nil { - return 0, err - } - - sessions, err = rt.lapi.GetSessionsNew(stream.ID, rt.useForceURL) - if err != nil { - err := fmt.Errorf("error getting sessions for stream id=%s err=%v", stream.ID, err) - return 252, err - } - glog.Infof("Sessions: %+v streamId=%s playbackId=%s", sessions, stream.ID, stream.PlaybackID) - if err = rt.isCancelled(); err != nil { - return 0, err - } - - for _, sess := range sessions { - sess = sessions[0] - statusShould := api.RecordingStatusReady - if rt.useForceURL { - statusShould = api.RecordingStatusWaiting - } - if sess.RecordingStatus != statusShould { - err := fmt.Errorf("recording status is %s but should be %s", sess.RecordingStatus, statusShould) - return 240, err - } - if sess.RecordingURL == "" { - err := fmt.Errorf("recording URL should appear by now") - return 249, err + poll := func() (int, error) { + if err = rt.isCancelled(); err != nil { + return 0, err } - glog.Infof("recordingURL=%s downloading now. streamId=%s playbackId=%s", sess.RecordingURL, stream.ID, stream.PlaybackID) + sessions, err = rt.lapi.GetSessionsNew(stream.ID, rt.useForceURL) + if err != nil { + err := fmt.Errorf("error getting sessions for stream id=%s err=%v", stream.ID, err) + return 252, err + } + glog.Infof("Sessions: %+v streamId=%s playbackId=%s", sessions, stream.ID, stream.PlaybackID) if err = rt.isCancelled(); err != nil { return 0, err } - if rt.mp4 { - es, err := rt.checkDownMp4(stream, sess.Mp4Url, testDuration) + + for _, sess := range sessions { + sess = sessions[0] + statusShould := api.RecordingStatusReady + if rt.useForceURL { + statusShould = api.RecordingStatusWaiting + } + if sess.RecordingStatus != statusShould { + err := fmt.Errorf("recording status is %s but should be %s", sess.RecordingStatus, statusShould) + return 240, err + } + if sess.RecordingURL == "" { + err := fmt.Errorf("recording URL should appear by now") + return 249, err + } + glog.Infof("recordingURL=%s downloading now. streamId=%s playbackId=%s", sess.RecordingURL, stream.ID, stream.PlaybackID) + + if err = rt.isCancelled(); err != nil { + return 0, err + } + if rt.mp4 { + es, err := rt.checkDownMp4(stream, sess.Mp4Url, testDuration) + if err != nil { + return es, err + } + } + + es, err := rt.checkDown(stream, sess.RecordingURL, testDuration) if err != nil { return es, err } } - - es, err := rt.checkDown(stream, sess.RecordingURL, testDuration) - if err != nil { - return es, err + return 0, nil + } + var giveup time.Time + if rt.useForceURL { + giveup = time.Now().Add(5 * time.Second) + } else { + giveup = time.Now().Add(rt.recordingWaitTime) + } + var ret int + for time.Now().Before(giveup) { + ret, err = poll() + if ret == 0 { + break } + time.Sleep(5 * time.Second) } + glog.Infof("Done Record Test. streamId=%s playbackId=%s", stream.ID, stream.PlaybackID) rt.lapi.DeleteStream(stream.ID) - return 0, nil + return ret, err } func (rt *recordTester) getIngestInfo() (*api.Ingest, error) { diff --git a/internal/testers/m3utester2.go b/internal/testers/m3utester2.go index 2ddcf74b..5254f66b 100644 --- a/internal/testers/m3utester2.go +++ b/internal/testers/m3utester2.go @@ -964,7 +964,7 @@ func (ms *m3uMediaStream) manifestPullerLoop(wowzaMode bool) { ms.savePlayList.SeqNo = pl.SeqNo gotManifest = true } - glog.Infof("Got media playlist %s with %d (really %d (%d)) segments of url %s: %s", ms.resolution, len(pl.Segments), countSegments(pl), pl.Len(), surl, pl.String()) + glog.Infof("Got media playlist %s with %d (really %d (%d)) segments of url %s", ms.resolution, len(pl.Segments), countSegments(pl), pl.Len(), surl) glog.V(model.INSANE2).Info(string(b)) now := time.Now() var lastTimeDownloadStarted time.Time