github.com/xtls/xray-core@v1.8.12-0.20240518155711-3168d27b0bdb/app/observatory/command/command.go (about)

     1  package command
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/xtls/xray-core/app/observatory"
     7  	"github.com/xtls/xray-core/common"
     8  	core "github.com/xtls/xray-core/core"
     9  	"github.com/xtls/xray-core/features/extension"
    10  	"google.golang.org/grpc"
    11  )
    12  
    13  type service struct {
    14  	UnimplementedObservatoryServiceServer
    15  	v *core.Instance
    16  
    17  	observatory extension.Observatory
    18  }
    19  
    20  func (s *service) GetOutboundStatus(ctx context.Context, request *GetOutboundStatusRequest) (*GetOutboundStatusResponse, error) {
    21  	resp, err := s.observatory.GetObservation(ctx)
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  	retdata := resp.(*observatory.ObservationResult)
    26  	return &GetOutboundStatusResponse{
    27  		Status: retdata,
    28  	}, nil
    29  }
    30  
    31  func (s *service) Register(server *grpc.Server) {
    32  	RegisterObservatoryServiceServer(server, s)
    33  }
    34  
    35  func init() {
    36  	common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, cfg interface{}) (interface{}, error) {
    37  		s := core.MustFromContext(ctx)
    38  		sv := &service{v: s}
    39  		err := s.RequireFeatures(func(Observatory extension.Observatory) {
    40  			sv.observatory = Observatory
    41  		})
    42  		if err != nil {
    43  			return nil, err
    44  		}
    45  		return sv, nil
    46  	}))
    47  }