diff --git a/ffmpeg/parse/parser.go b/ffmpeg/parse/parser.go index e5314f73..9633c954 100644 --- a/ffmpeg/parse/parser.go +++ b/ffmpeg/parse/parser.go @@ -877,7 +877,6 @@ func (p *parser) storeReportHistory(state string) { history := r.Value.(ReportHistoryEntry) history.Log = nil history.Prelude = nil - history.Matches = nil r.Value = history } diff --git a/ffmpeg/parse/parser_test.go b/ffmpeg/parse/parser_test.go index 8ea1db0b..2cbd1540 100644 --- a/ffmpeg/parse/parser_test.go +++ b/ffmpeg/parse/parser_test.go @@ -883,23 +883,35 @@ func TestParserProgressPlayout(t *testing.T) { } func TestParserPatterns(t *testing.T) { - parser := New(Config{ + p := New(Config{ + LogHistory: 3, Patterns: []string{ "^foobar", "foobar$", }, }) - parser.Parse("some foobar more") - require.Empty(t, parser.Report().Matches) + p.Parse("some foobar more") + require.Empty(t, p.Report().Matches) - parser.Parse("foobar some more") - require.Equal(t, 1, len(parser.Report().Matches)) - require.Equal(t, "foobar some more", parser.Report().Matches[0]) + p.Parse("foobar some more") + require.Equal(t, 1, len(p.Report().Matches)) + require.Equal(t, "foobar some more", p.Report().Matches[0]) - parser.Parse("some more foobar") - require.Equal(t, 2, len(parser.Report().Matches)) - require.Equal(t, "some more foobar", parser.Report().Matches[1]) + p.Parse("some more foobar") + require.Equal(t, 2, len(p.Report().Matches)) + require.Equal(t, "some more foobar", p.Report().Matches[1]) + + pp, ok := p.(*parser) + require.True(t, ok) + + pp.storeReportHistory("something") + + report := p.ReportHistory() + require.Equal(t, 1, len(report)) + require.Equal(t, 2, len(report[0].Matches)) + require.Equal(t, "foobar some more", report[0].Matches[0]) + require.Equal(t, "some more foobar", report[0].Matches[1]) } func TestParserPatternsError(t *testing.T) { diff --git a/http/api/report.go b/http/api/report.go index f058e1b0..52497e96 100644 --- a/http/api/report.go +++ b/http/api/report.go @@ -49,6 +49,7 @@ func (report *ProcessReport) Unmarshal(l *app.Log) { CreatedAt: h.CreatedAt.Unix(), Prelude: h.Prelude, Log: make([][2]string, len(h.Log)), + Matches: h.Matches, ExitedAt: h.ExitedAt.Unix(), ExitState: h.ExitState, } diff --git a/restream/restream_test.go b/restream/restream_test.go index 8dc52db9..7145b33e 100644 --- a/restream/restream_test.go +++ b/restream/restream_test.go @@ -25,10 +25,11 @@ func getDummyRestreamer(portrange net.Portranger, validatorIn, validatorOut ffmp } ffmpeg, err := ffmpeg.New(ffmpeg.Config{ - Binary: binary, - Portrange: portrange, - ValidatorInput: validatorIn, - ValidatorOutput: validatorOut, + Binary: binary, + Portrange: portrange, + ValidatorInput: validatorIn, + ValidatorOutput: validatorOut, + LogHistoryLength: 3, }) if err != nil { return nil, err @@ -404,6 +405,27 @@ func TestReloadProcess(t *testing.T) { rs.StopProcess(process.ID) } +func TestParseProcessPattern(t *testing.T) { + rs, err := getDummyRestreamer(nil, nil, nil, nil) + require.NoError(t, err) + + process := getDummyProcess() + process.LogPatterns = []string{"libx264"} + + rs.AddProcess(process) + rs.StartProcess(process.ID) + + time.Sleep(3 * time.Second) + + rs.StopProcess(process.ID) + + log, err := rs.GetProcessLog(process.ID) + require.NoError(t, err) + + require.Equal(t, 1, len(log.History)) + require.Equal(t, 8, len(log.History[0].Matches)) +} + func TestProbeProcess(t *testing.T) { rs, err := getDummyRestreamer(nil, nil, nil, nil) require.NoError(t, err)