-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoptions.go
85 lines (74 loc) · 2.84 KB
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package go_serfly
import (
"github.com/far4599/go-serfly/types"
"github.com/hashicorp/serf/serf"
"go.uber.org/zap"
)
type opt func(membership *Membership) error
// WithLogger sets logger for go-serfly
func WithLogger(logger *zap.Logger) func(membership *Membership) error {
return func(membership *Membership) error {
membership.logger = logger
return nil
}
}
// WithSerfLogger sets logger for serf package
func WithSerfLogger(logger *zap.Logger) func(membership *Membership) error {
return func(membership *Membership) error {
membership.serfLogger = zap.NewStdLog(logger)
return nil
}
}
// WithServiceName sets service name tag for the cluster member
func WithServiceName(serviceName string) func(membership *Membership) error {
return func(membership *Membership) error {
membership.serviceName = serviceName
if membership.Config.Tags == nil {
membership.Config.Tags = make(map[string]string)
}
membership.Config.Tags[types.ServiceTagName] = serviceName
return nil
}
}
// WithSingleNodeCanBecomeLeader sets that single node can become a leader, by default it cannot
func WithSingleNodeCanBecomeLeader() func(membership *Membership) error {
return func(membership *Membership) error {
membership.raftSingleNodeCanBecomeLeader = true
return nil
}
}
// WithOnMemberJoinCallback adds callback to handle member join event
func WithOnMemberJoinCallback(fn func(*Membership, *serf.Member)) func(membership *Membership) error {
return func(membership *Membership) error {
membership.AddMemberEventListener(types.MemberEventJoin, fn)
return nil
}
}
// WithOnMemberLeaveCallback adds callback to handle member leave event
func WithOnMemberLeaveCallback(fn func(*Membership, *serf.Member)) func(membership *Membership) error {
return func(membership *Membership) error {
membership.AddMemberEventListener(types.MemberEventLeave, fn)
return nil
}
}
// WithOnBecomeLeaderCallback adds callback to handle an event of member becomes a leader
func WithOnBecomeLeaderCallback(fn func(*Membership, *serf.Member)) func(membership *Membership) error {
return func(membership *Membership) error {
membership.AddMemberEventListener(types.MemberEventBecameLeader, fn)
return nil
}
}
// WithOnBecomeFollowerCallback adds callback to handle an event of member becomes a follower
func WithOnBecomeFollowerCallback(fn func(*Membership, *serf.Member)) func(membership *Membership) error {
return func(membership *Membership) error {
membership.AddMemberEventListener(types.MemberEventBecameFollower, fn)
return nil
}
}
// WithOnBecomeCandidateCallback adds callback to handle an event of member becomes a candidate
func WithOnBecomeCandidateCallback(fn func(*Membership, *serf.Member)) func(membership *Membership) error {
return func(membership *Membership) error {
membership.AddMemberEventListener(types.MemberEventBecameCandidate, fn)
return nil
}
}