forked from nsqio/nsq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
options.go
120 lines (98 loc) · 3.73 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
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
package nsqd
import (
"crypto/md5"
"crypto/tls"
"hash/crc32"
"io"
"log"
"os"
"time"
)
type nsqdOptions struct {
// basic options
ID int64 `flag:"worker-id" cfg:"id"`
Verbose bool `flag:"verbose"`
TCPAddress string `flag:"tcp-address"`
HTTPAddress string `flag:"http-address"`
HTTPSAddress string `flag:"https-address"`
BroadcastAddress string `flag:"broadcast-address"`
NSQLookupdTCPAddresses []string `flag:"lookupd-tcp-address" cfg:"nsqlookupd_tcp_addresses"`
AuthHTTPAddresses []string `flag:"auth-http-address" cfg:"auth_http_addresses"`
// diskqueue options
DataPath string `flag:"data-path"`
MemQueueSize int64 `flag:"mem-queue-size"`
MaxBytesPerFile int64 `flag:"max-bytes-per-file"`
SyncEvery int64 `flag:"sync-every"`
SyncTimeout time.Duration `flag:"sync-timeout"`
// msg and command options
MsgTimeout time.Duration `flag:"msg-timeout" arg:"1ms"`
MaxMsgTimeout time.Duration `flag:"max-msg-timeout"`
MaxMsgSize int64 `flag:"max-msg-size" deprecated:"max-message-size" cfg:"max_msg_size"`
MaxBodySize int64 `flag:"max-body-size"`
MaxReqTimeout time.Duration `flag:"max-req-timeout"`
ClientTimeout time.Duration
// client overridable configuration options
MaxHeartbeatInterval time.Duration `flag:"max-heartbeat-interval"`
MaxRdyCount int64 `flag:"max-rdy-count"`
MaxOutputBufferSize int64 `flag:"max-output-buffer-size"`
MaxOutputBufferTimeout time.Duration `flag:"max-output-buffer-timeout"`
// statsd integration
StatsdAddress string `flag:"statsd-address"`
StatsdPrefix string `flag:"statsd-prefix"`
StatsdInterval time.Duration `flag:"statsd-interval" arg:"1s"`
StatsdMemStats bool `flag:"statsd-mem-stats"`
// e2e message latency
E2EProcessingLatencyWindowTime time.Duration `flag:"e2e-processing-latency-window-time"`
E2EProcessingLatencyPercentiles []float64 `flag:"e2e-processing-latency-percentile" cfg:"e2e_processing_latency_percentiles"`
// TLS config
TLSCert string `flag:"tls-cert"`
TLSKey string `flag:"tls-key"`
TLSClientAuthPolicy string `flag:"tls-client-auth-policy"`
TLSRootCAFile string `flag:"tls-root-ca-file"`
TLSRequired int `flag:"tls-required"`
TLSMinVersion uint16 `flag:"tls-min-version"`
// compression
DeflateEnabled bool `flag:"deflate"`
MaxDeflateLevel int `flag:"max-deflate-level"`
SnappyEnabled bool `flag:"snappy"`
Logger logger
}
func NewNSQDOptions() *nsqdOptions {
hostname, err := os.Hostname()
if err != nil {
log.Fatal(err)
}
o := &nsqdOptions{
TCPAddress: "0.0.0.0:4150",
HTTPAddress: "0.0.0.0:4151",
HTTPSAddress: "0.0.0.0:4152",
BroadcastAddress: hostname,
MemQueueSize: 10000,
MaxBytesPerFile: 104857600,
SyncEvery: 2500,
SyncTimeout: 2 * time.Second,
MsgTimeout: 60 * time.Second,
MaxMsgTimeout: 15 * time.Minute,
MaxMsgSize: 1024768,
MaxBodySize: 5 * 1024768,
MaxReqTimeout: 1 * time.Hour,
ClientTimeout: 60 * time.Second,
MaxHeartbeatInterval: 60 * time.Second,
MaxRdyCount: 2500,
MaxOutputBufferSize: 64 * 1024,
MaxOutputBufferTimeout: 1 * time.Second,
StatsdPrefix: "nsq.%s",
StatsdInterval: 60 * time.Second,
StatsdMemStats: true,
E2EProcessingLatencyWindowTime: time.Duration(10 * time.Minute),
DeflateEnabled: true,
MaxDeflateLevel: 6,
SnappyEnabled: true,
TLSMinVersion: tls.VersionTLS10,
Logger: log.New(os.Stderr, "[nsqd] ", log.Ldate|log.Ltime|log.Lmicroseconds),
}
h := md5.New()
io.WriteString(h, hostname)
o.ID = int64(crc32.ChecksumIEEE(h.Sum(nil)) % 1024)
return o
}