37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
package metrics
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
// SampleStoreGauges 按库内真实计数刷新端总数、待投递、定时消息(无对应行则为 0)。
|
|
func SampleStoreGauges(ctx context.Context, r *Registry, db *sql.DB) error {
|
|
if r == nil || db == nil {
|
|
return nil
|
|
}
|
|
var endpoints, pending, scheduled int
|
|
if err := db.QueryRowContext(ctx, `SELECT COUNT(*) FROM endpoints`).Scan(&endpoints); err != nil {
|
|
return err
|
|
}
|
|
if err := db.QueryRowContext(ctx, `SELECT COUNT(*) FROM deliveries WHERE state = 'pending'`).Scan(&pending); err != nil {
|
|
return err
|
|
}
|
|
if err := db.QueryRowContext(ctx, `SELECT COUNT(*) FROM messages WHERE state = 'scheduled'`).Scan(&scheduled); err != nil {
|
|
return err
|
|
}
|
|
r.EndpointsTotal.Set(float64(endpoints))
|
|
r.DeliveriesPending.Set(float64(pending))
|
|
r.MessagesScheduled.Set(float64(scheduled))
|
|
return nil
|
|
}
|
|
|
|
// SampleQueues 刷新写队列与密码哈希排队长度(传入当前真实长度,不做估算)。
|
|
func SampleQueues(r *Registry, writeQueueLen, passwordHashQueueLen int) {
|
|
if r == nil {
|
|
return
|
|
}
|
|
r.WriteQueueLength.Set(float64(writeQueueLen))
|
|
r.PasswordHashQueue.Set(float64(passwordHashQueueLen))
|
|
}
|