@@ -37,6 +37,11 @@ type ManagerCtx struct {
3737 mu sync.Mutex
3838 cmdFactory func () * exec.Cmd
3939 active bool
40+ events struct {
41+ onStart func ()
42+ onCmdLog func (message string )
43+ onStop func ()
44+ }
4045
4146 cmd * exec.Cmd
4247 tempdir string
@@ -77,7 +82,12 @@ func (m *ManagerCtx) Start() error {
7782
7883 m .cmd = m .cmdFactory ()
7984 m .cmd .Dir = m .tempdir
80- m .cmd .Stderr = utils .LogWriter (m .logger )
85+
86+ if m .events .onStart != nil {
87+ m .cmd .Stderr = utils .LogEvent (m .events .onCmdLog )
88+ } else {
89+ m .cmd .Stderr = utils .LogWriter (m .logger )
90+ }
8191
8292 read , write := io .Pipe ()
8393 m .cmd .Stdout = write
@@ -138,6 +148,10 @@ func (m *ManagerCtx) Start() error {
138148 }
139149 }()
140150
151+ if m .events .onStart != nil {
152+ m .events .onStart ()
153+ }
154+
141155 return m .cmd .Start ()
142156}
143157
@@ -162,6 +176,10 @@ func (m *ManagerCtx) Stop() {
162176 err := os .RemoveAll (m .tempdir )
163177 m .logger .Err (err ).Msg ("removing tempdir" )
164178 })
179+
180+ if m .events .onStop != nil {
181+ m .events .onStop ()
182+ }
165183}
166184
167185func (m * ManagerCtx ) Cleanup () {
@@ -239,3 +257,15 @@ func (m *ManagerCtx) ServeMedia(w http.ResponseWriter, r *http.Request) {
239257 w .Header ().Set ("Cache-Control" , "no-cache" )
240258 http .ServeFile (w , r , path )
241259}
260+
261+ func (m * ManagerCtx ) OnStart (event func ()) {
262+ m .events .onStart = event
263+ }
264+
265+ func (m * ManagerCtx ) OnCmdLog (event func (message string )) {
266+ m .events .onCmdLog = event
267+ }
268+
269+ func (m * ManagerCtx ) OnStop (event func ()) {
270+ m .events .onStop = event
271+ }
0 commit comments