rssmon3/main.go

57 lines
990 B
Go

package main
import (
"local/rssmon3/config"
"local/rssmon3/handlers"
"local/rssmon3/monitor"
"local/rssmon3/server"
"log"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
log.SetPrefix("..")
time.Local = time.FixedZone("UTC-6", (-6*int(time.Hour))/int(time.Second))
sigc := make(chan os.Signal)
if err := config.New(); err != nil {
panic(err)
}
log.Println("[main]", config.Values())
m, err := monitor.New()
if err != nil {
panic(err)
}
go InterruptAfter(m.Run, sigc)
s := server.New(m.Incoming)
if err := s.Routes(); err != nil {
panic(err)
}
go InterruptAfter(s.Run, sigc)
h := handlers.New(m.Outgoing)
go InterruptAfter(h.Run, sigc)
signal.Notify(sigc,
syscall.SIGHUP,
syscall.SIGINT,
syscall.SIGTERM,
syscall.SIGQUIT,
)
<-sigc
config.Values().Can()
config.Values().DB.Close()
}
func InterruptAfter(foo func() error, c chan os.Signal) {
if err := foo(); err != nil {
log.Println("[InterruptAfter]", err)
}
c <- syscall.SIGINT
}