set retained true on server publish and client ping server on checkin

This commit is contained in:
Matthew R. Kasun
2022-02-04 18:00:17 -05:00
parent 4815c4da13
commit 6f0950792f
4 changed files with 73 additions and 34 deletions

View File

@@ -3,6 +3,7 @@ package functions
import (
"context"
"encoding/json"
"errors"
"fmt"
"os"
"os/signal"
@@ -13,6 +14,7 @@ import (
"time"
mqtt "github.com/eclipse/paho.mqtt.golang"
"github.com/go-ping/ping"
"github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/netclient/auth"
"github.com/gravitl/netmaker/netclient/config"
@@ -83,13 +85,9 @@ func Daemon() error {
// SetupMQTT creates a connection to broker and return client
func SetupMQTT(cfg *config.ClientConfig) mqtt.Client {
opts := mqtt.NewClientOptions()
for _, server := range cfg.Node.NetworkSettings.DefaultServerAddrs {
if server.Address != "" && server.IsLeader {
// ncutils.Log(fmt.Sprintf("adding server (%s) to listen on network %s", server.Address, cfg.Node.Network))
opts.AddBroker(server.Address + ":1883")
break
}
}
server := getServerAddress(cfg)
opts.AddBroker(server + ":1883")
opts.SetDefaultPublishHandler(All)
client := mqtt.NewClient(opts)
tperiod := time.Now().Add(12 * time.Second)
@@ -123,32 +121,32 @@ func MessageQueue(ctx context.Context, network string) {
ncutils.Log("netclient go routine started for " + network)
var cfg config.ClientConfig
cfg.Network = network
var configPath = fmt.Sprintf("%snetconfig-%s", ncutils.GetNetclientPathSpecific(), network)
fileInfo, err := os.Stat(configPath)
if err != nil {
ncutils.Log("could not stat config file: " + configPath)
}
//var configPath = fmt.Sprintf("%snetconfig-%s", ncutils.GetNetclientPathSpecific(), network)
//fileInfo, err := os.Stat(configPath)
//if err != nil {
// ncutils.Log("could not stat config file: " + configPath)
//}
// speed up UDP rest
if time.Now().After(fileInfo.ModTime().Add(time.Minute)) {
sleepTime := 2
ncutils.Log("pulling latest config for " + cfg.Network)
for {
_, err := Pull(network, true)
if err == nil {
break
} else {
ncutils.PrintLog("error pulling config for "+network+": "+err.Error(), 1)
}
if sleepTime > 3600 {
sleepTime = 3600
}
ncutils.Log("failed to pull for network " + network)
ncutils.Log(fmt.Sprintf("waiting %d seconds to retry...", sleepTime))
time.Sleep(time.Second * time.Duration(sleepTime))
sleepTime = sleepTime * 2
}
}
time.Sleep(time.Second << 1)
// if time.Now().After(fileInfo.ModTime().Add(time.Minute)) {
// sleepTime := 2
// ncutils.Log("pulling latest config for " + cfg.Network)
// for {
// _, err := Pull(network, true)
// if err == nil {
// break
// } else {
// ncutils.PrintLog("error pulling config for "+network+": "+err.Error(), 1)
// }
// if sleepTime > 3600 {
// sleepTime = 3600
// }
// ncutils.Log("failed to pull for network " + network)
// ncutils.Log(fmt.Sprintf("waiting %d seconds to retry...", sleepTime))
// time.Sleep(time.Second * time.Duration(sleepTime))
// sleepTime = sleepTime * 2
// }
// }
//time.Sleep(time.Second << 1)
cfg.ReadConfig()
ncutils.Log("daemon started for network: " + network)
client := SetupMQTT(&cfg)
@@ -503,6 +501,9 @@ func Checkin(ctx context.Context, cfg *config.ClientConfig, network string) {
PublishNodeUpdate(cfg)
}
}
if err := pingServer(cfg); err != nil {
ncutils.PrintLog("could not ping server"+err.Error(), 0)
}
Hello(cfg, network)
// ncutils.Log("Checkin complete")
}
@@ -592,3 +593,30 @@ func setDNS(iface, network, address string) {
ncutils.Log("error applying dns" + err.Error())
}
}
func pingServer(cfg *config.ClientConfig) error {
node := getServerAddress(cfg)
pinger, err := ping.NewPinger(node)
if err != nil {
ncutils.Log("error creating pinger " + err.Error())
return err
}
pinger.Timeout = 2 * time.Second
pinger.Run()
stats := pinger.Statistics()
if stats.PacketLoss != 100 {
ncutils.PrintLog(fmt.Sprintf("lost packets when pinging server: packets sent:%d packets recieved: %d", stats.PacketsSent, stats.PacketsRecv), 1)
return errors.New("ping error")
}
return nil
}
func getServerAddress(cfg *config.ClientConfig) string {
var server models.ServerAddr
for _, server = range cfg.Node.NetworkSettings.DefaultServerAddrs {
if server.Address != "" && server.IsLeader {
break
}
}
return server.Address
}