Compare commits

..

1 Commits

Author SHA1 Message Date
Ho
d6783b411a wip 2026-02-16 15:11:08 +09:00
3 changed files with 63 additions and 7 deletions

View File

@@ -35,7 +35,7 @@ func InitController(cfg *config.ProxyConfig, db *gorm.DB, reg prometheus.Registe
clients[cli.Name()] = cli
}
proverManager := NewProverManagerWithPersistent(100, db)
proverManager := NewProverManagerWithPersistent(100, db, reg)
priorityManager := NewPriorityUpstreamManagerPersistent(db)
Auth = NewAuthController(cfg, clients, proverManager)

View File

@@ -8,6 +8,7 @@ import (
"gorm.io/gorm"
"github.com/prometheus/client_golang/prometheus"
"github.com/scroll-tech/go-ethereum/log"
ctypes "scroll-tech/common/types"
@@ -21,23 +22,78 @@ type ProverManager struct {
willDeprecatedData map[string]*proverSession
sizeLimit int
persistent *proverDataPersist
clientLoginTries *prometheus.CounterVec
getTaskTries *prometheus.CounterVec
submitTaskTries *prometheus.CounterVec
upstreamFail *prometheus.GaugeVec
clientLoginFail *prometheus.CounterVec
getTaskFail *prometheus.CounterVec
submitTaskFail *prometheus.CounterVec
}
func NewProverManager(size int) *ProverManager {
return &ProverManager{
func NewProverManager(size int, reg prometheus.Registerer) *ProverManager {
m := &ProverManager{
data: make(map[string]*proverSession),
willDeprecatedData: make(map[string]*proverSession),
sizeLimit: size,
}
m.registerCounters(reg)
return m
}
func NewProverManagerWithPersistent(size int, db *gorm.DB) *ProverManager {
return &ProverManager{
func NewProverManagerWithPersistent(size int, db *gorm.DB, reg prometheus.Registerer) *ProverManager {
m := &ProverManager{
data: make(map[string]*proverSession),
willDeprecatedData: make(map[string]*proverSession),
sizeLimit: size,
persistent: NewProverDataPersist(db),
}
m.registerCounters(reg)
return m
}
func (m *ProverManager) registerCounters(reg prometheus.Registerer) {
m.upstreamFail = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "upstream_error",
Help: "Set to 1 while a upstream session can not be obtained",
}, []string{"upstream"})
m.clientLoginFail = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "login_failure",
Help: "Client login has encountered an error",
}, []string{"upstream"})
m.getTaskFail = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "getTask_failure",
Help: "GetTask request has encountered an error",
}, []string{"upstream"})
m.submitTaskFail = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "submitTask_failure",
Help: "SubmitTask request has encountered an error",
}, []string{"upstream"})
m.clientLoginTries = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "prover_speed",
Help: "Cycle against running time of prover (in mhz)",
}, []string{"upstream"})
m.getTaskTries = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "prover_speed",
Help: "Cycle against running time of prover (in mhz)",
}, []string{"upstream"})
m.submitTaskTries = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "prover_speed",
Help: "Cycle against running time of prover (in mhz)",
}, []string{"upstream"})
if reg != nil {
reg.MustRegister(m.upstreamFail)
reg.MustRegister(m.clientLoginFail)
}
}
// get retrieves ProverSession for a given user key, returns empty if still not exists

View File

@@ -6,7 +6,7 @@ import (
// TestProverManagerGetAndCreate validates basic creation and retrieval semantics.
func TestProverManagerGetAndCreate(t *testing.T) {
pm := NewProverManager(2)
pm := NewProverManager(2, nil)
if got := pm.Get("user1"); got != nil {
t.Fatalf("expected nil for non-existent key, got: %+v", got)
@@ -26,7 +26,7 @@ func TestProverManagerGetAndCreate(t *testing.T) {
// TestProverManagerRolloverAndPromotion verifies rollover when sizeLimit is reached
// and that old entries are accessible and promoted back to active data map.
func TestProverManagerRolloverAndPromotion(t *testing.T) {
pm := NewProverManager(2)
pm := NewProverManager(2, nil)
s1 := pm.GetOrCreate("u1")
s2 := pm.GetOrCreate("u2")