52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package main
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"net"
|
||
|
|
"net/http"
|
||
|
|
|
||
|
|
"github.com/alecthomas/kong"
|
||
|
|
"github.com/rs/zerolog"
|
||
|
|
)
|
||
|
|
|
||
|
|
type CLI struct {
|
||
|
|
File string `arg:"" name:"file" short:"f" help:"Path to CSV redirects file." type:"path"`
|
||
|
|
Host string `name:"host" help:"HTTP listen host." default:"${host}"`
|
||
|
|
Port string `name:"port" short:"p" help:"HTTP listen port." default:"${port}"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type HttpServer struct {
|
||
|
|
CLI *CLI
|
||
|
|
Log zerolog.Logger
|
||
|
|
}
|
||
|
|
|
||
|
|
func (srv *HttpServer) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||
|
|
statusCode := 404
|
||
|
|
srv.Log.Trace().Int("result", statusCode).Msg(req.URL.Path)
|
||
|
|
w.WriteHeader(statusCode)
|
||
|
|
}
|
||
|
|
|
||
|
|
func main() {
|
||
|
|
vars := kong.Vars{
|
||
|
|
"host": "localhost",
|
||
|
|
"port": "4000",
|
||
|
|
}
|
||
|
|
|
||
|
|
cli := &CLI{}
|
||
|
|
kong.Parse(cli, vars)
|
||
|
|
|
||
|
|
srv := &HttpServer{
|
||
|
|
CLI: cli,
|
||
|
|
Log: zerolog.New(zerolog.NewConsoleWriter()).With().Timestamp().Logger(),
|
||
|
|
}
|
||
|
|
|
||
|
|
addr := net.JoinHostPort(cli.Host, cli.Port)
|
||
|
|
errc := make(chan error)
|
||
|
|
go func() {
|
||
|
|
errc <- http.ListenAndServe(addr, srv)
|
||
|
|
}()
|
||
|
|
|
||
|
|
srv.Log.Info().Msgf("Listening at %s", addr)
|
||
|
|
err := <-errc
|
||
|
|
panic(err)
|
||
|
|
}
|