feat: add bounded process metrics and private monitoring endpoint

This commit is contained in:
2026-09-18 13:17:33 +08:00
parent 1f1d833f69
commit a7be32f661
24 changed files with 1467 additions and 19 deletions

View File

@@ -9,15 +9,16 @@ import (
)
type Config struct {
HTTPAddr string
MySQLDSN string
MaxOpen int
MaxIdle int
HTTPAddr string
MySQLDSN string
MaxOpen int
MaxIdle int
MetricsAddr string
}
func Load() (Config, error) { return FromEnv(os.Getenv) }
func FromEnv(get func(string) string) (Config, error) {
c := Config{HTTPAddr: get("ORBIT_HTTP_ADDR"), MySQLDSN: get("ORBIT_MYSQL_DSN"), MaxOpen: 20, MaxIdle: 5}
c := Config{HTTPAddr: get("ORBIT_HTTP_ADDR"), MySQLDSN: get("ORBIT_MYSQL_DSN"), MaxOpen: 20, MaxIdle: 5, MetricsAddr: get("ORBIT_METRICS_ADDR")}
if c.HTTPAddr == "" {
c.HTTPAddr = "127.0.0.1:8080"
}
@@ -42,5 +43,12 @@ func FromEnv(get func(string) string) (Config, error) {
if c.MaxOpen <= 0 || c.MaxIdle > c.MaxOpen {
return Config{}, errors.New("database pool requires 0 <= max_idle <= max_open and max_open > 0")
}
if c.MetricsAddr != "" {
_, port, err := net.SplitHostPort(c.MetricsAddr)
n, parseErr := strconv.Atoi(port)
if err != nil || parseErr != nil || n < 0 || n > 65535 {
return Config{}, errors.New("invalid ORBIT_METRICS_ADDR")
}
}
return c, nil
}

View File

@@ -0,0 +1,25 @@
package config
import "testing"
func TestMetricsAddressIsExplicitAndValidated(t *testing.T) {
base := map[string]string{"ORBIT_MYSQL_DSN": "private-dsn"}
get := func(k string) string { return base[k] }
c, err := FromEnv(get)
if err != nil || c.MetricsAddr != "" {
t.Fatal("metrics must be disabled by default", err)
}
for _, addr := range []string{"127.0.0.1:0", "[::1]:9090", "0.0.0.0:9090"} {
base["ORBIT_METRICS_ADDR"] = addr
c, err = FromEnv(get)
if err != nil || c.MetricsAddr != addr {
t.Fatal("valid explicit address rejected", addr, err)
}
}
for _, addr := range []string{"bad", ":secret", "127.0.0.1:-1", ":65536", "http://127.0.0.1:9000"} {
base["ORBIT_METRICS_ADDR"] = addr
if _, err = FromEnv(get); err == nil {
t.Fatal("invalid address accepted", addr)
}
}
}