|
@@ -16,6 +16,7 @@ import (
|
|
|
|
|
|
var batchSize = servercfg.GetPeerUpdateBatchSize()
|
|
|
var batchUpdate = servercfg.GetBatchPeerUpdate()
|
|
|
+var manageDNSCache = map[string]int{}
|
|
|
|
|
|
// PublishPeerUpdate --- determines and publishes a peer update to all the hosts
|
|
|
func PublishPeerUpdate(replacePeers bool) error {
|
|
@@ -249,3 +250,38 @@ func sendPeers() {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func sendDNSSync() error {
|
|
|
+
|
|
|
+ networks, err := logic.GetNetworks()
|
|
|
+ if err == nil && len(networks) > 0 {
|
|
|
+ for _, v := range networks {
|
|
|
+ k, err := logic.GetDNS(v.NetID)
|
|
|
+ if err == nil {
|
|
|
+ if manageDNSCache[v.NetID] != len(k) {
|
|
|
+ data, err := json.Marshal(k)
|
|
|
+ if err != nil {
|
|
|
+ slog.Warn("error marshalling dns entry data for network ", v.NetID, err.Error())
|
|
|
+ }
|
|
|
+
|
|
|
+ if mqclient == nil || !mqclient.IsConnectionOpen() {
|
|
|
+ return errors.New("cannot publish ... mqclient not connected")
|
|
|
+ }
|
|
|
+
|
|
|
+ if token := mqclient.Publish(fmt.Sprintf("host/dns/sync/%s", v.NetID), 0, true, data); !token.WaitTimeout(MQ_TIMEOUT*time.Second) || token.Error() != nil {
|
|
|
+ if token.Error() == nil {
|
|
|
+ slog.Warn("could not publish server status", "error", "connection timeout")
|
|
|
+ } else {
|
|
|
+ slog.Warn("could not publish server status", "error", token.Error().Error())
|
|
|
+ }
|
|
|
+ }
|
|
|
+ manageDNSCache[v.NetID] = len(k)
|
|
|
+ }
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ slog.Warn("error getting DNS entries for network ", v.NetID, err.Error())
|
|
|
+ }
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return err
|
|
|
+}
|