58 lines
1.0 KiB
Go
58 lines
1.0 KiB
Go
package stats
|
|
|
|
import "sync"
|
|
|
|
type SpotStats struct {
|
|
mu sync.RWMutex
|
|
Received int64
|
|
Processed int64
|
|
Rejected int64
|
|
}
|
|
|
|
var Global = &SpotStats{}
|
|
|
|
func (s *SpotStats) IncrReceived() {
|
|
s.mu.Lock()
|
|
s.Received++
|
|
s.mu.Unlock()
|
|
}
|
|
|
|
func (s *SpotStats) IncrProcessed() {
|
|
s.mu.Lock()
|
|
s.Processed++
|
|
s.mu.Unlock()
|
|
}
|
|
|
|
func (s *SpotStats) IncrRejected() {
|
|
s.mu.Lock()
|
|
s.Rejected++
|
|
s.mu.Unlock()
|
|
}
|
|
|
|
func (s *SpotStats) Get() (received, processed, rejected int64) {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
return s.Received, s.Processed, s.Rejected
|
|
}
|
|
|
|
func (s *SpotStats) SuccessRate() float64 {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
if s.Received == 0 {
|
|
return 0.0
|
|
}
|
|
return float64(s.Processed) / float64(s.Received) * 100.0
|
|
}
|
|
|
|
// Snapshot retourne un map JSON-friendly pour le frontend
|
|
func (s *SpotStats) Snapshot() map[string]interface{} {
|
|
s.mu.RLock()
|
|
defer s.mu.RUnlock()
|
|
return map[string]interface{}{
|
|
"received": s.Received,
|
|
"processed": s.Processed,
|
|
"rejected": s.Rejected,
|
|
"successRate": s.SuccessRate(),
|
|
}
|
|
}
|