You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.9 KiB
126 lines
3.9 KiB
package prom |
|
|
|
import ( |
|
"github.com/prometheus/client_golang/prometheus" |
|
) |
|
|
|
var ( |
|
// LibClient for mc redis and db client. |
|
LibClient = New().WithTimer("go_lib_client", []string{"method"}).WithState("go_lib_client_state", []string{"method", "name"}).WithCounter("go_lib_client_code", []string{"method", "code"}) |
|
// RPCClient rpc client |
|
RPCClient = New().WithTimer("go_rpc_client", []string{"method"}).WithState("go_rpc_client_state", []string{"method", "name"}).WithCounter("go_rpc_client_code", []string{"method", "code"}) |
|
// HTTPClient http client |
|
HTTPClient = New().WithTimer("go_http_client", []string{"method"}).WithState("go_http_client_state", []string{"method", "name"}).WithCounter("go_http_client_code", []string{"method", "code"}) |
|
// HTTPServer for http server |
|
HTTPServer = New().WithTimer("go_http_server", []string{"user", "method"}).WithCounter("go_http_server_code", []string{"user", "method", "code"}) |
|
// RPCServer for rpc server |
|
RPCServer = New().WithTimer("go_rpc_server", []string{"user", "method"}).WithCounter("go_rpc_server_code", []string{"user", "method", "code"}) |
|
// BusinessErrCount for business err count |
|
BusinessErrCount = New().WithCounter("go_business_err_count", []string{"name"}).WithState("go_business_err_state", []string{"name"}) |
|
// BusinessInfoCount for business info count |
|
BusinessInfoCount = New().WithCounter("go_business_info_count", []string{"name"}).WithState("go_business_info_state", []string{"name"}) |
|
// CacheHit for cache hit |
|
CacheHit = New().WithCounter("go_cache_hit", []string{"name"}) |
|
// CacheMiss for cache miss |
|
CacheMiss = New().WithCounter("go_cache_miss", []string{"name"}) |
|
) |
|
|
|
// Prom struct info |
|
type Prom struct { |
|
timer *prometheus.HistogramVec |
|
counter *prometheus.CounterVec |
|
state *prometheus.GaugeVec |
|
} |
|
|
|
// New creates a Prom instance. |
|
func New() *Prom { |
|
return &Prom{} |
|
} |
|
|
|
// WithTimer with summary timer |
|
func (p *Prom) WithTimer(name string, labels []string) *Prom { |
|
if p == nil || p.timer != nil { |
|
return p |
|
} |
|
p.timer = prometheus.NewHistogramVec( |
|
prometheus.HistogramOpts{ |
|
Name: name, |
|
Help: name, |
|
}, labels) |
|
prometheus.MustRegister(p.timer) |
|
return p |
|
} |
|
|
|
// WithCounter sets counter. |
|
func (p *Prom) WithCounter(name string, labels []string) *Prom { |
|
if p == nil || p.counter != nil { |
|
return p |
|
} |
|
p.counter = prometheus.NewCounterVec( |
|
prometheus.CounterOpts{ |
|
Name: name, |
|
Help: name, |
|
}, labels) |
|
prometheus.MustRegister(p.counter) |
|
return p |
|
} |
|
|
|
// WithState sets state. |
|
func (p *Prom) WithState(name string, labels []string) *Prom { |
|
if p == nil || p.state != nil { |
|
return p |
|
} |
|
p.state = prometheus.NewGaugeVec( |
|
prometheus.GaugeOpts{ |
|
Name: name, |
|
Help: name, |
|
}, labels) |
|
prometheus.MustRegister(p.state) |
|
return p |
|
} |
|
|
|
// Timing log timing information (in milliseconds) without sampling |
|
func (p *Prom) Timing(name string, time int64, extra ...string) { |
|
label := append([]string{name}, extra...) |
|
if p.timer != nil { |
|
p.timer.WithLabelValues(label...).Observe(float64(time)) |
|
} |
|
} |
|
|
|
// Incr increments one stat counter without sampling |
|
func (p *Prom) Incr(name string, extra ...string) { |
|
label := append([]string{name}, extra...) |
|
if p.counter != nil { |
|
p.counter.WithLabelValues(label...).Inc() |
|
} |
|
if p.state != nil { |
|
p.state.WithLabelValues(label...).Inc() |
|
} |
|
} |
|
|
|
// Decr decrements one stat counter without sampling |
|
func (p *Prom) Decr(name string, extra ...string) { |
|
if p.state != nil { |
|
label := append([]string{name}, extra...) |
|
p.state.WithLabelValues(label...).Dec() |
|
} |
|
} |
|
|
|
// State set state |
|
func (p *Prom) State(name string, v int64, extra ...string) { |
|
if p.state != nil { |
|
label := append([]string{name}, extra...) |
|
p.state.WithLabelValues(label...).Set(float64(v)) |
|
} |
|
} |
|
|
|
// Add add count v must > 0 |
|
func (p *Prom) Add(name string, v int64, extra ...string) { |
|
label := append([]string{name}, extra...) |
|
if p.counter != nil { |
|
p.counter.WithLabelValues(label...).Add(float64(v)) |
|
} |
|
if p.state != nil { |
|
p.state.WithLabelValues(label...).Add(float64(v)) |
|
} |
|
}
|
|
|