97 lines
1.9 KiB
Go
Executable File
97 lines
1.9 KiB
Go
Executable File
package main
|
|
|
|
import (
|
|
"local/lastn/lastn"
|
|
"local/rssmon3/config"
|
|
"local/rssmon3/handlers"
|
|
"local/rssmon3/monitor"
|
|
"local/rssmon3/server"
|
|
"log"
|
|
"os"
|
|
"os/signal"
|
|
"path/filepath"
|
|
"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)
|
|
|
|
go EnqueueBackups()
|
|
|
|
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
|
|
}
|
|
|
|
func EnqueueBackups() {
|
|
realpath, err := filepath.Abs(config.Values().Addr)
|
|
if err != nil {
|
|
log.Println("dir", config.Values().Addr, "not found, so no backups")
|
|
return
|
|
}
|
|
conf := lastn.Config{
|
|
N: 3,
|
|
Rclone: "/dev/null",
|
|
Root: realpath,
|
|
Ns: "backups",
|
|
Store: "files",
|
|
Conf: realpath + "-backups",
|
|
}
|
|
log.Printf("backups conf: %+v", conf)
|
|
lastn, err := lastn.New(conf)
|
|
if err != nil {
|
|
log.Println("backups disabled:", realpath, ":", err)
|
|
return
|
|
}
|
|
ticker := time.NewTicker(time.Hour * 24)
|
|
log.Println("backup initial:", err)
|
|
if err := lastn.Push(); err != nil {
|
|
log.Println("backup failed:", err)
|
|
}
|
|
for _ = range ticker.C {
|
|
log.Println("backing up...")
|
|
if err := lastn.Push(); err != nil {
|
|
log.Println("backup push failed:", err)
|
|
}
|
|
if err := lastn.Clean(); err != nil {
|
|
log.Println("backup clean failed:", err)
|
|
}
|
|
}
|
|
}
|