github.com/polarismesh/polaris@v1.17.8/apiserver/grpcserver/discover/v1/server.go (about)

     1  /**
     2   * Tencent is pleased to support the open source community by making Polaris available.
     3   *
     4   * Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
     5   *
     6   * Licensed under the BSD 3-Clause License (the "License");
     7   * you may not use this file except in compliance with the License.
     8   * You may obtain a copy of the License at
     9   *
    10   * https://opensource.org/licenses/BSD-3-Clause
    11   *
    12   * Unless required by applicable law or agreed to in writing, software distributed
    13   * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    14   * CONDITIONS OF ANY KIND, either express or implied. See the License for the
    15   * specific language governing permissions and limitations under the License.
    16   */
    17  
    18  package v1
    19  
    20  import (
    21  	"github.com/polarismesh/polaris/service"
    22  	"github.com/polarismesh/polaris/service/healthcheck"
    23  )
    24  
    25  type DiscoverServer struct {
    26  	namingServer      service.DiscoverServer
    27  	healthCheckServer *healthcheck.Server
    28  	enterRateLimit    func(ip string, method string) uint32
    29  	allowAccess       func(method string) bool
    30  }
    31  
    32  func NewDiscoverServer(options ...Option) *DiscoverServer {
    33  	s := &DiscoverServer{}
    34  
    35  	for i := range options {
    36  		options[i](s)
    37  	}
    38  
    39  	return s
    40  }
    41  
    42  type Option func(s *DiscoverServer)
    43  
    44  func WithNamingServer(svr service.DiscoverServer) Option {
    45  	return func(s *DiscoverServer) {
    46  		s.namingServer = svr
    47  	}
    48  }
    49  
    50  func WithHealthCheckerServer(svr *healthcheck.Server) Option {
    51  	return func(s *DiscoverServer) {
    52  		s.healthCheckServer = svr
    53  	}
    54  }
    55  
    56  func WithEnterRateLimit(f func(ip string, method string) uint32) Option {
    57  	return func(s *DiscoverServer) {
    58  		s.enterRateLimit = f
    59  	}
    60  }
    61  
    62  func WithAllowAccess(f func(method string) bool) Option {
    63  	return func(s *DiscoverServer) {
    64  		s.allowAccess = f
    65  	}
    66  }