mirror of
https://github.com/TecharoHQ/anubis.git
synced 2026-04-22 08:06:41 +00:00
fix(config): add metrics socket mode
Signed-off-by: Xe Iaso <me@xeiaso.net>
This commit is contained in:
@@ -415,8 +415,9 @@ func Load(fin io.Reader, fname string) (*Config, error) {
|
|||||||
},
|
},
|
||||||
Logging: (Logging{}).Default(),
|
Logging: (Logging{}).Default(),
|
||||||
Metrics: &Metrics{
|
Metrics: &Metrics{
|
||||||
Bind: flagLookup("metrics-bind"),
|
Bind: flagLookup("metrics-bind"),
|
||||||
Network: flagLookup("metrics-bind-network"),
|
Network: flagLookup("metrics-bind-network"),
|
||||||
|
SocketMode: flagLookup("socket-mode"),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+23
-8
@@ -1,17 +1,24 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import "errors"
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ErrInvalidMetricsConfig = errors.New("config: invalid metrics configuration")
|
ErrInvalidMetricsConfig = errors.New("config: invalid metrics configuration")
|
||||||
ErrNoMetricsBind = errors.New("config.Metrics: must define bind")
|
ErrNoMetricsBind = errors.New("config.Metrics: must define bind")
|
||||||
ErrNoMetricsNetwork = errors.New("config.Metrics: must define network")
|
ErrNoMetricsNetwork = errors.New("config.Metrics: must define network")
|
||||||
ErrInvalidMetricsNetwork = errors.New("config.Metrics: invalid metrics network")
|
ErrNoMetricsSocketMode = errors.New("config.Metrics: must define socket mode when using unix sockets")
|
||||||
|
ErrInvalidMetricsSocketMode = errors.New("config.Metrics: invalid unix socket mode")
|
||||||
|
ErrInvalidMetricsNetwork = errors.New("config.Metrics: invalid metrics network")
|
||||||
)
|
)
|
||||||
|
|
||||||
type Metrics struct {
|
type Metrics struct {
|
||||||
Bind string `json:"bind" yaml:"bind"`
|
Bind string `json:"bind" yaml:"bind"`
|
||||||
Network string `json:"network" yaml:"network"`
|
Network string `json:"network" yaml:"network"`
|
||||||
|
SocketMode string `json:"socketMode" yaml:"socketMode"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Metrics) Valid() error {
|
func (m *Metrics) Valid() error {
|
||||||
@@ -26,7 +33,15 @@ func (m *Metrics) Valid() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch m.Network {
|
switch m.Network {
|
||||||
case "tcp", "tcp4", "tcp6", "unix": // https://pkg.go.dev/net#Listen
|
case "tcp", "tcp4", "tcp6": // https://pkg.go.dev/net#Listen
|
||||||
|
case "unix":
|
||||||
|
if m.SocketMode == "" {
|
||||||
|
errs = append(errs, ErrNoMetricsSocketMode)
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := strconv.ParseUint(m.SocketMode, 8, 0); err != nil {
|
||||||
|
errs = append(errs, fmt.Errorf("%w: %w", ErrInvalidMetricsSocketMode, err))
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
errs = append(errs, ErrInvalidMetricsNetwork)
|
errs = append(errs, ErrInvalidMetricsNetwork)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,28 @@ func TestMetricsValid(t *testing.T) {
|
|||||||
Network: "tcp",
|
Network: "tcp",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "basic TCP4",
|
||||||
|
input: &Metrics{
|
||||||
|
Bind: ":9090",
|
||||||
|
Network: "tcp4",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "basic TCP6",
|
||||||
|
input: &Metrics{
|
||||||
|
Bind: ":9090",
|
||||||
|
Network: "tcp6",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "basic unix",
|
||||||
|
input: &Metrics{
|
||||||
|
Bind: "/tmp/anubis-metrics.sock",
|
||||||
|
Network: "unix",
|
||||||
|
SocketMode: "0770",
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "no bind",
|
name: "no bind",
|
||||||
input: &Metrics{},
|
input: &Metrics{},
|
||||||
@@ -28,6 +50,23 @@ func TestMetricsValid(t *testing.T) {
|
|||||||
input: &Metrics{},
|
input: &Metrics{},
|
||||||
err: ErrNoMetricsNetwork,
|
err: ErrNoMetricsNetwork,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "no unix socket mode",
|
||||||
|
input: &Metrics{
|
||||||
|
Bind: "/tmp/anubis-metrics.sock",
|
||||||
|
Network: "unix",
|
||||||
|
},
|
||||||
|
err: ErrNoMetricsSocketMode,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "invalid unix socket mode",
|
||||||
|
input: &Metrics{
|
||||||
|
Bind: "/tmp/anubis-metrics.sock",
|
||||||
|
Network: "unix",
|
||||||
|
SocketMode: "taco bell",
|
||||||
|
},
|
||||||
|
err: ErrInvalidMetricsSocketMode,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "invalid network",
|
name: "invalid network",
|
||||||
input: &Metrics{
|
input: &Metrics{
|
||||||
|
|||||||
Reference in New Issue
Block a user