add metrics and optimize query
This commit is contained in:
@ -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()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user