You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

67 lines
1.6 KiB

package main
import (
"fmt"
"net/http"
"os"
"time"
_ "github.com/mattn/go-sqlite3"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"github.com/llimllib/springer/server"
)
// getenv returns the environment variable given by the key if present,
// otherwise it returns adefault
func getenv(key string, adefault string) string {
val, ok := os.LookupEnv(key)
if !ok {
return adefault
}
return val
}
func initLog() zerolog.Logger {
logLevel := getenv("LOG_LEVEL", "info")
level, err := zerolog.ParseLevel(logLevel)
if err != nil {
log.Panic().Err(err).Msg("")
}
log := zerolog.New(os.Stderr).With().Timestamp().Logger().Level(level)
if getenv("PRETTY_LOGGING", "") != "" {
log = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: time.RFC3339})
}
return log
}
func main() {
log := initLog()
db := server.InitDB(log)
server.InitRuntimeValues(log)
server.InitCleaner(db, log)
spring83 := server.NewSpring83Server(db, log)
host := getenv("HOST", "")
port := getenv("PORT", "8000")
addr := fmt.Sprintf("%s:%s", host, port)
timeoutMsg := "Request timed out"
srv := &http.Server{
Addr: addr,
ReadTimeout: 1 * time.Second,
WriteTimeout: 1 * time.Second,
IdleTimeout: 30 * time.Second,
ReadHeaderTimeout: 2 * time.Second,
Handler: server.RequestLogger(log, http.TimeoutHandler(spring83, 2*time.Second, timeoutMsg)),
}
log.Info().Str("addr", addr).Msg("starting helloserver on")
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
log.Err(err).Msg("Error received from server")
}
}