command.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. //go:build !confonly
  2. // +build !confonly
  3. package command
  4. //go:generate go run github.com/v2fly/v2ray-core/v5/common/errors/errorgen
  5. import (
  6. "context"
  7. "github.com/golang/protobuf/proto"
  8. "google.golang.org/grpc"
  9. core "github.com/v2fly/v2ray-core/v5"
  10. "github.com/v2fly/v2ray-core/v5/app/observatory"
  11. "github.com/v2fly/v2ray-core/v5/common"
  12. "github.com/v2fly/v2ray-core/v5/features"
  13. "github.com/v2fly/v2ray-core/v5/features/extension"
  14. )
  15. type service struct {
  16. UnimplementedObservatoryServiceServer
  17. v *core.Instance
  18. observatory extension.Observatory
  19. }
  20. func (s *service) GetOutboundStatus(ctx context.Context, request *GetOutboundStatusRequest) (*GetOutboundStatusResponse, error) {
  21. var result proto.Message
  22. if request.Tag == "" {
  23. observeResult, err := s.observatory.GetObservation(ctx)
  24. if err != nil {
  25. return nil, newError("cannot get observation").Base(err)
  26. }
  27. result = observeResult
  28. } else {
  29. fet, err := s.observatory.(features.TaggedFeatures).GetFeaturesByTag(request.Tag)
  30. if err != nil {
  31. return nil, newError("cannot get tagged observatory").Base(err)
  32. }
  33. observeResult, err := fet.(extension.Observatory).GetObservation(ctx)
  34. if err != nil {
  35. return nil, newError("cannot get observation").Base(err)
  36. }
  37. result = observeResult
  38. }
  39. retdata := result.(*observatory.ObservationResult)
  40. return &GetOutboundStatusResponse{
  41. Status: retdata,
  42. }, nil
  43. }
  44. func (s *service) Register(server *grpc.Server) {
  45. RegisterObservatoryServiceServer(server, s)
  46. }
  47. func init() {
  48. common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
  49. s := core.MustFromContext(ctx)
  50. sv := &service{v: s}
  51. err := s.RequireFeatures(func(Observatory extension.Observatory) {
  52. sv.observatory = Observatory
  53. })
  54. if err != nil {
  55. return nil, err
  56. }
  57. return sv, nil
  58. }))
  59. }