diff --git a/exporter/pprint.go b/exporter/pprint.go new file mode 100644 index 0000000..4deaad4 --- /dev/null +++ b/exporter/pprint.go @@ -0,0 +1,20 @@ +package exporter + +import ( + "encoding/json" + "fmt" +) + +// PrettyPrint logs exported data to console as pretty printed +type PrettyPrint struct{} + +// Export logs exported data to console as pretty printed +func (*PrettyPrint) Export(exports chan interface{}) { + for res := range exports { + dat, err := json.MarshalIndent(res, "", " ") + if err != nil { + continue + } + fmt.Println(string(dat)) + } +} diff --git a/geziyor.go b/geziyor.go index 7e86916..65833b9 100644 --- a/geziyor.go +++ b/geziyor.go @@ -197,7 +197,7 @@ func (g *Geziyor) do(req *Request, callback func(g *Geziyor, r *Response)) { if !req.Synchronized { defer g.wg.Done() } - defer recoverMiddleware() + defer recoverMiddleware(g, req) for _, middlewareFunc := range g.requestMiddlewares { middlewareFunc(g, req) diff --git a/metrics/metrics.go b/metrics/metrics.go index ddf62be..7f2f0e6 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -26,6 +26,7 @@ const ( type Metrics struct { RequestCounter metrics.Counter ResponseCounter metrics.Counter + PanicCounter metrics.Counter } // NewMetrics creates new metrics with given metrics.Type @@ -35,11 +36,13 @@ func NewMetrics(metricsType Type) *Metrics { return &Metrics{ RequestCounter: discard.NewCounter(), ResponseCounter: discard.NewCounter(), + PanicCounter: discard.NewCounter(), } case ExpVar: return &Metrics{ RequestCounter: expvar.NewCounter("request_count"), ResponseCounter: expvar.NewCounter("response_count"), + PanicCounter: expvar.NewCounter("panic_count"), } case Prometheus: return &Metrics{ @@ -53,6 +56,11 @@ func NewMetrics(metricsType Type) *Metrics { Name: "response_count", Help: "Response count", }, []string{"method"}), + PanicCounter: prometheus.NewCounterFrom(stdprometheus.CounterOpts{ + Namespace: "geziyor", + Name: "panic_count", + Help: "Panic count", + }, []string{}), } default: return nil diff --git a/middleware.go b/middleware.go index 9d7053b..c5a25e9 100644 --- a/middleware.go +++ b/middleware.go @@ -28,9 +28,10 @@ func init() { // recoverMiddleware recovers scraping being crashed. // Logs error and stack trace -func recoverMiddleware() { +func recoverMiddleware(g *Geziyor, r *Request) { if r := recover(); r != nil { log.Println(r, string(debug.Stack())) + g.metrics.PanicCounter.Add(1) } } @@ -75,7 +76,7 @@ func delayMiddleware(g *Geziyor, r *Request) { // logMiddleware logs requests func logMiddleware(g *Geziyor, r *Request) { - //log.Println("Fetching: ", r.URL.String()) + log.Println("Fetching: ", r.URL.String()) } // metricsRequestMiddleware sets stats