Compare commits

..

2 commits

Author SHA1 Message Date
f9f08a2338
chore(go): bump go version to 1.23.3
Some checks failed
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/build Pipeline failed
2024-11-28 12:06:09 +01:00
02ae778018
feat(exporter): add prometheus exporter for cache, database & webserver stats 2024-11-28 12:06:06 +01:00
3 changed files with 18 additions and 8 deletions

View file

@ -15,7 +15,12 @@ type Collector struct {
queue *RequestDataQueue queue *RequestDataQueue
} }
func NewCollector(config *cmd.AppSettings, cache *cache.Cache, db *database.Database, queue *RequestDataQueue) *Collector { func NewCollector(
config *cmd.AppSettings,
cache *cache.Cache,
db *database.Database,
queue *RequestDataQueue,
) *Collector {
return &Collector{ return &Collector{
config: config, config: config,
cache: cache, cache: cache,

View file

@ -8,7 +8,7 @@ import (
"github.com/go-chi/chi/v5/middleware" "github.com/go-chi/chi/v5/middleware"
) )
type requestData struct { type RequestData struct {
Latency time.Duration Latency time.Duration
Request *http.Request Request *http.Request
Start time.Time Start time.Time
@ -16,22 +16,22 @@ type requestData struct {
type RequestDataQueue struct { type RequestDataQueue struct {
mu sync.Mutex mu sync.Mutex
data []requestData data []RequestData
} }
func NewRequestDataQueue() *RequestDataQueue { func NewRequestDataQueue() *RequestDataQueue {
return &RequestDataQueue{ return &RequestDataQueue{
data: []requestData{}, data: []RequestData{},
} }
} }
func (q *RequestDataQueue) Add(data requestData) { func (q *RequestDataQueue) Add(data RequestData) {
q.mu.Lock() q.mu.Lock()
defer q.mu.Unlock() defer q.mu.Unlock()
q.data = append(q.data, data) q.data = append(q.data, data)
} }
func (q *RequestDataQueue) ConsumeAll() []requestData { func (q *RequestDataQueue) ConsumeAll() []RequestData {
q.mu.Lock() q.mu.Lock()
defer q.mu.Unlock() defer q.mu.Unlock()
data := q.data data := q.data
@ -57,7 +57,7 @@ func (m Middleware) handler(next http.Handler) http.Handler {
next.ServeHTTP(ww, r) next.ServeHTTP(ww, r)
m.queue.Add( m.queue.Add(
requestData{ RequestData{
Latency: time.Since(start), Latency: time.Since(start),
Request: r, Request: r,
Start: start, Start: start,

View file

@ -85,7 +85,12 @@ func main() {
} }
} }
func enableExporter(settings *cmd.AppSettings, cache *cache.Cache, db *database.Database, queue *exporter.RequestDataQueue) error { func enableExporter(
settings *cmd.AppSettings,
cache *cache.Cache,
db *database.Database,
queue *exporter.RequestDataQueue,
) error {
prometheus.MustRegister(exporter.NewCollector(settings, cache, db, queue)) prometheus.MustRegister(exporter.NewCollector(settings, cache, db, queue))
metricsServer := &http.Server{ metricsServer := &http.Server{