55 lines
1.1 KiB
Go
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
|
|
}
|