Compare commits
2 Commits
87344dd601
...
62a7605869
Author | SHA1 | Date | |
---|---|---|---|
62a7605869 | |||
0996167865 |
@ -30,7 +30,6 @@ func CAPool() (*x509.CertPool, error) {
|
|||||||
// GetCertman sets up certman for the specified cert / key pair. It is
|
// GetCertman sets up certman for the specified cert / key pair. It is
|
||||||
// used in the monitor-api and (for now) in the client
|
// used in the monitor-api and (for now) in the client
|
||||||
func GetCertman(certFile, keyFile string) (*certman.CertMan, error) {
|
func GetCertman(certFile, keyFile string) (*certman.CertMan, error) {
|
||||||
|
|
||||||
cm, err := certman.New(certFile, keyFile)
|
cm, err := certman.New(certFile, keyFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"go.ntppool.org/common/logger"
|
"go.ntppool.org/common/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
//go:generate accessory -type Config
|
//go:generate go tool github.com/masaushi/accessory -type Config
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
deploymentMode string `accessor:"getter"`
|
deploymentMode string `accessor:"getter"`
|
||||||
@ -50,6 +50,10 @@ func (c *Config) WebURL(path string, query *url.Values) string {
|
|||||||
return baseURL(c.webHostname, c.webTLS, path, query)
|
return baseURL(c.webHostname, c.webTLS, path, query)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *Config) ManageURL(path string, query *url.Values) string {
|
||||||
|
return baseURL(c.manageHostname, c.webTLS, path, query)
|
||||||
|
}
|
||||||
|
|
||||||
func baseURL(host string, tls bool, path string, query *url.Values) string {
|
func baseURL(host string, tls bool, path string, query *url.Values) string {
|
||||||
uri := url.URL{}
|
uri := url.URL{}
|
||||||
uri.Host = host
|
uri.Host = host
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestBaseURL(t *testing.T) {
|
func TestBaseURL(t *testing.T) {
|
||||||
|
|
||||||
os.Setenv("web_hostname", "www.ntp.dev, web.ntppool.dev")
|
os.Setenv("web_hostname", "www.ntp.dev, web.ntppool.dev")
|
||||||
os.Setenv("web_tls", "yes")
|
os.Setenv("web_tls", "yes")
|
||||||
|
|
||||||
@ -22,5 +21,4 @@ func TestBaseURL(t *testing.T) {
|
|||||||
if u != "https://www.ntp.dev/foo?foo=bar" {
|
if u != "https://www.ntp.dev/foo?foo=bar" {
|
||||||
t.Fatalf("unexpected WebURL: %s", u)
|
t.Fatalf("unexpected WebURL: %s", u)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -69,6 +69,10 @@ func (d DeploymentEnvironment) ManageURL(path string) string {
|
|||||||
return manageServers[d] + path
|
return manageServers[d] + path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (d DeploymentEnvironment) MonitorDomain() string {
|
||||||
|
return d.String() + ".mon.ntppool.dev"
|
||||||
|
}
|
||||||
|
|
||||||
func (d *DeploymentEnvironment) UnmarshalText(text []byte) error {
|
func (d *DeploymentEnvironment) UnmarshalText(text []byte) error {
|
||||||
s := string(text)
|
s := string(text)
|
||||||
if s == "" {
|
if s == "" {
|
||||||
|
12
ekko/ekko.go
12
ekko/ekko.go
@ -16,6 +16,7 @@ import (
|
|||||||
"go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho"
|
"go.opentelemetry.io/contrib/instrumentation/github.com/labstack/echo/otelecho"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
"golang.org/x/net/http2"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -50,7 +51,8 @@ func (ek *Ekko) Start(ctx context.Context) error {
|
|||||||
g.Go(func() error {
|
g.Go(func() error {
|
||||||
e.Server.Addr = fmt.Sprintf(":%d", ek.port)
|
e.Server.Addr = fmt.Sprintf(":%d", ek.port)
|
||||||
log.Info("server starting", "port", ek.port)
|
log.Info("server starting", "port", ek.port)
|
||||||
err := e.Server.ListenAndServe()
|
// err := e.Server.ListenAndServe()
|
||||||
|
err := e.StartH2CServer(e.Server.Addr, &http2.Server{})
|
||||||
if err == http.ErrServerClosed {
|
if err == http.ErrServerClosed {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -120,7 +122,13 @@ func (ek *Ekko) setup(ctx context.Context) (*echo.Echo, error) {
|
|||||||
e.Use(middleware.Gzip())
|
e.Use(middleware.Gzip())
|
||||||
}
|
}
|
||||||
|
|
||||||
e.Use(middleware.Secure())
|
secureConfig := middleware.DefaultSecureConfig
|
||||||
|
// secureConfig.ContentSecurityPolicy = "default-src *"
|
||||||
|
secureConfig.ContentSecurityPolicy = ""
|
||||||
|
secureConfig.HSTSMaxAge = int(time.Hour * 168 * 30 / time.Second)
|
||||||
|
secureConfig.HSTSPreloadEnabled = true
|
||||||
|
|
||||||
|
e.Use(middleware.SecureWithConfig(secureConfig))
|
||||||
|
|
||||||
e.Use(
|
e.Use(
|
||||||
func(next echo.HandlerFunc) echo.HandlerFunc {
|
func(next echo.HandlerFunc) echo.HandlerFunc {
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestHealthHandler(t *testing.T) {
|
func TestHealthHandler(t *testing.T) {
|
||||||
|
|
||||||
req := httptest.NewRequest(http.MethodGet, "/__health", nil)
|
req := httptest.NewRequest(http.MethodGet, "/__health", nil)
|
||||||
w := httptest.NewRecorder()
|
w := httptest.NewRecorder()
|
||||||
|
|
||||||
|
@ -42,11 +42,9 @@ type Kafka struct {
|
|||||||
l *log.Logger
|
l *log.Logger
|
||||||
|
|
||||||
// wr *kafka.Writer
|
// wr *kafka.Writer
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *Kafka) tlsConfig() (*tls.Config, error) {
|
func (k *Kafka) tlsConfig() (*tls.Config, error) {
|
||||||
|
|
||||||
cm, err := certman.New(k.tls.Cert, k.tls.Key)
|
cm, err := certman.New(k.tls.Cert, k.tls.Key)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -189,7 +187,6 @@ func (k *Kafka) brokerAddrs() []string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (k *Kafka) NewWriter(topic string) (*kafka.Writer, error) {
|
func (k *Kafka) NewWriter(topic string) (*kafka.Writer, error) {
|
||||||
|
|
||||||
// https://pkg.go.dev/github.com/segmentio/kafka-go#Writer
|
// https://pkg.go.dev/github.com/segmentio/kafka-go#Writer
|
||||||
w := &kafka.Writer{
|
w := &kafka.Writer{
|
||||||
Addr: kafka.TCP(k.brokerAddrs()...),
|
Addr: kafka.TCP(k.brokerAddrs()...),
|
||||||
|
@ -17,7 +17,6 @@ type logfmt struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newLogFmtHandler(next slog.Handler) slog.Handler {
|
func newLogFmtHandler(next slog.Handler) slog.Handler {
|
||||||
|
|
||||||
buf := bytes.NewBuffer([]byte{})
|
buf := bytes.NewBuffer([]byte{})
|
||||||
|
|
||||||
h := &logfmt{
|
h := &logfmt{
|
||||||
|
@ -9,7 +9,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestLogFmt(t *testing.T) {
|
func TestLogFmt(t *testing.T) {
|
||||||
|
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
jsonh := slog.NewJSONHandler(&buf, nil)
|
jsonh := slog.NewJSONHandler(&buf, nil)
|
||||||
h := newLogFmtHandler(jsonh)
|
h := newLogFmtHandler(jsonh)
|
||||||
@ -39,5 +38,4 @@ func TestLogFmt(t *testing.T) {
|
|||||||
t.Log("didn't find message in output")
|
t.Log("didn't find message in output")
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,17 +15,21 @@ import (
|
|||||||
|
|
||||||
var ConfigPrefix = ""
|
var ConfigPrefix = ""
|
||||||
|
|
||||||
var textLogger *slog.Logger
|
var (
|
||||||
var otlpLogger *slog.Logger
|
textLogger *slog.Logger
|
||||||
var multiLogger *slog.Logger
|
otlpLogger *slog.Logger
|
||||||
|
multiLogger *slog.Logger
|
||||||
|
)
|
||||||
|
|
||||||
var setupText sync.Once // this sets the default
|
var (
|
||||||
var setupOtlp sync.Once // this never sets the default
|
setupText sync.Once // this sets the default
|
||||||
var setupMulti sync.Once // this sets the default, and will always run after the others
|
setupOtlp sync.Once // this never sets the default
|
||||||
var mu sync.Mutex
|
setupMulti sync.Once // this sets the default, and will always run after the others
|
||||||
|
mu sync.Mutex
|
||||||
|
)
|
||||||
|
|
||||||
func setupStdErrHandler() slog.Handler {
|
func setupStdErrHandler() slog.Handler {
|
||||||
var programLevel = new(slog.LevelVar) // Info by default
|
programLevel := new(slog.LevelVar) // Info by default
|
||||||
|
|
||||||
envVar := "DEBUG"
|
envVar := "DEBUG"
|
||||||
if len(ConfigPrefix) > 0 {
|
if len(ConfigPrefix) > 0 {
|
||||||
|
@ -27,15 +27,15 @@ func NewStdLog(key string, debug bool, log *slog.Logger) *stdLoggerish {
|
|||||||
return sl
|
return sl
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l stdLoggerish) Println(msg ...interface{}) {
|
func (l stdLoggerish) Println(msg ...any) {
|
||||||
l.f(l.key, "msg", msg)
|
l.f(l.key, "msg", msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l stdLoggerish) Printf(msg string, args ...interface{}) {
|
func (l stdLoggerish) Printf(msg string, args ...any) {
|
||||||
l.f(l.key, "msg", fmt.Sprintf(msg, args...))
|
l.f(l.key, "msg", fmt.Sprintf(msg, args...))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (l stdLoggerish) Fatalf(msg string, args ...interface{}) {
|
func (l stdLoggerish) Fatalf(msg string, args ...any) {
|
||||||
l.log.Error(l.key, "msg", fmt.Sprintf(msg, args...))
|
l.log.Error(l.key, "msg", fmt.Sprintf(msg, args...))
|
||||||
panic("fatal error") // todo: does this make sense at all?
|
panic("fatal error") // todo: does this make sense at all?
|
||||||
}
|
}
|
||||||
|
@ -32,7 +32,6 @@ func (m *Metrics) Registry() *prometheus.Registry {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *Metrics) Handler() http.Handler {
|
func (m *Metrics) Handler() http.Handler {
|
||||||
|
|
||||||
log := logger.NewStdLog("prom http", false, nil)
|
log := logger.NewStdLog("prom http", false, nil)
|
||||||
|
|
||||||
return promhttp.HandlerFor(m.r, promhttp.HandlerOpts{
|
return promhttp.HandlerFor(m.r, promhttp.HandlerOpts{
|
||||||
@ -46,7 +45,6 @@ func (m *Metrics) Handler() http.Handler {
|
|||||||
// the specified port. The server will shutdown and return when
|
// the specified port. The server will shutdown and return when
|
||||||
// the provided context is done
|
// the provided context is done
|
||||||
func (m *Metrics) ListenAndServe(ctx context.Context, port int) error {
|
func (m *Metrics) ListenAndServe(ctx context.Context, port int) error {
|
||||||
|
|
||||||
log := logger.Setup()
|
log := logger.Setup()
|
||||||
|
|
||||||
srv := &http.Server{
|
srv := &http.Server{
|
||||||
|
@ -15,7 +15,7 @@ func (d Duration) MarshalJSON() ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *Duration) UnmarshalJSON(b []byte) error {
|
func (d *Duration) UnmarshalJSON(b []byte) error {
|
||||||
var v interface{}
|
var v any
|
||||||
if err := json.Unmarshal(b, &v); err != nil {
|
if err := json.Unmarshal(b, &v); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -18,5 +18,4 @@ func TestDuration(t *testing.T) {
|
|||||||
if foo.Foo.Seconds() != 30 {
|
if foo.Foo.Seconds() != 30 {
|
||||||
t.Fatalf("parsed time.Duration wasn't 30 seconds: %s", foo.Foo)
|
t.Fatalf("parsed time.Duration wasn't 30 seconds: %s", foo.Foo)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -237,7 +237,7 @@ func newOLTPExporter(ctx context.Context, cfg *TracerConfig) (sdktrace.SpanExpor
|
|||||||
}
|
}
|
||||||
|
|
||||||
client = otlptracegrpc.NewClient(opts...)
|
client = otlptracegrpc.NewClient(opts...)
|
||||||
case "http/protobuf":
|
case "http/protobuf", "http/json":
|
||||||
opts := []otlptracehttp.Option{
|
opts := []otlptracehttp.Option{
|
||||||
otlptracehttp.WithCompression(otlptracehttp.GzipCompression),
|
otlptracehttp.WithCompression(otlptracehttp.GzipCompression),
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,6 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestInit(t *testing.T) {
|
func TestInit(t *testing.T) {
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
@ -18,5 +17,4 @@ func TestInit(t *testing.T) {
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
defer shutdownFn(ctx)
|
defer shutdownFn(ctx)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ func (lsa *LogScoreAttributes) Value() (driver.Value, error) {
|
|||||||
return json.Marshal(lsa)
|
return json.Marshal(lsa)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (lsa *LogScoreAttributes) Scan(value interface{}) error {
|
func (lsa *LogScoreAttributes) Scan(value any) error {
|
||||||
var source []byte
|
var source []byte
|
||||||
_t := LogScoreAttributes{}
|
_t := LogScoreAttributes{}
|
||||||
|
|
||||||
|
@ -14,8 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var monotonicPool = sync.Pool{
|
var monotonicPool = sync.Pool{
|
||||||
New: func() interface{} {
|
New: func() any {
|
||||||
|
|
||||||
log := logger.Setup()
|
log := logger.Setup()
|
||||||
|
|
||||||
var seed int64
|
var seed int64
|
||||||
@ -39,7 +38,6 @@ var monotonicPool = sync.Pool{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func MakeULID(t time.Time) (*oklid.ULID, error) {
|
func MakeULID(t time.Time) (*oklid.ULID, error) {
|
||||||
|
|
||||||
mono := monotonicPool.Get().(io.Reader)
|
mono := monotonicPool.Get().(io.Reader)
|
||||||
|
|
||||||
id, err := oklid.New(oklid.Timestamp(t), mono)
|
id, err := oklid.New(oklid.Timestamp(t), mono)
|
||||||
|
@ -168,6 +168,9 @@ func CheckVersion(version, minimumVersion string) bool {
|
|||||||
if version == "dev-snapshot" {
|
if version == "dev-snapshot" {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
if idx := strings.Index(version, "/"); idx >= 0 {
|
||||||
|
version = version[0:idx]
|
||||||
|
}
|
||||||
if semver.Compare(version, minimumVersion) < 0 {
|
if semver.Compare(version, minimumVersion) < 0 {
|
||||||
// log.Debug("version too old", "v", cl.Version.Version)
|
// log.Debug("version too old", "v", cl.Version.Version)
|
||||||
return false
|
return false
|
||||||
|
@ -3,14 +3,12 @@ package fastlyxff
|
|||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
func TestFastlyIPRanges(t *testing.T) {
|
func TestFastlyIPRanges(t *testing.T) {
|
||||||
|
|
||||||
fastlyxff, err := New("fastly.json")
|
fastlyxff, err := New("fastly.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("could not load test data: %s", err)
|
t.Fatalf("could not load test data: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
data, err := fastlyxff.EchoTrustOption()
|
data, err := fastlyxff.EchoTrustOption()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("could not parse test data: %s", err)
|
t.Fatalf("could not parse test data: %s", err)
|
||||||
}
|
}
|
||||||
@ -19,5 +17,4 @@ func TestFastlyIPRanges(t *testing.T) {
|
|||||||
t.Logf("only got %d prefixes, expected more", len(data))
|
t.Logf("only got %d prefixes, expected more", len(data))
|
||||||
t.Fail()
|
t.Fail()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user