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)) }