Files
mirror-sync/cmd/server/main.go

70 lines
1.4 KiB
Go

package main
import (
"fmt"
"log/slog"
"mirror-sync/cmd/server/api"
cronruntime "mirror-sync/cmd/server/core/runtime"
"mirror-sync/cmd/server/core/storage"
"mirror-sync/pkg/constants"
"os"
"runtime"
"strconv"
)
func main() {
dbPath := os.Getenv("MIRRORSYNC_DB_PATH")
if len(dbPath) == 0 {
dbPath = "/var/lib/mirror-sync/data.db"
}
p := os.Getenv("MIRRORSYNC_PORT")
if len(p) == 0 {
p = "25697"
}
port, err := strconv.Atoi(p)
if err != nil {
fmt.Fprintf(os.Stderr, "error: bad MIRRORSYNC_PORT value: %s", err)
os.Exit(1)
}
fmt.Printf("mirror-sync daemon -- v%s.%s.%s\n\n", constants.Version, runtime.GOOS, runtime.GOARCH)
data, err := storage.OpenDB(dbPath)
if err != nil {
fmt.Fprintln(os.Stderr, "failed to start server:", err.Error())
os.Exit(1)
}
if err := data.Migrate(); err != nil {
fmt.Fprintln(os.Stderr, "failed to start server:", err.Error())
os.Exit(1)
}
// runtime
prs, err := data.List()
if err != nil {
fmt.Fprintln(os.Stderr, "failed to start server:", err.Error())
os.Exit(1)
}
scheduler, err := cronruntime.New(prs)
if err != nil {
fmt.Fprintln(os.Stderr, "failed to start server:", err.Error())
os.Exit(1)
}
go scheduler.Run()
slog.Info("daemon scheduler is running")
// api
s := api.NewServer(data, scheduler, port)
slog.Info("daemon listening to :" + p)
if err := s.Server.ListenAndServe(); err != nil {
fmt.Fprintln(os.Stderr, "failed to start server:", err.Error())
os.Exit(1)
}
}