add metrics and optimize query

This commit is contained in:
2023-11-03 23:59:35 +03:00
parent e69244a2ff
commit 3d789437c2
3 changed files with 87 additions and 54 deletions

View File

@ -4,6 +4,7 @@ import (
"context"
"fmt"
"io"
"sync/atomic"
"github.com/jackc/pgx/v5/pgxpool"
"golang.org/x/exp/slog"
@ -16,12 +17,40 @@ type DatabaseStats struct {
IdleConnections int32
}
type Metrics struct {
EnqueuedMessages uint64
DequeuedMessages uint64
Acked uint64
Nacked uint64
}
func (m *Metrics) Clone() Metrics {
return *m
}
func (m *Metrics) Enqueue() {
atomic.AddUint64(&m.EnqueuedMessages, 1)
}
func (m *Metrics) Dequeue() {
atomic.AddUint64(&m.DequeuedMessages, 1)
}
func (m *Metrics) Ack() {
atomic.AddUint64(&m.Acked, 1)
}
func (m *Metrics) Nack() {
atomic.AddUint64(&m.Nacked, 1)
}
type Client interface {
io.Closer
Queue() QueueClient
GetStats() DatabaseStats
GetMetrics() Metrics
GetDBStats() DatabaseStats
}
type Config struct {
@ -31,8 +60,9 @@ type Config struct {
}
type client struct {
pool *pgxpool.Pool
log *slog.Logger
pool *pgxpool.Pool
metrics *Metrics
log *slog.Logger
}
func New(ctx context.Context, config Config, logger *slog.Logger) (*client, error) {
@ -61,7 +91,7 @@ func (c *client) Close() error {
return nil
}
func (c *client) GetStats() DatabaseStats {
func (c *client) GetDBStats() DatabaseStats {
stat := c.pool.Stat()
return DatabaseStats{
@ -71,3 +101,7 @@ func (c *client) GetStats() DatabaseStats {
IdleConnections: stat.IdleConns(),
}
}
func (c *client) GetMetrics() Metrics {
return c.metrics.Clone()
}