Pretty print exporter added. Panic counter added to metrics

This commit is contained in:
Musab Gültekin 2019-06-29 11:20:06 +03:00
parent 276b248ebb
commit 59757607eb
4 changed files with 32 additions and 3 deletions

20
exporter/pprint.go Normal file
View File

@ -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))
}
}

View File

@ -197,7 +197,7 @@ func (g *Geziyor) do(req *Request, callback func(g *Geziyor, r *Response)) {
if !req.Synchronized { if !req.Synchronized {
defer g.wg.Done() defer g.wg.Done()
} }
defer recoverMiddleware() defer recoverMiddleware(g, req)
for _, middlewareFunc := range g.requestMiddlewares { for _, middlewareFunc := range g.requestMiddlewares {
middlewareFunc(g, req) middlewareFunc(g, req)

View File

@ -26,6 +26,7 @@ const (
type Metrics struct { type Metrics struct {
RequestCounter metrics.Counter RequestCounter metrics.Counter
ResponseCounter metrics.Counter ResponseCounter metrics.Counter
PanicCounter metrics.Counter
} }
// NewMetrics creates new metrics with given metrics.Type // NewMetrics creates new metrics with given metrics.Type
@ -35,11 +36,13 @@ func NewMetrics(metricsType Type) *Metrics {
return &Metrics{ return &Metrics{
RequestCounter: discard.NewCounter(), RequestCounter: discard.NewCounter(),
ResponseCounter: discard.NewCounter(), ResponseCounter: discard.NewCounter(),
PanicCounter: discard.NewCounter(),
} }
case ExpVar: case ExpVar:
return &Metrics{ return &Metrics{
RequestCounter: expvar.NewCounter("request_count"), RequestCounter: expvar.NewCounter("request_count"),
ResponseCounter: expvar.NewCounter("response_count"), ResponseCounter: expvar.NewCounter("response_count"),
PanicCounter: expvar.NewCounter("panic_count"),
} }
case Prometheus: case Prometheus:
return &Metrics{ return &Metrics{
@ -53,6 +56,11 @@ func NewMetrics(metricsType Type) *Metrics {
Name: "response_count", Name: "response_count",
Help: "Response count", Help: "Response count",
}, []string{"method"}), }, []string{"method"}),
PanicCounter: prometheus.NewCounterFrom(stdprometheus.CounterOpts{
Namespace: "geziyor",
Name: "panic_count",
Help: "Panic count",
}, []string{}),
} }
default: default:
return nil return nil

View File

@ -28,9 +28,10 @@ func init() {
// recoverMiddleware recovers scraping being crashed. // recoverMiddleware recovers scraping being crashed.
// Logs error and stack trace // Logs error and stack trace
func recoverMiddleware() { func recoverMiddleware(g *Geziyor, r *Request) {
if r := recover(); r != nil { if r := recover(); r != nil {
log.Println(r, string(debug.Stack())) log.Println(r, string(debug.Stack()))
g.metrics.PanicCounter.Add(1)
} }
} }
@ -75,7 +76,7 @@ func delayMiddleware(g *Geziyor, r *Request) {
// logMiddleware logs requests // logMiddleware logs requests
func logMiddleware(g *Geziyor, r *Request) { func logMiddleware(g *Geziyor, r *Request) {
//log.Println("Fetching: ", r.URL.String()) log.Println("Fetching: ", r.URL.String())
} }
// metricsRequestMiddleware sets stats // metricsRequestMiddleware sets stats