status-go/services/rpcstats/api.go

54 lines
1.2 KiB
Go

package rpcstats
import (
"context"
"sync"
)
// PublicAPI represents a set of APIs from the namespace.
type PublicAPI struct {
s *Service
}
// NewAPI creates an instance of the API.
func NewAPI(s *Service) *PublicAPI {
return &PublicAPI{s: s}
}
// Reset resets RPC usage stats
func (api *PublicAPI) Reset(context context.Context) {
resetStats()
}
type RPCStats struct {
Total uint `json:"total"`
CounterPerMethod map[string]uint `json:"methods"`
}
// GetStats returns RPC usage stats
func (api *PublicAPI) GetStats(context context.Context) (RPCStats, error) {
total, perMethod, perMethodPerTag := getStats()
counterPerMethod := make(map[string]uint)
perMethod.Range(func(key, value interface{}) bool {
counterPerMethod[key.(string)] = value.(uint)
return true
})
perMethodPerTag.Range(func(key, value interface{}) bool {
tag := key.(string)
methods := value.(*sync.Map)
methods.Range(func(key, value interface{}) bool {
method := key.(string)
count := value.(uint)
counterPerMethod[method+"_"+tag] = count
return true
})
return true
})
return RPCStats{
Total: total,
CounterPerMethod: counterPerMethod,
}, nil
}