This commit is contained in:
83
hn/server.go
83
hn/server.go
@@ -8,19 +8,23 @@ import (
|
||||
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||
"github.com/labstack/echo"
|
||||
"github.com/labstack/echo/middleware"
|
||||
"github.com/labstack/gommon/log"
|
||||
gl "github.com/labstack/gommon/log"
|
||||
"github.com/mattn/go-isatty"
|
||||
ep2 "github.com/mayowa/echo-pongo2"
|
||||
"github.com/ziflex/lecho/v2"
|
||||
)
|
||||
|
||||
// required for orm
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/rs/zerolog/log"
|
||||
)
|
||||
|
||||
type App struct {
|
||||
version string
|
||||
buildarch string
|
||||
e *echo.Echo
|
||||
logger *string
|
||||
log *zerolog.Logger
|
||||
db *gorm.DB
|
||||
startup time.Time
|
||||
fetcher *Fetcher
|
||||
}
|
||||
|
||||
func RunServer(version string, buildarch string) int {
|
||||
@@ -28,18 +32,69 @@ func RunServer(version string, buildarch string) int {
|
||||
a.version = version
|
||||
a.buildarch = buildarch
|
||||
a.startup = time.Now()
|
||||
a.runForever()
|
||||
return 0
|
||||
|
||||
a.init()
|
||||
defer a.db.Close()
|
||||
|
||||
a.fetcher = NewFetcher(a.db)
|
||||
a.fetcher.AddLogger(a.log)
|
||||
|
||||
go a.fetcher.run()
|
||||
|
||||
return a.runForever()
|
||||
}
|
||||
|
||||
func (a *App) runForever() {
|
||||
func (a *App) init() {
|
||||
// setup logging
|
||||
l := log.With().Caller().Logger()
|
||||
log.Logger = l
|
||||
tty := isatty.IsTerminal(os.Stdin.Fd()) || isatty.IsCygwinTerminal(os.Stdin.Fd())
|
||||
if tty {
|
||||
out := zerolog.NewConsoleWriter(
|
||||
func(w *zerolog.ConsoleWriter) {
|
||||
// Customize time format
|
||||
w.TimeFormat = time.RFC3339
|
||||
},
|
||||
)
|
||||
log.Logger = log.Output(out)
|
||||
}
|
||||
// always log in UTC
|
||||
zerolog.TimestampFunc = func() time.Time {
|
||||
return time.Now().UTC()
|
||||
}
|
||||
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
||||
if os.Getenv("DEBUG") != "" {
|
||||
zerolog.SetGlobalLevel(zerolog.DebugLevel)
|
||||
}
|
||||
|
||||
a.log = &log.Logger
|
||||
|
||||
a.identify()
|
||||
|
||||
// open db
|
||||
// FIXME make configurable path
|
||||
db, err := gorm.Open("sqlite3", "storage.db")
|
||||
if err != nil {
|
||||
panic("failed to connect database")
|
||||
}
|
||||
a.db = db
|
||||
}
|
||||
|
||||
func (a *App) identify() {
|
||||
log.Info().
|
||||
Str("version", a.version).
|
||||
Str("buildarch", a.buildarch).
|
||||
Msg("starting")
|
||||
}
|
||||
|
||||
func (a *App) runForever() int {
|
||||
|
||||
// Echo instance
|
||||
a.e = echo.New()
|
||||
|
||||
lev := log.INFO
|
||||
lev := gl.INFO
|
||||
if os.Getenv("DEBUG") != "" {
|
||||
lev = log.DEBUG
|
||||
lev = gl.DEBUG
|
||||
}
|
||||
|
||||
logger := lecho.New(
|
||||
@@ -55,11 +110,17 @@ func (a *App) runForever() {
|
||||
a.e.Use(middleware.Logger())
|
||||
a.e.Use(middleware.Recover())
|
||||
|
||||
a.e.Renderer = NewTemplate("./view/")
|
||||
|
||||
r, err := ep2.NewRenderer("view")
|
||||
if err != nil {
|
||||
a.e.Logger.Fatal(err)
|
||||
}
|
||||
a.e.Renderer = r
|
||||
// Routes
|
||||
a.e.GET("/", indexHandler)
|
||||
a.e.GET("/about", aboutHandler)
|
||||
|
||||
// Start server
|
||||
a.e.Logger.Fatal(a.e.Start(":8080"))
|
||||
|
||||
return 0 //FIXME setup graceful shutdown
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user