github.com/nsqio/nsq@v1.3.0/nsqd/options.go (about)

     1  package nsqd
     2  
     3  import (
     4  	"crypto/md5"
     5  	"crypto/tls"
     6  	"hash/crc32"
     7  	"io"
     8  	"log"
     9  	"os"
    10  	"time"
    11  
    12  	"github.com/nsqio/nsq/internal/lg"
    13  )
    14  
    15  type Options struct {
    16  	// basic options
    17  	ID        int64       `flag:"node-id" cfg:"id"`
    18  	LogLevel  lg.LogLevel `flag:"log-level"`
    19  	LogPrefix string      `flag:"log-prefix"`
    20  	Logger    Logger
    21  
    22  	TCPAddress               string        `flag:"tcp-address"`
    23  	HTTPAddress              string        `flag:"http-address"`
    24  	HTTPSAddress             string        `flag:"https-address"`
    25  	BroadcastAddress         string        `flag:"broadcast-address"`
    26  	BroadcastTCPPort         int           `flag:"broadcast-tcp-port"`
    27  	BroadcastHTTPPort        int           `flag:"broadcast-http-port"`
    28  	NSQLookupdTCPAddresses   []string      `flag:"lookupd-tcp-address" cfg:"nsqlookupd_tcp_addresses"`
    29  	AuthHTTPAddresses        []string      `flag:"auth-http-address" cfg:"auth_http_addresses"`
    30  	HTTPClientConnectTimeout time.Duration `flag:"http-client-connect-timeout" cfg:"http_client_connect_timeout"`
    31  	HTTPClientRequestTimeout time.Duration `flag:"http-client-request-timeout" cfg:"http_client_request_timeout"`
    32  
    33  	// diskqueue options
    34  	DataPath        string        `flag:"data-path"`
    35  	MemQueueSize    int64         `flag:"mem-queue-size"`
    36  	MaxBytesPerFile int64         `flag:"max-bytes-per-file"`
    37  	SyncEvery       int64         `flag:"sync-every"`
    38  	SyncTimeout     time.Duration `flag:"sync-timeout"`
    39  
    40  	QueueScanInterval        time.Duration
    41  	QueueScanRefreshInterval time.Duration
    42  	QueueScanSelectionCount  int `flag:"queue-scan-selection-count"`
    43  	QueueScanWorkerPoolMax   int `flag:"queue-scan-worker-pool-max"`
    44  	QueueScanDirtyPercent    float64
    45  
    46  	// msg and command options
    47  	MsgTimeout    time.Duration `flag:"msg-timeout"`
    48  	MaxMsgTimeout time.Duration `flag:"max-msg-timeout"`
    49  	MaxMsgSize    int64         `flag:"max-msg-size"`
    50  	MaxBodySize   int64         `flag:"max-body-size"`
    51  	MaxReqTimeout time.Duration `flag:"max-req-timeout"`
    52  	ClientTimeout time.Duration
    53  
    54  	// client overridable configuration options
    55  	MaxHeartbeatInterval   time.Duration `flag:"max-heartbeat-interval"`
    56  	MaxRdyCount            int64         `flag:"max-rdy-count"`
    57  	MaxOutputBufferSize    int64         `flag:"max-output-buffer-size"`
    58  	MaxOutputBufferTimeout time.Duration `flag:"max-output-buffer-timeout"`
    59  	MinOutputBufferTimeout time.Duration `flag:"min-output-buffer-timeout"`
    60  	OutputBufferTimeout    time.Duration `flag:"output-buffer-timeout"`
    61  	MaxChannelConsumers    int           `flag:"max-channel-consumers"`
    62  
    63  	// statsd integration
    64  	StatsdAddress          string        `flag:"statsd-address"`
    65  	StatsdPrefix           string        `flag:"statsd-prefix"`
    66  	StatsdInterval         time.Duration `flag:"statsd-interval"`
    67  	StatsdMemStats         bool          `flag:"statsd-mem-stats"`
    68  	StatsdUDPPacketSize    int           `flag:"statsd-udp-packet-size"`
    69  	StatsdExcludeEphemeral bool          `flag:"statsd-exclude-ephemeral"`
    70  
    71  	// e2e message latency
    72  	E2EProcessingLatencyWindowTime  time.Duration `flag:"e2e-processing-latency-window-time"`
    73  	E2EProcessingLatencyPercentiles []float64     `flag:"e2e-processing-latency-percentile" cfg:"e2e_processing_latency_percentiles"`
    74  
    75  	// TLS config
    76  	TLSCert             string `flag:"tls-cert"`
    77  	TLSKey              string `flag:"tls-key"`
    78  	TLSClientAuthPolicy string `flag:"tls-client-auth-policy"`
    79  	TLSRootCAFile       string `flag:"tls-root-ca-file"`
    80  	TLSRequired         int    `flag:"tls-required"`
    81  	TLSMinVersion       uint16 `flag:"tls-min-version"`
    82  
    83  	// compression
    84  	DeflateEnabled  bool `flag:"deflate"`
    85  	MaxDeflateLevel int  `flag:"max-deflate-level"`
    86  	SnappyEnabled   bool `flag:"snappy"`
    87  }
    88  
    89  func NewOptions() *Options {
    90  	hostname, err := os.Hostname()
    91  	if err != nil {
    92  		log.Fatal(err)
    93  	}
    94  
    95  	h := md5.New()
    96  	io.WriteString(h, hostname)
    97  	defaultID := int64(crc32.ChecksumIEEE(h.Sum(nil)) % 1024)
    98  
    99  	return &Options{
   100  		ID:        defaultID,
   101  		LogPrefix: "[nsqd] ",
   102  		LogLevel:  lg.INFO,
   103  
   104  		TCPAddress:        "0.0.0.0:4150",
   105  		HTTPAddress:       "0.0.0.0:4151",
   106  		HTTPSAddress:      "0.0.0.0:4152",
   107  		BroadcastAddress:  hostname,
   108  		BroadcastTCPPort:  0,
   109  		BroadcastHTTPPort: 0,
   110  
   111  		NSQLookupdTCPAddresses: make([]string, 0),
   112  		AuthHTTPAddresses:      make([]string, 0),
   113  
   114  		HTTPClientConnectTimeout: 2 * time.Second,
   115  		HTTPClientRequestTimeout: 5 * time.Second,
   116  
   117  		MemQueueSize:    10000,
   118  		MaxBytesPerFile: 100 * 1024 * 1024,
   119  		SyncEvery:       2500,
   120  		SyncTimeout:     2 * time.Second,
   121  
   122  		QueueScanInterval:        100 * time.Millisecond,
   123  		QueueScanRefreshInterval: 5 * time.Second,
   124  		QueueScanSelectionCount:  20,
   125  		QueueScanWorkerPoolMax:   4,
   126  		QueueScanDirtyPercent:    0.25,
   127  
   128  		MsgTimeout:    60 * time.Second,
   129  		MaxMsgTimeout: 15 * time.Minute,
   130  		MaxMsgSize:    1024 * 1024,
   131  		MaxBodySize:   5 * 1024 * 1024,
   132  		MaxReqTimeout: 1 * time.Hour,
   133  		ClientTimeout: 60 * time.Second,
   134  
   135  		MaxHeartbeatInterval:   60 * time.Second,
   136  		MaxRdyCount:            2500,
   137  		MaxOutputBufferSize:    64 * 1024,
   138  		MaxOutputBufferTimeout: 30 * time.Second,
   139  		MinOutputBufferTimeout: 25 * time.Millisecond,
   140  		OutputBufferTimeout:    250 * time.Millisecond,
   141  		MaxChannelConsumers:    0,
   142  
   143  		StatsdPrefix:        "nsq.%s",
   144  		StatsdInterval:      60 * time.Second,
   145  		StatsdMemStats:      true,
   146  		StatsdUDPPacketSize: 508,
   147  
   148  		E2EProcessingLatencyWindowTime: time.Duration(10 * time.Minute),
   149  
   150  		DeflateEnabled:  true,
   151  		MaxDeflateLevel: 6,
   152  		SnappyEnabled:   true,
   153  
   154  		TLSMinVersion: tls.VersionTLS10,
   155  	}
   156  }