Skip to content

Commit

Permalink
fix(internal/persistence/json): get events by IP version
Browse files Browse the repository at this point in the history
  • Loading branch information
qdm12 committed Jan 15, 2024
1 parent 1c982f7 commit 942ae51
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 5 deletions.
2 changes: 1 addition & 1 deletion cmd/updater/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ func _main(ctx context.Context, settingsSource SettingsSource, args []string, lo
for i, s := range providers {
logger.Info("Reading history from database: domain " +
s.Domain() + " host " + s.Host())
events, err := persistentDB.GetEvents(s.Domain(), s.Host())
events, err := persistentDB.GetEvents(s.Domain(), s.Host(), s.IPVersion())
if err != nil {
shoutrrrClient.Notify(err.Error())
return err
Expand Down
32 changes: 28 additions & 4 deletions internal/persistence/json/queries.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package json

import (
"fmt"
"net/netip"
"time"

"github.com/qdm12/ddns-updater/internal/models"
"github.com/qdm12/ddns-updater/pkg/publicip/ipversion"
)

// StoreNewIP stores a new IP address for a certain domain and host.
Expand All @@ -31,15 +33,37 @@ func (db *Database) StoreNewIP(domain, host string, ip netip.Addr, t time.Time)
return db.write()
}

// GetEvents gets all the IP addresses history for a certain domain and host, in the order
// from oldest to newest.
func (db *Database) GetEvents(domain, host string) (events []models.HistoryEvent, err error) {
// GetEvents gets all the IP addresses history for a certain domain, host and
// IP version, in the order from oldest to newest.
func (db *Database) GetEvents(domain, host string,
ipVersion ipversion.IPVersion) (events []models.HistoryEvent, err error) {
db.RLock()
defer db.RUnlock()
for _, record := range db.data.Records {
if record.Domain == domain && record.Host == host {
return append(events, record.Events...), nil
return filterEvents(events, ipVersion), nil
}
}
return nil, nil
}

func filterEvents(events []models.HistoryEvent, ipVersion ipversion.IPVersion) (filteredEvents []models.HistoryEvent) {
filteredEvents = make([]models.HistoryEvent, 0, len(events))
for _, event := range events {
switch ipVersion {
case ipversion.IP4:
if event.IP.Is4() {
filteredEvents = append(filteredEvents, event)
}
case ipversion.IP6:
if event.IP.Is6() {
filteredEvents = append(filteredEvents, event)
}
case ipversion.IP4or6:
filteredEvents = append(filteredEvents, event)
default:
panic(fmt.Sprintf("IP version %v is not supported", ipVersion))
}
}
return filteredEvents
}

0 comments on commit 942ae51

Please sign in to comment.