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
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") |
|
} |
|
}
|
|
|