forked from influxdata/influxdb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
config.go
130 lines (112 loc) · 3.7 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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package collectd
import (
"errors"
"time"
"github.com/influxdata/influxdb/toml"
)
const (
// DefaultBindAddress is the default port to bind to.
DefaultBindAddress = ":25826"
// DefaultDatabase is the default DB to write to.
DefaultDatabase = "collectd"
// DefaultRetentionPolicy is the default retention policy of the writes.
DefaultRetentionPolicy = ""
// DefaultBatchSize is the default write batch size.
DefaultBatchSize = 5000
// DefaultBatchPending is the default number of pending write batches.
DefaultBatchPending = 10
// DefaultBatchDuration is the default batch timeout duration.
DefaultBatchDuration = toml.Duration(10 * time.Second)
// DefaultTypesDB is the default location of the collectd types db file.
DefaultTypesDB = "/usr/share/collectd/types.db"
// DefaultReadBuffer is the default buffer size for the UDP listener.
// Sets the size of the operating system's receive buffer associated with
// the UDP traffic. Keep in mind that the OS must be able
// to handle the number set here or the UDP listener will error and exit.
//
// DefaultReadBuffer = 0 means to use the OS default, which is usually too
// small for high UDP performance.
//
// Increasing OS buffer limits:
// Linux: sudo sysctl -w net.core.rmem_max=<read-buffer>
// BSD/Darwin: sudo sysctl -w kern.ipc.maxsockbuf=<read-buffer>
DefaultReadBuffer = 0
// DefaultSecurityLevel is the default security level.
DefaultSecurityLevel = "none"
// DefaultAuthFile is the default location of the user/password file.
DefaultAuthFile = "/etc/collectd/auth_file"
)
// Config represents a configuration for the collectd service.
type Config struct {
Enabled bool `toml:"enabled"`
BindAddress string `toml:"bind-address"`
Database string `toml:"database"`
RetentionPolicy string `toml:"retention-policy"`
BatchSize int `toml:"batch-size"`
BatchPending int `toml:"batch-pending"`
BatchDuration toml.Duration `toml:"batch-timeout"`
ReadBuffer int `toml:"read-buffer"`
TypesDB string `toml:"typesdb"`
SecurityLevel string `toml:"security-level"`
AuthFile string `toml:"auth-file"`
}
// NewConfig returns a new instance of Config with defaults.
func NewConfig() Config {
return Config{
BindAddress: DefaultBindAddress,
Database: DefaultDatabase,
RetentionPolicy: DefaultRetentionPolicy,
ReadBuffer: DefaultReadBuffer,
BatchSize: DefaultBatchSize,
BatchPending: DefaultBatchPending,
BatchDuration: DefaultBatchDuration,
TypesDB: DefaultTypesDB,
SecurityLevel: DefaultSecurityLevel,
AuthFile: DefaultAuthFile,
}
}
// WithDefaults takes the given config and returns a new config with any required
// default values set.
func (c *Config) WithDefaults() *Config {
d := *c
if d.BindAddress == "" {
d.BindAddress = DefaultBindAddress
}
if d.Database == "" {
d.Database = DefaultDatabase
}
if d.RetentionPolicy == "" {
d.RetentionPolicy = DefaultRetentionPolicy
}
if d.BatchSize == 0 {
d.BatchSize = DefaultBatchSize
}
if d.BatchPending == 0 {
d.BatchPending = DefaultBatchPending
}
if d.BatchDuration == 0 {
d.BatchDuration = DefaultBatchDuration
}
if d.ReadBuffer == 0 {
d.ReadBuffer = DefaultReadBuffer
}
if d.TypesDB == "" {
d.TypesDB = DefaultTypesDB
}
if d.SecurityLevel == "" {
d.SecurityLevel = DefaultSecurityLevel
}
if d.AuthFile == "" {
d.AuthFile = DefaultAuthFile
}
return &d
}
// Validate returns an error if the Config is invalid.
func (c *Config) Validate() error {
switch c.SecurityLevel {
case "none", "sign", "encrypt":
default:
return errors.New("Invalid security level")
}
return nil
}