summaryrefslogtreecommitdiff
path: root/plugins/server/config.go
blob: 92e6780afe15368fc51b636433d182ad3b3af6a8 (plain)
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package server

import (
	"time"
)

// All config (.rr.yaml)
// For other section use pointer to distinguish between `empty` and `not present`
type Config struct {
	// Server config section
	Server struct {
		// Command to run as application.
		Command string `mapstructure:"command"`
		// User to run application under.
		User string `mapstructure:"user"`
		// Group to run application under.
		Group string `mapstructure:"group"`
		// Env represents application environment.
		Env Env `mapstructure:"env"`
		// Relay defines connection method and factory to be used to connect to workers:
		// "pipes", "tcp://:6001", "unix://rr.sock"
		// This config section must not change on re-configuration.
		Relay string `mapstructure:"relay"`
		// RelayTimeout defines for how long socket factory will be waiting for worker connection. This config section
		// must not change on re-configuration. Defaults to 60s.
		RelayTimeout time.Duration `mapstructure:"relay_timeout"`
	} `mapstructure:"server"`

	RPC *struct {
		Listen string `mapstructure:"listen"`
	} `mapstructure:"rpc"`
	Logs *struct {
		Mode  string `mapstructure:"mode"`
		Level string `mapstructure:"level"`
	} `mapstructure:"logs"`
	HTTP *struct {
		Address        string   `mapstructure:"address"`
		MaxRequestSize int      `mapstructure:"max_request_size"`
		Middleware     []string `mapstructure:"middleware"`
		Uploads        struct {
			Forbid []string `mapstructure:"forbid"`
		} `mapstructure:"uploads"`
		TrustedSubnets []string `mapstructure:"trusted_subnets"`
		Pool           struct {
			NumWorkers      int    `mapstructure:"num_workers"`
			MaxJobs         int    `mapstructure:"max_jobs"`
			AllocateTimeout string `mapstructure:"allocate_timeout"`
			DestroyTimeout  string `mapstructure:"destroy_timeout"`
			Supervisor      struct {
				WatchTick       int `mapstructure:"watch_tick"`
				TTL             int `mapstructure:"ttl"`
				IdleTTL         int `mapstructure:"idle_ttl"`
				ExecTTL         int `mapstructure:"exec_ttl"`
				MaxWorkerMemory int `mapstructure:"max_worker_memory"`
			} `mapstructure:"supervisor"`
		} `mapstructure:"pool"`
		Ssl struct {
			Port     int    `mapstructure:"port"`
			Redirect bool   `mapstructure:"redirect"`
			Cert     string `mapstructure:"cert"`
			Key      string `mapstructure:"key"`
		} `mapstructure:"ssl"`
		Fcgi struct {
			Address string `mapstructure:"address"`
		} `mapstructure:"fcgi"`
		HTTP2 struct {
			Enabled              bool `mapstructure:"enabled"`
			H2C                  bool `mapstructure:"h2c"`
			MaxConcurrentStreams int  `mapstructure:"max_concurrent_streams"`
		} `mapstructure:"http2"`
	} `mapstructure:"http"`
	Redis *struct {
		Addrs            []string `mapstructure:"addrs"`
		MasterName       string   `mapstructure:"master_name"`
		Username         string   `mapstructure:"username"`
		Password         string   `mapstructure:"password"`
		DB               int      `mapstructure:"db"`
		SentinelPassword string   `mapstructure:"sentinel_password"`
		RouteByLatency   bool     `mapstructure:"route_by_latency"`
		RouteRandomly    bool     `mapstructure:"route_randomly"`
		DialTimeout      int      `mapstructure:"dial_timeout"`
		MaxRetries       int      `mapstructure:"max_retries"`
		MinRetryBackoff  int      `mapstructure:"min_retry_backoff"`
		MaxRetryBackoff  int      `mapstructure:"max_retry_backoff"`
		PoolSize         int      `mapstructure:"pool_size"`
		MinIdleConns     int      `mapstructure:"min_idle_conns"`
		MaxConnAge       int      `mapstructure:"max_conn_age"`
		ReadTimeout      int      `mapstructure:"read_timeout"`
		WriteTimeout     int      `mapstructure:"write_timeout"`
		PoolTimeout      int      `mapstructure:"pool_timeout"`
		IdleTimeout      int      `mapstructure:"idle_timeout"`
		IdleCheckFreq    int      `mapstructure:"idle_check_freq"`
		ReadOnly         bool     `mapstructure:"read_only"`
	} `mapstructure:"redis"`
	Boltdb *struct {
		Dir         string `mapstructure:"dir"`
		File        string `mapstructure:"file"`
		Bucket      string `mapstructure:"bucket"`
		Permissions int    `mapstructure:"permissions"`
		TTL         int    `mapstructure:"TTL"`
	} `mapstructure:"boltdb"`
	Memcached *struct {
		Addr []string `mapstructure:"addr"`
	} `mapstructure:"memcached"`
	Memory *struct {
		Enabled  bool `mapstructure:"enabled"`
		Interval int  `mapstructure:"interval"`
	} `mapstructure:"memory"`
	Metrics *struct {
		Address string `mapstructure:"address"`
		Collect struct {
			AppMetric struct {
				Type       string    `mapstructure:"type"`
				Help       string    `mapstructure:"help"`
				Labels     []string  `mapstructure:"labels"`
				Buckets    []float64 `mapstructure:"buckets"`
				Objectives []struct {
					Num2 float64 `mapstructure:"2,omitempty"`
					One4 float64 `mapstructure:"1.4,omitempty"`
				} `mapstructure:"objectives"`
			} `mapstructure:"app_metric"`
		} `mapstructure:"collect"`
	} `mapstructure:"metrics"`
	Reload *struct {
		Interval string   `mapstructure:"interval"`
		Patterns []string `mapstructure:"patterns"`
		Services struct {
			HTTP struct {
				Recursive bool     `mapstructure:"recursive"`
				Ignore    []string `mapstructure:"ignore"`
				Patterns  []string `mapstructure:"patterns"`
				Dirs      []string `mapstructure:"dirs"`
			} `mapstructure:"http"`
		} `mapstructure:"services"`
	} `mapstructure:"reload"`
}

// InitDefaults for the server config
func (cfg *Config) InitDefaults() {
	if cfg.Server.Relay == "" {
		cfg.Server.Relay = "pipes"
	}

	if cfg.Server.RelayTimeout == 0 {
		cfg.Server.RelayTimeout = time.Second * 60
	}
}