1package lb
2
3import (
4	"math/rand"
5
6	"github.com/go-kit/kit/endpoint"
7	"github.com/go-kit/kit/sd"
8)
9
10// NewRandom returns a load balancer that selects services randomly.
11func NewRandom(s sd.Endpointer, seed int64) Balancer {
12	return &random{
13		s: s,
14		r: rand.New(rand.NewSource(seed)),
15	}
16}
17
18type random struct {
19	s sd.Endpointer
20	r *rand.Rand
21}
22
23func (r *random) Endpoint() (endpoint.Endpoint, error) {
24	endpoints, err := r.s.Endpoints()
25	if err != nil {
26		return nil, err
27	}
28	if len(endpoints) <= 0 {
29		return nil, ErrNoEndpoints
30	}
31	return endpoints[r.r.Intn(len(endpoints))], nil
32}
33