github.com/xmidt-org/webpa-common@v1.11.9/service/servicecfg/environment.go (about)

     1  package servicecfg
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/go-kit/kit/log"
     7  	"github.com/go-kit/kit/log/level"
     8  	"github.com/go-kit/kit/sd"
     9  	"github.com/xmidt-org/webpa-common/logging"
    10  	"github.com/xmidt-org/webpa-common/service"
    11  	"github.com/xmidt-org/webpa-common/service/consul"
    12  	"github.com/xmidt-org/webpa-common/service/zk"
    13  	"github.com/xmidt-org/webpa-common/xviper"
    14  )
    15  
    16  var (
    17  	zookeeperEnvironmentFactory = zk.NewEnvironment
    18  	consulEnvironmentFactory    = consul.NewEnvironment
    19  
    20  	errNoServiceDiscovery = errors.New("No service discovery configured")
    21  )
    22  
    23  func NewEnvironment(l log.Logger, u xviper.Unmarshaler, options ...service.Option) (service.Environment, error) {
    24  	if l == nil {
    25  		l = logging.DefaultLogger()
    26  	}
    27  
    28  	o := new(Options)
    29  	if err := u.Unmarshal(&o); err != nil {
    30  		return nil, err
    31  	}
    32  
    33  	eo := []service.Option{
    34  		service.WithAccessorFactory(
    35  			service.NewConsistentAccessorFactory(o.vnodeCount()),
    36  		),
    37  		service.WithDefaultScheme(o.defaultScheme()),
    38  	}
    39  
    40  	eo = append(eo, options...)
    41  
    42  	if len(o.Fixed) > 0 {
    43  		l.Log(level.Key(), level.InfoValue(), logging.MessageKey(), "using a fixed set of instances for service discovery", "instances", o.Fixed)
    44  		return service.NewEnvironment(
    45  			append(eo,
    46  				service.WithInstancers(
    47  					service.Instancers{
    48  						"fixed": service.NewContextualInstancer(
    49  							sd.FixedInstancer(o.Fixed),
    50  							map[string]interface{}{"fixed": o.Fixed},
    51  						),
    52  					},
    53  				),
    54  			)...,
    55  		), nil
    56  	}
    57  
    58  	if o.Zookeeper != nil {
    59  		l.Log(level.Key(), level.InfoValue(), logging.MessageKey(), "using zookeeper for service discovery")
    60  		return zookeeperEnvironmentFactory(l, *o.Zookeeper, eo...)
    61  	}
    62  
    63  	if o.Consul != nil {
    64  		l.Log(level.Key(), level.InfoValue(), logging.MessageKey(), "using consul for service discovery")
    65  		return consulEnvironmentFactory(l, o.DefaultScheme, *o.Consul, eo...)
    66  	}
    67  
    68  	return nil, errNoServiceDiscovery
    69  }