|
@@ -18,6 +18,7 @@ import (
|
|
|
const (
|
|
const (
|
|
|
settingKeyCurrentIP = "current_ip"
|
|
settingKeyCurrentIP = "current_ip"
|
|
|
settingKeyCurrentIPUpdatedAt = "current_ip_updated_at"
|
|
settingKeyCurrentIPUpdatedAt = "current_ip_updated_at"
|
|
|
|
|
+ settingKeyCurrentIPSource = "current_ip_source"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
type DDNSUpdater struct {
|
|
type DDNSUpdater struct {
|
|
@@ -99,11 +100,12 @@ func (u *DDNSUpdater) run() {
|
|
|
if len(urls) > 0 {
|
|
if len(urls) > 0 {
|
|
|
urlsOrNil = urls
|
|
urlsOrNil = urls
|
|
|
}
|
|
}
|
|
|
- ip, err := ipfetcher.FetchPublicIPFrom(ctx, urlsOrNil)
|
|
|
|
|
|
|
+ res, err := ipfetcher.FetchPublicIPFrom(ctx, urlsOrNil)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
slog.Error("failed to fetch public IP", "error", err)
|
|
slog.Error("failed to fetch public IP", "error", err)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
+ ip := res.IP
|
|
|
|
|
|
|
|
u.mu.Lock()
|
|
u.mu.Lock()
|
|
|
lastIP := u.lastIP
|
|
lastIP := u.lastIP
|
|
@@ -123,10 +125,13 @@ func (u *DDNSUpdater) run() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if len(records) == 0 {
|
|
if len(records) == 0 {
|
|
|
|
|
+ now := time.Now().UTC().Format(time.RFC3339)
|
|
|
if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIP, Value: ip}); err != nil {
|
|
if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIP, Value: ip}); err != nil {
|
|
|
slog.Error("failed to persist current_ip", "error", err)
|
|
slog.Error("failed to persist current_ip", "error", err)
|
|
|
- } else if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIPUpdatedAt, Value: time.Now().UTC().Format(time.RFC3339)}); err != nil {
|
|
|
|
|
|
|
+ } else if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIPUpdatedAt, Value: now}); err != nil {
|
|
|
slog.Error("failed to persist current_ip_updated_at", "error", err)
|
|
slog.Error("failed to persist current_ip_updated_at", "error", err)
|
|
|
|
|
+ } else if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIPSource, Value: res.Source}); err != nil {
|
|
|
|
|
+ slog.Error("failed to persist current_ip_source", "error", err)
|
|
|
}
|
|
}
|
|
|
u.mu.Lock()
|
|
u.mu.Lock()
|
|
|
u.lastIP = ip
|
|
u.lastIP = ip
|
|
@@ -170,10 +175,13 @@ func (u *DDNSUpdater) run() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if allOK {
|
|
if allOK {
|
|
|
|
|
+ now := time.Now().UTC().Format(time.RFC3339)
|
|
|
if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIP, Value: ip}); err != nil {
|
|
if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIP, Value: ip}); err != nil {
|
|
|
slog.Error("failed to persist current_ip", "error", err)
|
|
slog.Error("failed to persist current_ip", "error", err)
|
|
|
- } else if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIPUpdatedAt, Value: time.Now().UTC().Format(time.RFC3339)}); err != nil {
|
|
|
|
|
|
|
+ } else if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIPUpdatedAt, Value: now}); err != nil {
|
|
|
slog.Error("failed to persist current_ip_updated_at", "error", err)
|
|
slog.Error("failed to persist current_ip_updated_at", "error", err)
|
|
|
|
|
+ } else if err := u.q.UpsertSetting(ctx, queries.UpsertSettingParams{Key: settingKeyCurrentIPSource, Value: res.Source}); err != nil {
|
|
|
|
|
+ slog.Error("failed to persist current_ip_source", "error", err)
|
|
|
}
|
|
}
|
|
|
u.mu.Lock()
|
|
u.mu.Lock()
|
|
|
u.lastIP = ip
|
|
u.lastIP = ip
|