/
config.go
89 lines (78 loc) · 2.17 KB
/
config.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
86
87
88
89
package gossip
import (
"io/ioutil"
nlog "log"
"os"
"github.com/euforia/gossip/peers"
"github.com/hashicorp/memberlist"
"github.com/hexablock/log"
"github.com/hexablock/vivaldi"
)
// PoolConfig is the config for a single gossip pool
type PoolConfig struct {
ID int32
Peers peers.Library
Vivaldi *vivaldi.Client
Memberlist *memberlist.Config
Delegate Delegate
Events EventsDelegate
Logger *log.Logger
Debug bool
}
// Validate validates the pool config
func (conf *PoolConfig) Validate() {
if conf.Debug {
conf.Memberlist.Logger = nlog.New(os.Stderr, "", nlog.LstdFlags|nlog.Lmicroseconds)
} else {
conf.Memberlist.Logger = nlog.New(ioutil.Discard, "", nlog.LstdFlags)
}
}
// Config holds the config instantiate a Gossip instance
type Config struct {
Name string
AdvertiseAddr string
AdvertisePort int
BindAddr string
BindPort int
PublicKey []byte // Public key for the node
Coordinate *vivaldi.Config
Logger *log.Logger
Debug bool // Turn on debug
}
// Validate validates thte config
func (conf *Config) Validate() {
conf.Logger.EnableDebug(conf.Debug)
}
// DefaultConfig returns a default config to instantiate a Gossip instance
func DefaultConfig() *Config {
return &Config{
BindAddr: "0.0.0.0",
Coordinate: vivaldi.DefaultConfig(),
Logger: log.NewDefaultLogger(),
}
}
// DefaultPoolConfig returns a base config to init a new gossip pool
func DefaultPoolConfig(id int32) *PoolConfig {
return &PoolConfig{
ID: id,
Peers: peers.NewInmemLibrary(),
}
}
// DefaultWANPoolConfig returns a sane config suitable for WAN based pool
func DefaultWANPoolConfig(id int32) *PoolConfig {
c := DefaultPoolConfig(id)
c.Memberlist = memberlist.DefaultWANConfig()
return c
}
// DefaultLANPoolConfig returns a sane config suitable for LAN based pool
func DefaultLANPoolConfig(id int32) *PoolConfig {
c := DefaultPoolConfig(id)
c.Memberlist = memberlist.DefaultLANConfig()
return c
}
// DefaultLocalPoolConfig returns a sane config suitable for local pool
func DefaultLocalPoolConfig(id int32) *PoolConfig {
c := DefaultPoolConfig(id)
c.Memberlist = memberlist.DefaultLocalConfig()
return c
}