Integrate GeoIP service initialization and lifecycle management into the daemon startup process.

This commit is contained in:
2026-04-11 18:02:54 +05:00
parent a084fef3d2
commit ab4496f6b8
3 changed files with 31 additions and 2 deletions
+20 -1
View File
@@ -9,6 +9,7 @@ import (
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/db"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/db/repository"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/docker_monitor"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/geoip"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/notifications"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/i18n"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/log"
@@ -78,7 +79,12 @@ func runDaemon(ctx context.Context, _ *cli.Command) error {
blocklistService := newBlocklistService(ctx, repositories.Blocklist(), logger)
d, err := daemon.NewDaemon(config, logger, notificationsService, dockerService, blocklistService)
geoIPService := newGeoIPService(config.DataDir, logger)
defer func() {
_ = geoIPService.Close()
}()
d, err := daemon.NewDaemon(config, logger, notificationsService, dockerService, blocklistService, geoIPService)
if err != nil {
logger.Fatal(err.Error())
@@ -150,3 +156,16 @@ func newBlocklistService(ctx context.Context, blocklistRepository repository.Blo
return blocklistService
}
func newGeoIPService(dataDir string, logger log.Logger) geoip.GeoIP {
config, geoIPSupport, err := setting.Config.OtherSettingsPath.ToConfig(dataDir, logger)
if err != nil {
logger.Error(fmt.Sprintf("Failed to create geoIP service: %s", err))
return geoip.NewFalseGeoIP()
}
if !geoIPSupport || config.GeoIP == nil {
return geoip.NewFalseGeoIP()
}
return geoip.New(config, logger)
}
+7
View File
@@ -15,6 +15,7 @@ import (
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/firewall"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/firewall/blocking"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/firewall/types"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/geoip"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/notifications"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/pidfile"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/socket"
@@ -37,6 +38,7 @@ type daemon struct {
analyzer analyzer.Analyzer
docker docker_monitor.Docker
blocklist blocklist.Blocklist
geoIPService geoip.GeoIP
stopCh chan struct{}
}
@@ -90,6 +92,11 @@ func (d *daemon) Run(ctx context.Context, isTesting bool, testingInterval uint16
_ = d.blocklist.Close()
}()
d.geoIPService.Run(ctx)
defer func() {
_ = d.geoIPService.Close()
}()
go d.socket.Run(ctx, d.socketCommand)
d.runWorker(ctx, isTesting, testingInterval)
+4 -1
View File
@@ -9,6 +9,7 @@ import (
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/docker_monitor"
firewall2 "git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/firewall"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/firewall/blocking"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/geoip"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/notifications"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/pidfile"
"git.kor-elf.net/kor-elf-shield/kor-elf-shield/internal/daemon/socket"
@@ -21,6 +22,7 @@ func NewDaemon(
notifications notifications.Notifications,
docker docker_monitor.Docker,
blocklist blocklist.Blocklist,
geoIPService geoip.GeoIP,
) (Daemon, error) {
if logger == nil {
return nil, errors.New("logger is nil")
@@ -47,7 +49,7 @@ func NewDaemon(
)
blockService := brute_force_protection_group.NewBlockService(firewall.BlockIP, firewall.BlockIPWithPorts)
analyzerService := analyzer.New(opts.ConfigAnalyzer, blockService, opts.Repositories, logger, notifications)
analyzerService := analyzer.New(opts.ConfigAnalyzer, blockService, opts.Repositories, logger, notifications, geoIPService.Info)
return &daemon{
pidFile: pidFile,
@@ -58,5 +60,6 @@ func NewDaemon(
analyzer: analyzerService,
docker: docker,
blocklist: blocklist,
geoIPService: geoIPService,
}, nil
}