Files
ip-info/internal/services/db_updater/merger.go
2024-07-13 23:58:47 +07:00

55 lines
1.1 KiB
Go

package db_updater
import (
"github.com/rs/zerolog/log"
"github.com/safing/mmdbmeld"
"sync"
"thuanle.me/ip-info/configs"
)
func mergeMmdb() error {
c, err := mmdbmeld.LoadConfig(configs.MmdbmeldConfig)
if err != nil {
log.Err(err).Msg("Failed to load mmdbmeld config")
return err
}
for _, db := range c.Databases {
log.Info().Str("name", db.Name).Msg("Building mmdb file")
// Apply defaults.
dbP := &db //nolint:gosec,scopelint // Only used within loop.
c.Defaults.ApplyTo(dbP)
// Load sources for database.
sources, err := mmdbmeld.LoadSources(db)
if err != nil {
log.Err(err).Msg("Failed to load sources")
return err
}
// Create wait group.
var wg sync.WaitGroup
wg.Add(1)
// Start log writer.
updates := make(chan string, 100)
go func() {
defer wg.Done()
for msg := range updates {
log.Debug().Str("msg", msg).Msg("MMDB update")
}
}()
// Read all sources and write to mmdb.
err = mmdbmeld.WriteMMDB(db, sources, updates)
if err != nil {
log.Err(err).Msg("Failed to write mmdb")
return err
}
wg.Wait()
log.Info().Str("file", db.Output).Msg("MMDB created")
}
return nil
}