From 373044f289e88e5fe5aefebf9f72f5d6a6ef8bdf Mon Sep 17 00:00:00 2001 From: crapStone Date: Mon, 8 Sep 2025 16:36:11 +0200 Subject: [PATCH] feat: make logging interval configurable --- cli/flags.go | 8 +++++++- config/config.go | 1 + config/setup.go | 3 +++ config/setup_test.go | 8 ++++++++ server/startup.go | 7 ++++++- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/cli/flags.go b/cli/flags.go index 0260d24..c6e5d00 100644 --- a/cli/flags.go +++ b/cli/flags.go @@ -117,10 +117,16 @@ var ( }, &cli.UintFlag{ Name: "log-most-active-ips", - Usage: "logs a the n most active IPs every hour", + Usage: "logs a the n most active IPs every hour (or value of --ip-logging-interval)", EnvVars: []string{"LOG_MOST_ACTIVE_IPS"}, Value: 10, }, + &cli.UintFlag{ + Name: "ip-logging-interval", + Usage: "interval in seconds for ip address logging", + EnvVars: []string{"IP_LOGGING_INTERVAL"}, + Value: 0, + }, // Default branches to fetch assets from &cli.StringSliceFlag{ diff --git a/config/config.go b/config/config.go index 0901bb7..52dfe5c 100644 --- a/config/config.go +++ b/config/config.go @@ -16,6 +16,7 @@ type ServerConfig struct { UseProxyProtocol bool `default:"false"` LogMostActiveIps bool `default:"false"` MostActiveIpCount uint `default:"10"` + LoggingInterval uint `default:"0"` MainDomain string RawDomain string PagesBranches []string diff --git a/config/setup.go b/config/setup.go index a0307a1..484edec 100644 --- a/config/setup.go +++ b/config/setup.go @@ -76,6 +76,9 @@ func mergeServerConfig(ctx *cli.Context, config *ServerConfig) { config.LogMostActiveIps = true config.MostActiveIpCount = ctx.Uint("log-most-active-ips") } + if ctx.IsSet("ip-logging-interval") { + config.LoggingInterval = ctx.Uint("ip-logging-interval") + } if ctx.IsSet("pages-domain") { config.MainDomain = ctx.String("pages-domain") diff --git a/config/setup_test.go b/config/setup_test.go index 9e6b886..683aa37 100644 --- a/config/setup_test.go +++ b/config/setup_test.go @@ -143,6 +143,7 @@ func TestMergeConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T UseProxyProtocol: false, LogMostActiveIps: false, MostActiveIpCount: 10, + LoggingInterval: 0, MainDomain: "original", RawDomain: "original", PagesBranches: []string{"original"}, @@ -185,6 +186,7 @@ func TestMergeConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T HttpServerEnabled: true, UseProxyProtocol: true, LogMostActiveIps: true, + LoggingInterval: 300, MostActiveIpCount: 42, MainDomain: "changed", RawDomain: "changed", @@ -235,6 +237,7 @@ func TestMergeConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *testing.T "--enable-http-server", "--use-proxy-protocol", "--log-most-active-ips", "42", + "--ip-logging-interval", "300", // Forge "--forge-root", "changed", "--forge-api-token", "changed", @@ -288,6 +291,7 @@ func TestMergeServerConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *tes UseProxyProtocol: false, LogMostActiveIps: false, MostActiveIpCount: 10, + LoggingInterval: 0, MainDomain: "original", RawDomain: "original", AllowedCorsDomains: []string{"original"}, @@ -304,6 +308,7 @@ func TestMergeServerConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *tes UseProxyProtocol: true, LogMostActiveIps: true, MostActiveIpCount: 21, + LoggingInterval: 300, MainDomain: "changed", RawDomain: "changed", AllowedCorsDomains: fixArrayFromCtx(ctx, "allowed-cors-domains", []string{"changed"}), @@ -325,6 +330,7 @@ func TestMergeServerConfigShouldReplaceAllExistingValuesGivenAllArgsExist(t *tes "--enable-http-server", "--use-proxy-protocol", "--log-most-active-ips", "21", + "--ip-logging-interval", "300", }, ) } @@ -350,6 +356,7 @@ func TestMergeServerConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgE sc.LogMostActiveIps = true sc.MostActiveIpCount = 42 }}, + {args: []string{"--ip-logging-interval", "300"}, callback: func(sc *ServerConfig) { sc.LoggingInterval = 300 }}, } for _, pair := range testValuePairs { @@ -369,6 +376,7 @@ func TestMergeServerConfigShouldReplaceOnlyOneValueExistingValueGivenOnlyOneArgE UseProxyProtocol: false, LogMostActiveIps: false, MostActiveIpCount: 10, + LoggingInterval: 0, } expectedConfig := cfg diff --git a/server/startup.go b/server/startup.go index cdd87c2..cf0ba4d 100644 --- a/server/startup.go +++ b/server/startup.go @@ -140,7 +140,12 @@ func Serve(ctx *cli.Context) error { mostActiveIpMap := &sync.Map{} if cfg.Server.LogMostActiveIps { go func() { - ticker := time.NewTicker(1 * time.Hour) + interval := 1 * time.Hour + if cfg.Server.LoggingInterval > 0 { + interval = time.Duration(cfg.Server.LoggingInterval) * time.Second + } + + ticker := time.NewTicker(interval) for range ticker.C { type kv struct { Key string