firestormy/main.go

86 lines
1.7 KiB
Go
Executable File

package main
import (
"local/firestormy/config"
"local/firestormy/scheduler"
"local/firestormy/server"
"local/lastn/lastn"
"log"
"net/http"
"os"
"os/signal"
"path/filepath"
"time"
)
func main() {
if config.Config != "" {
var err error
scheduler.Schedule, err = scheduler.NewFromFile(config.Config)
if err != nil {
panic(err)
}
}
if err := scheduler.Schedule.Start(); err != nil {
panic(err)
}
server := server.New()
if err := server.Routes(); err != nil {
panic(err)
}
go EnqueueBackups()
go func() {
log.Printf("Serving on %q", config.Port)
if err := http.ListenAndServe(config.Port, server); err != nil {
panic(err)
}
}()
// catch stop
stop := make(chan os.Signal)
signal.Notify(stop, os.Interrupt)
<-stop
scheduler.Schedule.Stop()
}
func EnqueueBackups() {
realpath, err := filepath.Abs(config.StoreAddr)
if err != nil {
log.Println("dir", config.StoreAddr, "not found, so no backups")
return
}
conf := lastn.Config{
N: 30,
Root: realpath,
Ns: "backups",
Store: "files",
StoreAddr: 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 * 2)
log.Println("backup initial:", err)
if err := lastn.Push(); err != nil {
log.Println("backup failed:", err)
}
if err := lastn.Clean(); err != nil {
log.Println("backup clean 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)
}
}
}