forked from signal18/replication-manager
/
factories.go
97 lines (84 loc) · 2.47 KB
/
factories.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
// replication-manager - Replication Manager Monitoring and CLI for MariaDB and MySQL
// Copyright 2017 Signal 18 SARL
// Authors: Guillaume Lefranc <guillaume@signal18.io>
// Stephane Varoqui <svaroqui@gmail.com>
// This source code is licensed under the GNU General Public License, version 3.
package haproxy
import (
"github.com/signal18/replication-manager/misc"
"path"
)
const (
MAX_SOCKET_LENGTH = 103
)
// creates a Frontend object
func (c *Config) frontendFactory(name string, mode string, port int, filter []*Filter, backend *Backend) *Frontend {
return &Frontend{
Name: name,
Mode: mode,
BindPort: port,
BindIp: "0.0.0.0",
Options: ProxyOptions{},
DefaultBackend: backend.Name,
Filters: filter,
HttpQuota: Quota{},
TcpQuota: Quota{},
}
}
// creates a Backend object
func (c *Config) backendFactory(name string, mode string, proxy bool, servers []*ServerDetail) *Backend {
return &Backend{
Name: name,
Mode: mode,
Servers: servers,
Options: ProxyOptions{},
ProxyMode: proxy,
}
}
// creates a ServerDetail object
func (c *Config) serverFactory(name string, weight int, host string, port int) *ServerDetail {
return &ServerDetail{
Name: name,
Host: host,
Port: port,
UnixSock: "",
Weight: weight,
MaxConn: 1000,
Check: false,
CheckInterval: 10,
}
}
// creates a Frontend object that listen on a Unix socket
func (c *Config) socketFrontendFactory(name string, mode string, socket string, backend *Backend) *Frontend {
return &Frontend{
Name: name,
Mode: mode,
UnixSock: socket,
SockProtocol: "accept-proxy",
Options: ProxyOptions{},
DefaultBackend: backend.Name,
Filters: []*Filter{},
HttpQuota: Quota{},
TcpQuota: Quota{},
}
}
// creates a ServerDetail object that sends traffic to a Unix socket
func (c *Config) socketServerFactory(name string, weight int) *ServerDetail {
return &ServerDetail{
Name: name,
Host: "",
Port: 0,
UnixSock: compileSocketName(c.WorkingDir, name),
Weight: weight,
MaxConn: 1000,
Check: false,
CheckInterval: 10,
}
}
func compileSocketName(dir string, base string) string {
postfix := ".sock"
if len(base) == 0 {
return (path.Join(dir, (misc.GetMD5Hash(misc.GetUUID()) + postfix)))
}
return (path.Join(dir, (misc.GetMD5Hash(base) + postfix)))
}