// logHandler prints the fetch information and dispatches the call to the wrapped Handler. func logHandler(wrapped fetchbot.Handler) fetchbot.Handler { return fetchbot.HandlerFunc(func(ctx *fetchbot.Context, res *http.Response, err error) { if err == nil { fmt.Printf("[%d] %s %s - %s\n", res.StatusCode, ctx.Cmd.Method(), ctx.Cmd.URL(), res.Header.Get("Content-Type")) } wrapped.Handle(ctx, res, err) }) }
// stopHandler stops the fetcher if the stopurl is reached. Otherwise it dispatches // the call to the wrapped Handler. func stopHandler(stopurl string, wrapped fetchbot.Handler) fetchbot.Handler { return fetchbot.HandlerFunc(func(ctx *fetchbot.Context, res *http.Response, err error) { if ctx.Cmd.URL().String() == stopurl { ctx.Q.Close() return } wrapped.Handle(ctx, res, err) }) }
// stopHandler stops the fetcher if the stopurl is reached. Otherwise it dispatches // the call to the wrapped Handler. func stopHandler(stopurl string, cancel bool, wrapped fetchbot.Handler) fetchbot.Handler { return fetchbot.HandlerFunc(func(ctx *fetchbot.Context, res *http.Response, err error) { if ctx.Cmd.URL().String() == stopurl { fmt.Printf(">>>>> STOP URL %s\n", ctx.Cmd.URL()) // generally not a good idea to stop/block from a handler goroutine // so do it in a separate goroutine go func() { if cancel { ctx.Q.Cancel() } else { ctx.Q.Close() } }() return } wrapped.Handle(ctx, res, err) }) }