Skip to content

Commit

Permalink
graceful exit with mdns caching
Browse files Browse the repository at this point in the history
  • Loading branch information
nallux-dozryl committed Aug 7, 2024
1 parent c316194 commit 4688b14
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 13 deletions.
15 changes: 15 additions & 0 deletions goseg/handler/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ func SystemHandler(msg []byte) error {
zap.L().Info(fmt.Sprintf("Device shutdown requested"))
switch systemPayload.Payload.Command {
case "restart":
if err = config.UpdateConf(map[string]interface{}{
"gracefulExit": true,
}); err != nil {
zap.L().Error(fmt.Sprintf("Couldn't set graceful exit to true: %v", err))
}
if config.DebugMode {
zap.L().Debug(fmt.Sprintf("DebugMode detected, skipping GroundSeg restart. Exiting program."))
os.Exit(0)
Expand All @@ -68,6 +73,11 @@ func SystemHandler(msg []byte) error {
switch systemPayload.Payload.Command {
case "shutdown":
zap.L().Info(fmt.Sprintf("Device shutdown requested"))
if err = config.UpdateConf(map[string]interface{}{
"gracefulExit": true,
}); err != nil {
zap.L().Error(fmt.Sprintf("Couldn't set graceful exit to true: %v", err))
}
if config.DebugMode {
zap.L().Debug(fmt.Sprintf("DebugMode detected, skipping shutdown. Exiting program."))
os.Exit(0)
Expand All @@ -78,6 +88,11 @@ func SystemHandler(msg []byte) error {
}
case "restart":
zap.L().Info(fmt.Sprintf("Device restart requested"))
if err = config.UpdateConf(map[string]interface{}{
"gracefulExit": true,
}); err != nil {
zap.L().Error(fmt.Sprintf("Couldn't set graceful exit to true: %v", err))
}
if config.DebugMode {
zap.L().Debug(fmt.Sprintf("DebugMode detected, skipping restart. Exiting program."))
os.Exit(0)
Expand Down
39 changes: 26 additions & 13 deletions goseg/routines/system.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,21 +45,26 @@ func AptUpdateLoop() {
}

func mDNSServer() {
domains, err := mDNSDiscovery()
if err != nil {
zap.L().Warn("Couldn't discover mDNS servers on LAN -- defaulting to nativeplanet.local")
conf := config.Conf()
if !conf.GracefulExit && (len(conf.LastKnownMDNS) > 0) {
system.LocalUrl = conf.LastKnownMDNS
} else {
// check if there's already a nativeplanet.local
counter := 2
domainBase := strings.Split(LocalDomain, ".")[0]
for contains(domains, domainBase) {
LocalDomain = fmt.Sprintf("nativeplanet%d.local", counter)
zap.L().Info(fmt.Sprintf("Incrementing to %v...", LocalDomain))
counter++
domainBase = strings.Split(LocalDomain, ".")[0]
domains, err := mDNSDiscovery()
if err != nil {
zap.L().Warn("Couldn't discover mDNS servers on LAN -- defaulting to nativeplanet.local")
} else {
// check if there's already a nativeplanet.local
counter := 2
domainBase := strings.Split(LocalDomain, ".")[0]
for contains(domains, domainBase) {
LocalDomain = fmt.Sprintf("nativeplanet%d.local", counter)
zap.L().Info(fmt.Sprintf("Incrementing to %v...", LocalDomain))
counter++
domainBase = strings.Split(LocalDomain, ".")[0]
}
}
system.LocalUrl = LocalDomain
}
system.LocalUrl = LocalDomain
// advertise the http server on loop
// we use RegisterProxy so we can spoof the hostname
for {
Expand All @@ -68,7 +73,7 @@ func mDNSServer() {
fmt.Println("Error:", err)
return
}
zap.L().Debug(fmt.Sprintf("Announcing %v for %v", system.LocalUrl, ips))
zap.L().Info(fmt.Sprintf("Announcing %v for %v", system.LocalUrl, ips))
server, err := zeroconf.RegisterProxy(
strings.Split(system.LocalUrl, ".")[0],
"_http._tcp",
Expand All @@ -81,6 +86,14 @@ func mDNSServer() {
)
if err != nil {
zap.L().Error(fmt.Sprintf("Failed to announce mDNS server: %v", err))
} else {
zap.L().Info(fmt.Sprintf("Caching %v", system.LocalUrl))
if err = config.UpdateConf(map[string]interface{}{
"gracefulExit": false,
"lastKnownMDNS": system.LocalUrl,
}); err != nil {
zap.L().Error(fmt.Sprintf("Couldn't update mdns cache: %v", err))
}
}
time.Sleep(120 * time.Second)
server.Shutdown()
Expand Down

0 comments on commit 4688b14

Please sign in to comment.