inital commit & import from main project
This commit is contained in:
117
main.go
Normal file
117
main.go
Normal file
@@ -0,0 +1,117 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"entgo.io/ent/dialect"
|
||||
"entgo.io/ent/dialect/sql"
|
||||
"flag"
|
||||
"github.com/go-chi/chi/v5"
|
||||
"github.com/go-chi/chi/v5/middleware"
|
||||
"github.com/go-chi/render"
|
||||
_ "github.com/jackc/pgx/v4/stdlib"
|
||||
log "github.com/sirupsen/logrus"
|
||||
"github.com/wercker/journalhook"
|
||||
"gopkg.in/yaml.v3"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"somegit.dev/ALHP/ALHP.GO/ent"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
conf *Conf
|
||||
repos []string
|
||||
db *ent.Client
|
||||
journalLog = flag.Bool("journal", false, "Log to systemd journal instead of stdout")
|
||||
configFile = flag.String("config", "config.yaml", "set config file name/path")
|
||||
)
|
||||
|
||||
func main() {
|
||||
killSignals := make(chan os.Signal, 1)
|
||||
signal.Notify(killSignals, syscall.SIGINT, syscall.SIGTERM)
|
||||
|
||||
reloadSignals := make(chan os.Signal, 1)
|
||||
signal.Notify(reloadSignals, syscall.SIGUSR1)
|
||||
|
||||
flag.Parse()
|
||||
|
||||
confStr, err := os.ReadFile(*configFile)
|
||||
if err != nil {
|
||||
log.Fatalf("error reading config file: %v", err)
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(confStr, &conf)
|
||||
if err != nil {
|
||||
log.Fatalf("error parsing config file: %v", err)
|
||||
}
|
||||
|
||||
lvl, err := log.ParseLevel(conf.Logging.Level)
|
||||
if err != nil {
|
||||
log.Fatalf("error parsing log level from config: %v", err)
|
||||
}
|
||||
log.SetLevel(lvl)
|
||||
if *journalLog {
|
||||
journalhook.Enable()
|
||||
}
|
||||
|
||||
if conf.DB.Driver == "pgx" {
|
||||
pdb, err := sql.Open("pgx", conf.DB.ConnectTo)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to open database %s: %v", conf.DB.ConnectTo, err)
|
||||
}
|
||||
|
||||
drv := sql.OpenDB(dialect.Postgres, pdb.DB())
|
||||
db = ent.NewClient(ent.Driver(drv))
|
||||
} else {
|
||||
db, err = ent.Open(conf.DB.Driver, conf.DB.ConnectTo)
|
||||
if err != nil {
|
||||
log.Panicf("failed to open database %s: %v", conf.DB.ConnectTo, err)
|
||||
}
|
||||
defer func(Client *ent.Client) {
|
||||
_ = Client.Close()
|
||||
}(db)
|
||||
}
|
||||
|
||||
if err := db.Schema.Create(context.Background()); err != nil {
|
||||
log.Panicf("automigrate failed: %v", err)
|
||||
}
|
||||
|
||||
r := chi.NewRouter()
|
||||
r.Use(middleware.RequestID)
|
||||
r.Use(middleware.RealIP)
|
||||
r.Use(middleware.Logger)
|
||||
r.Use(middleware.Recoverer)
|
||||
r.Use(middleware.Timeout(60 * time.Second))
|
||||
r.Use(render.SetContentType(render.ContentTypeJSON))
|
||||
|
||||
// routes
|
||||
r.Get("/stats", GetStats)
|
||||
log.Fatal(http.ListenAndServe(":3043", r))
|
||||
|
||||
killLoop:
|
||||
for {
|
||||
select {
|
||||
case <-killSignals:
|
||||
break killLoop
|
||||
case <-reloadSignals:
|
||||
confStr, err := os.ReadFile(*configFile)
|
||||
if err != nil {
|
||||
log.Panicf("unable to open config: %v", err)
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(confStr, &conf)
|
||||
if err != nil {
|
||||
log.Panicf("unable to parse config: %v", err)
|
||||
}
|
||||
|
||||
lvl, err := log.ParseLevel(conf.Logging.Level)
|
||||
if err != nil {
|
||||
log.Panicf("failure setting logging level: %v", err)
|
||||
}
|
||||
log.SetLevel(lvl)
|
||||
log.Infof("config reloaded")
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user