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 {
defer g.wg.Done()
}
defer recoverMiddleware()
defer recoverMiddleware(g, req)
for _, middlewareFunc := range g.requestMiddlewares {
middlewareFunc(g, req)

View File

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

View File

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