[TASK] Delay startup until a multiple of the period since zero time (#68)
This commit is contained in:
		
							parent
							
								
									88975d2566
								
							
						
					
					
						commit
						7f554bd6d6
					
				@ -6,6 +6,7 @@ import (
 | 
				
			|||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"os/signal"
 | 
						"os/signal"
 | 
				
			||||||
	"syscall"
 | 
						"syscall"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/FreifunkBremen/yanic/database"
 | 
						"github.com/FreifunkBremen/yanic/database"
 | 
				
			||||||
	"github.com/FreifunkBremen/yanic/database/all"
 | 
						"github.com/FreifunkBremen/yanic/database/all"
 | 
				
			||||||
@ -58,18 +59,26 @@ func main() {
 | 
				
			|||||||
	nodes.Start()
 | 
						nodes.Start()
 | 
				
			||||||
	meshviewer.Start(config, nodes)
 | 
						meshviewer.Start(config, nodes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if config.Respondd.Enable {
 | 
					 | 
				
			||||||
		collector = respond.NewCollector(connections, nodes, config.Respondd.Interface, config.Respondd.Port)
 | 
					 | 
				
			||||||
		collector.Start(config.Respondd.CollectInterval.Duration)
 | 
					 | 
				
			||||||
		defer collector.Close()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if config.Webserver.Enable {
 | 
						if config.Webserver.Enable {
 | 
				
			||||||
		log.Println("starting webserver on", config.Webserver.Bind)
 | 
							log.Println("starting webserver on", config.Webserver.Bind)
 | 
				
			||||||
		srv := webserver.New(config.Webserver.Bind, config.Webserver.Webroot)
 | 
							srv := webserver.New(config.Webserver.Bind, config.Webserver.Webroot)
 | 
				
			||||||
		go srv.Close()
 | 
							go srv.Close()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if config.Respondd.Enable {
 | 
				
			||||||
 | 
							// Delaying startup to start at a multiple of `duration` since the zero time.
 | 
				
			||||||
 | 
							if duration := config.Respondd.Synchronize.Duration; duration > 0 {
 | 
				
			||||||
 | 
								now := time.Now()
 | 
				
			||||||
 | 
								delay := duration - now.Sub(now.Truncate(duration))
 | 
				
			||||||
 | 
								log.Printf("delaying %0.1f seconds", delay.Seconds())
 | 
				
			||||||
 | 
								time.Sleep(delay)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							collector = respond.NewCollector(connections, nodes, config.Respondd.Interface, config.Respondd.Port)
 | 
				
			||||||
 | 
							collector.Start(config.Respondd.CollectInterval.Duration)
 | 
				
			||||||
 | 
							defer collector.Close()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Wait for INT/TERM
 | 
						// Wait for INT/TERM
 | 
				
			||||||
	sigs := make(chan os.Signal, 1)
 | 
						sigs := make(chan os.Signal, 1)
 | 
				
			||||||
	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
 | 
						signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,8 @@
 | 
				
			|||||||
# Send respondd request to update information
 | 
					# Send respondd request to update information
 | 
				
			||||||
[respondd]
 | 
					[respondd]
 | 
				
			||||||
enable           = true
 | 
					enable           = true
 | 
				
			||||||
 | 
					# Delay startup until a multiple of the period since zero time
 | 
				
			||||||
 | 
					synchronize      = "1m"
 | 
				
			||||||
# how oftern request per multicast
 | 
					# how oftern request per multicast
 | 
				
			||||||
collect_interval = "1m"
 | 
					collect_interval = "1m"
 | 
				
			||||||
# on which interface
 | 
					# on which interface
 | 
				
			||||||
 | 
				
			|||||||
@ -10,6 +10,7 @@ import (
 | 
				
			|||||||
type Config struct {
 | 
					type Config struct {
 | 
				
			||||||
	Respondd struct {
 | 
						Respondd struct {
 | 
				
			||||||
		Enable          bool     `toml:"enable"`
 | 
							Enable          bool     `toml:"enable"`
 | 
				
			||||||
 | 
							Synchronize     Duration `toml:"synchronize"`
 | 
				
			||||||
		Interface       string   `toml:"interface"`
 | 
							Interface       string   `toml:"interface"`
 | 
				
			||||||
		Port            int      `toml:"port"`
 | 
							Port            int      `toml:"port"`
 | 
				
			||||||
		CollectInterval Duration `toml:"collect_interval"`
 | 
							CollectInterval Duration `toml:"collect_interval"`
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user