From 9cb1566a788856b93f2364e387fe61e513d9d735 Mon Sep 17 00:00:00 2001 From: Shelikhoo Date: Fri, 18 Jun 2021 17:39:13 +0100 Subject: [PATCH] moving health ping to observatory as a standalone component --- app/observatory/burst/burst.go | 14 + app/observatory/burst/burstobserver.go | 105 +++++++ app/observatory/burst/config.proto | 29 ++ .../burst}/healthping.go | 22 +- .../burst}/healthping_result.go | 2 +- .../burst}/healthping_result_test.go | 19 +- app/{router => observatory/burst}/ping.go | 24 +- app/observatory/config.proto | 13 +- app/router/config.pb.go | 263 +++++------------- app/router/config.proto | 15 - app/router/router.go | 14 - app/router/strategy_leastload.go | 14 +- common/session/context.go | 13 - common/session/session.go | 6 - 14 files changed, 260 insertions(+), 293 deletions(-) create mode 100644 app/observatory/burst/burst.go create mode 100644 app/observatory/burst/burstobserver.go create mode 100644 app/observatory/burst/config.proto rename app/{router => observatory/burst}/healthping.go (93%) rename app/{router => observatory/burst}/healthping_result.go (99%) rename app/{router => observatory/burst}/healthping_result_test.go (84%) rename app/{router => observatory/burst}/ping.go (65%) diff --git a/app/observatory/burst/burst.go b/app/observatory/burst/burst.go new file mode 100644 index 000000000..13eb0fd60 --- /dev/null +++ b/app/observatory/burst/burst.go @@ -0,0 +1,14 @@ +package burst + +import ( + "math" + "time" +) + +//go:generate go run github.com/v2fly/v2ray-core/v4/common/errors/errorgen + +const ( + rttFailed = time.Duration(math.MaxInt64 - iota) + rttUntested + rttUnqualified +) diff --git a/app/observatory/burst/burstobserver.go b/app/observatory/burst/burstobserver.go new file mode 100644 index 000000000..85d38ace9 --- /dev/null +++ b/app/observatory/burst/burstobserver.go @@ -0,0 +1,105 @@ +package burst + +import ( + "context" + core "github.com/v2fly/v2ray-core/v4" + "github.com/v2fly/v2ray-core/v4/app/observatory" + "github.com/v2fly/v2ray-core/v4/common" + "github.com/v2fly/v2ray-core/v4/common/signal/done" + "github.com/v2fly/v2ray-core/v4/features/extension" + "github.com/v2fly/v2ray-core/v4/features/outbound" + "google.golang.org/protobuf/proto" + "sync" +) + +type Observer struct { + config *Config + ctx context.Context + + statusLock sync.Mutex + hp *HealthPing + + finished *done.Instance + + ohm outbound.Manager +} + +func (o *Observer) GetObservation(ctx context.Context) (proto.Message, error) { + return &observatory.ObservationResult{Status: o.createResult()}, nil +} + +func (o *Observer) createResult() []*observatory.OutboundStatus { + var result []*observatory.OutboundStatus + o.hp.access.Lock() + defer o.hp.access.Unlock() + for name, value := range o.hp.Results { + status := observatory.OutboundStatus{ + Alive: value.getStatistics().All == value.getStatistics().Fail, + Delay: value.getStatistics().Average.Milliseconds(), + LastErrorReason: "", + OutboundTag: name, + LastSeenTime: 0, + LastTryTime: 0, + HealthPing: &observatory.HealthPingMeasurementResult{ + All: int64(value.getStatistics().All), + Fail: int64(value.getStatistics().Fail), + Deviation: int64(value.getStatistics().Deviation), + Average: int64(value.getStatistics().Average), + Max: int64(value.getStatistics().Max), + Min: int64(value.getStatistics().Min), + }, + } + result = append(result, &status) + } + return result +} + +func (o *Observer) Type() interface{} { + return extension.ObservatoryType() +} + +func (o *Observer) Start() error { + if o.config != nil && len(o.config.SubjectSelector) != 0 { + o.finished = done.New() + o.hp.StartScheduler(func() ([]string, error) { + hs, ok := o.ohm.(outbound.HandlerSelector) + if !ok { + + return nil, newError("outbound.Manager is not a HandlerSelector") + } + + outbounds := hs.Select(o.config.SubjectSelector) + return outbounds, nil + }) + } + return nil +} + +func (o *Observer) Close() error { + if o.finished != nil { + o.hp.StopScheduler() + return o.finished.Close() + } + return nil +} + +func New(ctx context.Context, config *Config) (*Observer, error) { + var outboundManager outbound.Manager + err := core.RequireFeatures(ctx, func(om outbound.Manager) { + outboundManager = om + }) + if err != nil { + return nil, newError("Cannot get depended features").Base(err) + } + return &Observer{ + config: config, + ctx: ctx, + ohm: outboundManager, + }, nil +} + +func init() { + common.Must(common.RegisterConfig((*Config)(nil), func(ctx context.Context, config interface{}) (interface{}, error) { + return New(ctx, config.(*Config)) + })) +} diff --git a/app/observatory/burst/config.proto b/app/observatory/burst/config.proto new file mode 100644 index 000000000..70c16039c --- /dev/null +++ b/app/observatory/burst/config.proto @@ -0,0 +1,29 @@ +syntax = "proto3"; + +package v2ray.core.app.observatory.burst; +option csharp_namespace = "V2Ray.Core.App.Observatory.Burst"; +option go_package = "github.com/v2fly/v2ray-core/v4/app/observatory/burst"; +option java_package = "com.v2ray.core.app.observatory.burst"; +option java_multiple_files = true; + +message Config { + /* @Document The selectors for outbound under observation + */ + repeated string subject_selector = 2; + + HealthPingConfig ping_config = 3; +} + +message HealthPingConfig { + // destination url, need 204 for success return + // default http://www.google.com/gen_204 + string destination = 1; + // connectivity check url + string connectivity = 2; + // health check interval, int64 values of time.Duration + int64 interval = 3; + // sampling count is the amount of recent ping results which are kept for calculation + int32 samplingCount = 4; + // ping timeout, int64 values of time.Duration + int64 timeout = 5; +} \ No newline at end of file diff --git a/app/router/healthping.go b/app/observatory/burst/healthping.go similarity index 93% rename from app/router/healthping.go rename to app/observatory/burst/healthping.go index 1c7ce4a86..6f88cff50 100644 --- a/app/router/healthping.go +++ b/app/observatory/burst/healthping.go @@ -1,13 +1,13 @@ -package router +package burst import ( + "context" "fmt" "strings" sync "sync" "time" "github.com/v2fly/v2ray-core/v4/common/dice" - "github.com/v2fly/v2ray-core/v4/features/routing" ) // HealthPingSettings holds settings for health Checker @@ -21,16 +21,16 @@ type HealthPingSettings struct { // HealthPing is the health checker for balancers type HealthPing struct { - access sync.Mutex - ticker *time.Ticker - dispatcher routing.Dispatcher + ctx context.Context + access sync.Mutex + ticker *time.Ticker Settings *HealthPingSettings Results map[string]*HealthPingRTTS } // NewHealthPing creates a new HealthPing with settings -func NewHealthPing(config *HealthPingConfig, dispatcher routing.Dispatcher) *HealthPing { +func NewHealthPing(ctx context.Context, config *HealthPingConfig) *HealthPing { settings := &HealthPingSettings{} if config != nil { settings = &HealthPingSettings{ @@ -59,9 +59,9 @@ func NewHealthPing(config *HealthPingConfig, dispatcher routing.Dispatcher) *Hea settings.Timeout = time.Duration(5) * time.Second } return &HealthPing{ - dispatcher: dispatcher, - Settings: settings, - Results: nil, + ctx: ctx, + Settings: settings, + Results: nil, } } @@ -121,14 +121,14 @@ func (h *HealthPing) doCheck(tags []string, duration time.Duration, rounds int) return } ch := make(chan *rtt, count) - // rtts := make(map[string][]time.Duration) + for _, tag := range tags { handler := tag client := newPingClient( + h.ctx, h.Settings.Destination, h.Settings.Timeout, handler, - h.dispatcher, ) for i := 0; i < rounds; i++ { delay := time.Duration(0) diff --git a/app/router/healthping_result.go b/app/observatory/burst/healthping_result.go similarity index 99% rename from app/router/healthping_result.go rename to app/observatory/burst/healthping_result.go index a419fd80c..f48d37b60 100644 --- a/app/router/healthping_result.go +++ b/app/observatory/burst/healthping_result.go @@ -1,4 +1,4 @@ -package router +package burst import ( "math" diff --git a/app/router/healthping_result_test.go b/app/observatory/burst/healthping_result_test.go similarity index 84% rename from app/router/healthping_result_test.go rename to app/observatory/burst/healthping_result_test.go index decdde6bf..8dae359a3 100644 --- a/app/router/healthping_result_test.go +++ b/app/observatory/burst/healthping_result_test.go @@ -1,22 +1,21 @@ -package router_test +package burst_test import ( + "github.com/v2fly/v2ray-core/v4/app/observatory/burst" "math" reflect "reflect" "testing" "time" - - "github.com/v2fly/v2ray-core/v4/app/router" ) func TestHealthPingResults(t *testing.T) { rtts := []int64{60, 140, 60, 140, 60, 60, 140, 60, 140} - hr := router.NewHealthPingResult(4, time.Hour) + hr := burst.NewHealthPingResult(4, time.Hour) for _, rtt := range rtts { hr.Put(time.Duration(rtt)) } rttFailed := time.Duration(math.MaxInt64) - expected := &router.HealthPingStats{ + expected := &burst.HealthPingStats{ All: 4, Fail: 0, Deviation: 40, @@ -37,7 +36,7 @@ func TestHealthPingResults(t *testing.T) { } hr.Put(rttFailed) hr.Put(rttFailed) - expected = &router.HealthPingStats{ + expected = &burst.HealthPingStats{ All: 4, Fail: 4, Deviation: 0, @@ -53,7 +52,7 @@ func TestHealthPingResults(t *testing.T) { func TestHealthPingResultsIgnoreOutdated(t *testing.T) { rtts := []int64{60, 140, 60, 140} - hr := router.NewHealthPingResult(4, time.Duration(10)*time.Millisecond) + hr := burst.NewHealthPingResult(4, time.Duration(10)*time.Millisecond) for i, rtt := range rtts { if i == 2 { // wait for previous 2 outdated @@ -62,7 +61,7 @@ func TestHealthPingResultsIgnoreOutdated(t *testing.T) { hr.Put(time.Duration(rtt)) } hr.Get() - expected := &router.HealthPingStats{ + expected := &burst.HealthPingStats{ All: 2, Fail: 0, Deviation: 40, @@ -76,7 +75,7 @@ func TestHealthPingResultsIgnoreOutdated(t *testing.T) { } // wait for all outdated time.Sleep(time.Duration(10) * time.Millisecond) - expected = &router.HealthPingStats{ + expected = &burst.HealthPingStats{ All: 0, Fail: 0, Deviation: 0, @@ -90,7 +89,7 @@ func TestHealthPingResultsIgnoreOutdated(t *testing.T) { } hr.Put(time.Duration(60)) - expected = &router.HealthPingStats{ + expected = &burst.HealthPingStats{ All: 1, Fail: 0, // 1 sample, std=0.5rtt diff --git a/app/router/ping.go b/app/observatory/burst/ping.go similarity index 65% rename from app/router/ping.go rename to app/observatory/burst/ping.go index ba192264a..41dde8da6 100644 --- a/app/router/ping.go +++ b/app/observatory/burst/ping.go @@ -1,13 +1,12 @@ -package router +package burst import ( "context" + "github.com/v2fly/v2ray-core/v4/transport/internet/tagged" "net/http" "time" "github.com/v2fly/v2ray-core/v4/common/net" - "github.com/v2fly/v2ray-core/v4/common/session" - "github.com/v2fly/v2ray-core/v4/features/routing" ) type pingClient struct { @@ -15,10 +14,10 @@ type pingClient struct { httpClient *http.Client } -func newPingClient(destination string, timeout time.Duration, handler string, dispatcher routing.Dispatcher) *pingClient { +func newPingClient(ctx context.Context, destination string, timeout time.Duration, handler string) *pingClient { return &pingClient{ destination: destination, - httpClient: newHTTPClient(handler, dispatcher, timeout), + httpClient: newHTTPClient(ctx, handler, timeout), } } @@ -29,7 +28,7 @@ func newDirectPingClient(destination string, timeout time.Duration) *pingClient } } -func newHTTPClient(handler string, dispatcher routing.Dispatcher, timeout time.Duration) *http.Client { +func newHTTPClient(ctxv context.Context, handler string, timeout time.Duration) *http.Client { tr := &http.Transport{ DisableKeepAlives: true, DialContext: func(ctx context.Context, network, addr string) (net.Conn, error) { @@ -37,18 +36,7 @@ func newHTTPClient(handler string, dispatcher routing.Dispatcher, timeout time.D if err != nil { return nil, err } - h := &session.Handler{ - Tag: handler, - } - ctx = session.ContextWithHandler(ctx, h) - link, err := dispatcher.Dispatch(ctx, dest) - if err != nil { - return nil, err - } - return net.NewConnection( - net.ConnectionInputMulti(link.Writer), - net.ConnectionOutputMulti(link.Reader), - ), nil + return tagged.Dialer(ctxv, dest, handler) }, } return &http.Client{ diff --git a/app/observatory/config.proto b/app/observatory/config.proto index 249674556..2ec56c88c 100644 --- a/app/observatory/config.proto +++ b/app/observatory/config.proto @@ -7,7 +7,16 @@ option java_package = "com.v2ray.core.app.observatory"; option java_multiple_files = true; message ObservationResult { - repeated OutboundStatus status = 1; + repeated OutboundStatus status = 1; +} + +message HealthPingMeasurementResult { + int64 all = 1; + int64 fail = 2; + int64 deviation = 3; + int64 average = 4; + int64 max = 5; + int64 min = 6; } message OutboundStatus{ @@ -36,6 +45,8 @@ message OutboundStatus{ @Type id.outboundTag */ int64 last_try_time = 6; + + HealthPingMeasurementResult health_ping = 7; } message ProbeResult{ diff --git a/app/router/config.pb.go b/app/router/config.pb.go index a20b94791..07f006039 100644 --- a/app/router/config.pb.go +++ b/app/router/config.pb.go @@ -132,7 +132,7 @@ func (x Config_DomainStrategy) Number() protoreflect.EnumNumber { // Deprecated: Use Config_DomainStrategy.Descriptor instead. func (Config_DomainStrategy) EnumDescriptor() ([]byte, []int) { - return file_app_router_config_proto_rawDescGZIP(), []int{11, 0} + return file_app_router_config_proto_rawDescGZIP(), []int{10, 0} } // Domain for routing decision. @@ -849,7 +849,6 @@ type StrategyLeastLoadConfig struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - HealthCheck *HealthPingConfig `protobuf:"bytes,1,opt,name=healthCheck,proto3" json:"healthCheck,omitempty"` // weight settings Costs []*StrategyWeight `protobuf:"bytes,2,rep,name=costs,proto3" json:"costs,omitempty"` // RTT baselines for selecting, int64 values of time.Duration @@ -894,13 +893,6 @@ func (*StrategyLeastLoadConfig) Descriptor() ([]byte, []int) { return file_app_router_config_proto_rawDescGZIP(), []int{9} } -func (x *StrategyLeastLoadConfig) GetHealthCheck() *HealthPingConfig { - if x != nil { - return x.HealthCheck - } - return nil -} - func (x *StrategyLeastLoadConfig) GetCosts() []*StrategyWeight { if x != nil { return x.Costs @@ -936,91 +928,6 @@ func (x *StrategyLeastLoadConfig) GetTolerance() float32 { return 0 } -type HealthPingConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // destination url, need 204 for success return - // default http://www.google.com/gen_204 - Destination string `protobuf:"bytes,1,opt,name=destination,proto3" json:"destination,omitempty"` - // connectivity check url - Connectivity string `protobuf:"bytes,2,opt,name=connectivity,proto3" json:"connectivity,omitempty"` - // health check interval, int64 values of time.Duration - Interval int64 `protobuf:"varint,3,opt,name=interval,proto3" json:"interval,omitempty"` - // samplingcount is the amount of recent ping results which are kept for calculation - SamplingCount int32 `protobuf:"varint,4,opt,name=samplingCount,proto3" json:"samplingCount,omitempty"` - // ping timeout, int64 values of time.Duration - Timeout int64 `protobuf:"varint,5,opt,name=timeout,proto3" json:"timeout,omitempty"` -} - -func (x *HealthPingConfig) Reset() { - *x = HealthPingConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_app_router_config_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *HealthPingConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*HealthPingConfig) ProtoMessage() {} - -func (x *HealthPingConfig) ProtoReflect() protoreflect.Message { - mi := &file_app_router_config_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use HealthPingConfig.ProtoReflect.Descriptor instead. -func (*HealthPingConfig) Descriptor() ([]byte, []int) { - return file_app_router_config_proto_rawDescGZIP(), []int{10} -} - -func (x *HealthPingConfig) GetDestination() string { - if x != nil { - return x.Destination - } - return "" -} - -func (x *HealthPingConfig) GetConnectivity() string { - if x != nil { - return x.Connectivity - } - return "" -} - -func (x *HealthPingConfig) GetInterval() int64 { - if x != nil { - return x.Interval - } - return 0 -} - -func (x *HealthPingConfig) GetSamplingCount() int32 { - if x != nil { - return x.SamplingCount - } - return 0 -} - -func (x *HealthPingConfig) GetTimeout() int64 { - if x != nil { - return x.Timeout - } - return 0 -} - type Config struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1034,7 +941,7 @@ type Config struct { func (x *Config) Reset() { *x = Config{} if protoimpl.UnsafeEnabled { - mi := &file_app_router_config_proto_msgTypes[11] + mi := &file_app_router_config_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1047,7 +954,7 @@ func (x *Config) String() string { func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_app_router_config_proto_msgTypes[11] + mi := &file_app_router_config_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1060,7 +967,7 @@ func (x *Config) ProtoReflect() protoreflect.Message { // Deprecated: Use Config.ProtoReflect.Descriptor instead. func (*Config) Descriptor() ([]byte, []int) { - return file_app_router_config_proto_rawDescGZIP(), []int{11} + return file_app_router_config_proto_rawDescGZIP(), []int{10} } func (x *Config) GetDomainStrategy() Config_DomainStrategy { @@ -1099,7 +1006,7 @@ type Domain_Attribute struct { func (x *Domain_Attribute) Reset() { *x = Domain_Attribute{} if protoimpl.UnsafeEnabled { - mi := &file_app_router_config_proto_msgTypes[12] + mi := &file_app_router_config_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1112,7 +1019,7 @@ func (x *Domain_Attribute) String() string { func (*Domain_Attribute) ProtoMessage() {} func (x *Domain_Attribute) ProtoReflect() protoreflect.Message { - mi := &file_app_router_config_proto_msgTypes[12] + mi := &file_app_router_config_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1304,61 +1211,45 @@ var file_app_router_config_proto_rawDesc = []byte{ 0x06, 0x72, 0x65, 0x67, 0x65, 0x78, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0x91, 0x02, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, + 0x6c, 0x75, 0x65, 0x22, 0xc6, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x4c, 0x65, 0x61, 0x73, 0x74, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x49, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, - 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x50, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x68, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x3b, 0x0a, 0x05, 0x63, 0x6f, - 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x76, 0x32, 0x72, 0x61, - 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x72, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x73, 0x65, 0x6c, - 0x69, 0x6e, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x09, 0x62, 0x61, 0x73, 0x65, - 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6c, - 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x09, 0x74, 0x6f, - 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xb4, 0x01, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x50, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, - 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x76, 0x69, - 0x74, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x24, - 0x0a, 0x0d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x22, 0xad, - 0x02, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x55, 0x0a, 0x0f, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2c, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, - 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x52, 0x0e, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, - 0x12, 0x36, 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, + 0x3b, 0x0a, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, - 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, - 0x6c, 0x65, 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, - 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, - 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, - 0x67, 0x52, 0x75, 0x6c, 0x65, 0x22, 0x47, 0x0a, 0x0e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x73, 0x49, 0x73, 0x10, - 0x00, 0x12, 0x09, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x49, 0x70, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, - 0x49, 0x70, 0x49, 0x66, 0x4e, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x02, 0x12, 0x0e, - 0x0a, 0x0a, 0x49, 0x70, 0x4f, 0x6e, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x10, 0x03, 0x42, 0x60, - 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, - 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x29, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, - 0x76, 0x32, 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, - 0x70, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0xaa, 0x02, 0x15, 0x56, 0x32, 0x52, 0x61, 0x79, - 0x2e, 0x43, 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x57, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x05, 0x63, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, + 0x09, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x65, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x6d, 0x61, 0x78, 0x52, 0x54, 0x54, 0x12, 0x1c, + 0x0a, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x02, 0x52, 0x09, 0x74, 0x6f, 0x6c, 0x65, 0x72, 0x61, 0x6e, 0x63, 0x65, 0x22, 0xad, 0x02, 0x0a, + 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x55, 0x0a, 0x0f, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x2c, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, + 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, + 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x52, 0x0e, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x36, + 0x0a, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x76, + 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x72, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, + 0x52, 0x04, 0x72, 0x75, 0x6c, 0x65, 0x12, 0x4b, 0x0a, 0x0e, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, 0x70, 0x70, 0x2e, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, + 0x52, 0x75, 0x6c, 0x65, 0x52, 0x0d, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x52, + 0x75, 0x6c, 0x65, 0x22, 0x47, 0x0a, 0x0e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x79, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x73, 0x49, 0x73, 0x10, 0x00, 0x12, + 0x09, 0x0a, 0x05, 0x55, 0x73, 0x65, 0x49, 0x70, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x70, + 0x49, 0x66, 0x4e, 0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, + 0x49, 0x70, 0x4f, 0x6e, 0x44, 0x65, 0x6d, 0x61, 0x6e, 0x64, 0x10, 0x03, 0x42, 0x60, 0x0a, 0x19, + 0x63, 0x6f, 0x6d, 0x2e, 0x76, 0x32, 0x72, 0x61, 0x79, 0x2e, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x61, + 0x70, 0x70, 0x2e, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x50, 0x01, 0x5a, 0x29, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x76, 0x32, 0x66, 0x6c, 0x79, 0x2f, 0x76, 0x32, + 0x72, 0x61, 0x79, 0x2d, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x76, 0x34, 0x2f, 0x61, 0x70, 0x70, 0x2f, + 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0xaa, 0x02, 0x15, 0x56, 0x32, 0x52, 0x61, 0x79, 0x2e, 0x43, + 0x6f, 0x72, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1374,7 +1265,7 @@ func file_app_router_config_proto_rawDescGZIP() []byte { } var file_app_router_config_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_app_router_config_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_app_router_config_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_app_router_config_proto_goTypes = []interface{}{ (Domain_Type)(0), // 0: v2ray.core.app.router.Domain.Type (Config_DomainStrategy)(0), // 1: v2ray.core.app.router.Config.DomainStrategy @@ -1388,18 +1279,17 @@ var file_app_router_config_proto_goTypes = []interface{}{ (*BalancingRule)(nil), // 9: v2ray.core.app.router.BalancingRule (*StrategyWeight)(nil), // 10: v2ray.core.app.router.StrategyWeight (*StrategyLeastLoadConfig)(nil), // 11: v2ray.core.app.router.StrategyLeastLoadConfig - (*HealthPingConfig)(nil), // 12: v2ray.core.app.router.HealthPingConfig - (*Config)(nil), // 13: v2ray.core.app.router.Config - (*Domain_Attribute)(nil), // 14: v2ray.core.app.router.Domain.Attribute - (*net.PortRange)(nil), // 15: v2ray.core.common.net.PortRange - (*net.PortList)(nil), // 16: v2ray.core.common.net.PortList - (*net.NetworkList)(nil), // 17: v2ray.core.common.net.NetworkList - (net.Network)(0), // 18: v2ray.core.common.net.Network - (*serial.TypedMessage)(nil), // 19: v2ray.core.common.serial.TypedMessage + (*Config)(nil), // 12: v2ray.core.app.router.Config + (*Domain_Attribute)(nil), // 13: v2ray.core.app.router.Domain.Attribute + (*net.PortRange)(nil), // 14: v2ray.core.common.net.PortRange + (*net.PortList)(nil), // 15: v2ray.core.common.net.PortList + (*net.NetworkList)(nil), // 16: v2ray.core.common.net.NetworkList + (net.Network)(0), // 17: v2ray.core.common.net.Network + (*serial.TypedMessage)(nil), // 18: v2ray.core.common.serial.TypedMessage } var file_app_router_config_proto_depIdxs = []int32{ 0, // 0: v2ray.core.app.router.Domain.type:type_name -> v2ray.core.app.router.Domain.Type - 14, // 1: v2ray.core.app.router.Domain.attribute:type_name -> v2ray.core.app.router.Domain.Attribute + 13, // 1: v2ray.core.app.router.Domain.attribute:type_name -> v2ray.core.app.router.Domain.Attribute 3, // 2: v2ray.core.app.router.GeoIP.cidr:type_name -> v2ray.core.app.router.CIDR 4, // 3: v2ray.core.app.router.GeoIPList.entry:type_name -> v2ray.core.app.router.GeoIP 2, // 4: v2ray.core.app.router.GeoSite.domain:type_name -> v2ray.core.app.router.Domain @@ -1407,24 +1297,23 @@ var file_app_router_config_proto_depIdxs = []int32{ 2, // 6: v2ray.core.app.router.RoutingRule.domain:type_name -> v2ray.core.app.router.Domain 3, // 7: v2ray.core.app.router.RoutingRule.cidr:type_name -> v2ray.core.app.router.CIDR 4, // 8: v2ray.core.app.router.RoutingRule.geoip:type_name -> v2ray.core.app.router.GeoIP - 15, // 9: v2ray.core.app.router.RoutingRule.port_range:type_name -> v2ray.core.common.net.PortRange - 16, // 10: v2ray.core.app.router.RoutingRule.port_list:type_name -> v2ray.core.common.net.PortList - 17, // 11: v2ray.core.app.router.RoutingRule.network_list:type_name -> v2ray.core.common.net.NetworkList - 18, // 12: v2ray.core.app.router.RoutingRule.networks:type_name -> v2ray.core.common.net.Network + 14, // 9: v2ray.core.app.router.RoutingRule.port_range:type_name -> v2ray.core.common.net.PortRange + 15, // 10: v2ray.core.app.router.RoutingRule.port_list:type_name -> v2ray.core.common.net.PortList + 16, // 11: v2ray.core.app.router.RoutingRule.network_list:type_name -> v2ray.core.common.net.NetworkList + 17, // 12: v2ray.core.app.router.RoutingRule.networks:type_name -> v2ray.core.common.net.Network 3, // 13: v2ray.core.app.router.RoutingRule.source_cidr:type_name -> v2ray.core.app.router.CIDR 4, // 14: v2ray.core.app.router.RoutingRule.source_geoip:type_name -> v2ray.core.app.router.GeoIP - 16, // 15: v2ray.core.app.router.RoutingRule.source_port_list:type_name -> v2ray.core.common.net.PortList - 19, // 16: v2ray.core.app.router.BalancingRule.strategy_settings:type_name -> v2ray.core.common.serial.TypedMessage - 12, // 17: v2ray.core.app.router.StrategyLeastLoadConfig.healthCheck:type_name -> v2ray.core.app.router.HealthPingConfig - 10, // 18: v2ray.core.app.router.StrategyLeastLoadConfig.costs:type_name -> v2ray.core.app.router.StrategyWeight - 1, // 19: v2ray.core.app.router.Config.domain_strategy:type_name -> v2ray.core.app.router.Config.DomainStrategy - 8, // 20: v2ray.core.app.router.Config.rule:type_name -> v2ray.core.app.router.RoutingRule - 9, // 21: v2ray.core.app.router.Config.balancing_rule:type_name -> v2ray.core.app.router.BalancingRule - 22, // [22:22] is the sub-list for method output_type - 22, // [22:22] is the sub-list for method input_type - 22, // [22:22] is the sub-list for extension type_name - 22, // [22:22] is the sub-list for extension extendee - 0, // [0:22] is the sub-list for field type_name + 15, // 15: v2ray.core.app.router.RoutingRule.source_port_list:type_name -> v2ray.core.common.net.PortList + 18, // 16: v2ray.core.app.router.BalancingRule.strategy_settings:type_name -> v2ray.core.common.serial.TypedMessage + 10, // 17: v2ray.core.app.router.StrategyLeastLoadConfig.costs:type_name -> v2ray.core.app.router.StrategyWeight + 1, // 18: v2ray.core.app.router.Config.domain_strategy:type_name -> v2ray.core.app.router.Config.DomainStrategy + 8, // 19: v2ray.core.app.router.Config.rule:type_name -> v2ray.core.app.router.RoutingRule + 9, // 20: v2ray.core.app.router.Config.balancing_rule:type_name -> v2ray.core.app.router.BalancingRule + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_app_router_config_proto_init() } @@ -1554,18 +1443,6 @@ func file_app_router_config_proto_init() { } } file_app_router_config_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HealthPingConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_app_router_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Config); i { case 0: return &v.state @@ -1577,7 +1454,7 @@ func file_app_router_config_proto_init() { return nil } } - file_app_router_config_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_app_router_config_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Domain_Attribute); i { case 0: return &v.state @@ -1594,7 +1471,7 @@ func file_app_router_config_proto_init() { (*RoutingRule_Tag)(nil), (*RoutingRule_BalancingTag)(nil), } - file_app_router_config_proto_msgTypes[12].OneofWrappers = []interface{}{ + file_app_router_config_proto_msgTypes[11].OneofWrappers = []interface{}{ (*Domain_Attribute_BoolValue)(nil), (*Domain_Attribute_IntValue)(nil), } @@ -1604,7 +1481,7 @@ func file_app_router_config_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_app_router_config_proto_rawDesc, NumEnums: 2, - NumMessages: 13, + NumMessages: 12, NumExtensions: 0, NumServices: 0, }, diff --git a/app/router/config.proto b/app/router/config.proto index f7de591d9..23d86d4c9 100644 --- a/app/router/config.proto +++ b/app/router/config.proto @@ -140,7 +140,6 @@ message StrategyWeight { } message StrategyLeastLoadConfig { - HealthPingConfig healthCheck = 1; // weight settings repeated StrategyWeight costs = 2; // RTT baselines for selecting, int64 values of time.Duration @@ -153,20 +152,6 @@ message StrategyLeastLoadConfig { float tolerance = 6; } -message HealthPingConfig { - // destination url, need 204 for success return - // default http://www.google.com/gen_204 - string destination = 1; - // connectivity check url - string connectivity = 2; - // health check interval, int64 values of time.Duration - int64 interval = 3; - // samplingcount is the amount of recent ping results which are kept for calculation - int32 samplingCount = 4; - // ping timeout, int64 values of time.Duration - int64 timeout = 5; -} - message Config { enum DomainStrategy { // Use domain as is. diff --git a/app/router/router.go b/app/router/router.go index d09e9e144..569dba67b 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -114,25 +114,11 @@ func (r *Router) pickRouteInternal(ctx routing.Context) (*Rule, routing.Context, // Start implements common.Runnable. func (r *Router) Start() error { - for _, b := range r.balancers { - checker, ok := b.strategy.(routing.HealthChecker) - if !ok { - continue - } - checker.StartScheduler(b.SelectOutbounds) - } return nil } // Close implements common.Closable. func (r *Router) Close() error { - for _, b := range r.balancers { - checker, ok := b.strategy.(routing.HealthChecker) - if !ok { - continue - } - checker.StopScheduler() - } return nil } diff --git a/app/router/strategy_leastload.go b/app/router/strategy_leastload.go index 9a45270d1..bc13f9a78 100644 --- a/app/router/strategy_leastload.go +++ b/app/router/strategy_leastload.go @@ -2,6 +2,7 @@ package router import ( "fmt" + "github.com/v2fly/v2ray-core/v4/app/observatory/burst" "math" "sort" "strings" @@ -11,16 +12,8 @@ import ( "github.com/v2fly/v2ray-core/v4/features/routing" ) -const ( - rttFailed = time.Duration(math.MaxInt64 - iota) - rttUntested - rttUnqualified -) - -// LeastLoadStrategy represents a random balancing strategy +// LeastLoadStrategy represents a least load balancing strategy type LeastLoadStrategy struct { - *HealthPing - settings *StrategyLeastLoadConfig costs *WeightManager } @@ -28,8 +21,7 @@ type LeastLoadStrategy struct { // NewLeastLoadStrategy creates a new LeastLoadStrategy with settings func NewLeastLoadStrategy(settings *StrategyLeastLoadConfig, dispatcher routing.Dispatcher) *LeastLoadStrategy { return &LeastLoadStrategy{ - HealthPing: NewHealthPing(settings.HealthCheck, dispatcher), - settings: settings, + settings: settings, costs: NewWeightManager( settings.Costs, 1, func(value, cost float64) float64 { diff --git a/common/session/context.go b/common/session/context.go index 04266b59a..2e43b9205 100644 --- a/common/session/context.go +++ b/common/session/context.go @@ -133,16 +133,3 @@ func SubmitOutboundErrorToOriginator(ctx context.Context, err error) { func TrackedConnectionError(ctx context.Context, tracker TrackedRequestErrorFeedback) context.Context { return context.WithValue(ctx, trackedConnectionErrorKey, tracker) } - -// ContextWithHandler returns a new context with handler -func ContextWithHandler(ctx context.Context, handler *Handler) context.Context { - return context.WithValue(ctx, handlerSessionKey, handler) -} - -// HandlerFromContext returns handler config in this context, or nil if not -func HandlerFromContext(ctx context.Context) *Handler { - if handler, ok := ctx.Value(handlerSessionKey).(*Handler); ok { - return handler - } - return nil -} diff --git a/common/session/session.go b/common/session/session.go index 5e9c0afc9..2ee5cc46e 100644 --- a/common/session/session.go +++ b/common/session/session.go @@ -78,12 +78,6 @@ type Sockopt struct { Mark int32 } -// Handler is the handler setting for dispatching. -type Handler struct { - // Tag of outbound handler. - Tag string -} - // SetAttribute attachs additional string attributes to content. func (c *Content) SetAttribute(name string, value string) { if c.Attributes == nil {