command.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package command
  2. //go:generate go run $GOPATH/src/v2ray.com/core/common/errors/errorgen/main.go -pkg command -path App,Stats,Command
  3. import (
  4. "context"
  5. grpc "google.golang.org/grpc"
  6. "v2ray.com/core"
  7. "v2ray.com/core/common"
  8. )
  9. type statsServer struct {
  10. stats core.StatManager
  11. }
  12. func (s *statsServer) GetStats(ctx context.Context, request *GetStatsRequest) (*GetStatsResponse, error) {
  13. c := s.stats.GetCounter(request.Name)
  14. if c == nil {
  15. return nil, newError(request.Name, " not found.")
  16. }
  17. var value int64
  18. if request.Reset_ {
  19. value = c.Set(0)
  20. } else {
  21. value = c.Value()
  22. }
  23. return &GetStatsResponse{
  24. Stat: &Stat{
  25. Name: request.Name,
  26. Value: value,
  27. },
  28. }, nil
  29. }
  30. type service struct {
  31. v *core.Instance
  32. }
  33. func (s *service) Register(server *grpc.Server) {
  34. RegisterStatsServiceServer(server, &statsServer{
  35. stats: s.v.Stats(),
  36. })
  37. }
  38. func init() {
  39. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
  40. s := core.MustFromContext(ctx)
  41. return &service{v: s}, nil
  42. }))
  43. }