This commit is contained in:
Jeffrey Paul 2019-10-03 12:30:04 -07:00
commit 282e902b0a
4 changed files with 115 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
pooteeweet

27
Makefile Normal file
View File

@ -0,0 +1,27 @@
VERSION := $(shell git rev-parse --short HEAD)
BUILDTIME := $(shell date -u '+%Y-%m-%dT%H:%M:%SZ')
BUILDUSER := $(shell whoami)
BUILDHOST := $(shell hostname -s)
BUILDARCH := $(shell uname -m)
GOLDFLAGS += -X main.Version=$(VERSION)
GOLDFLAGS += -X main.Buildtime=$(BUILDTIME)
GOLDFLAGS += -X main.Builduser=$(BUILDUSER)@$(BUILDHOST)
GOLDFLAGS += -X main.Buildarch=$(BUILDARCH)
GOFLAGS = -ldflags "$(GOLDFLAGS)"
default: run
run: build
./pooteeweet
build: ./pooteeweet
./pooteeweet: *.go
go build -o $@ $(GOFLAGS) .
fmt:
go fmt *.go
test:
docker build -t sneak/pooteeweet .

36
main.go Normal file
View File

@ -0,0 +1,36 @@
//3456789112345676892123456789312345678941234567895123456789612345678971234567898
package main
import "github.com/sirupsen/logrus"
var Version string
var Buildtime string
var Builduser string
var Buildarch string
var log *logrus.Logger
func main() {
initLogging()
serve()
}
func initLogging() {
log = logrus.New()
log.SetReportCaller(true)
log.SetLevel(logrus.DebugLevel)
log.SetFormatter(UTCFormatter{&logrus.JSONFormatter{}})
}
func serve() {
server := setupHttpServer()
log.Fatal(server.ListenAndServe())
}
type UTCFormatter struct {
logrus.Formatter
}
func (u UTCFormatter) Format(e *logrus.Entry) ([]byte, error) {
e.Time = e.Time.UTC()
return u.Formatter.Format(e)
}

51
server.go Normal file
View File

@ -0,0 +1,51 @@
//3456789112345676892123456789312345678941234567895123456789612345678971234567898
package main
import "flag"
import "net/http"
import "time"
import "github.com/gorilla/mux"
import "github.com/justinas/alice"
import "github.com/sirupsen/logrus"
func LoggerMiddleware(h http.Handler) http.Handler {
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
startTime := time.Now().UTC()
h.ServeHTTP(writer, request)
log.WithFields(logrus.Fields{
"method": request.Method,
"path": request.URL.Path,
"duration_ms": time.Since(startTime).Milliseconds(),
}).Info("pageload")
})
}
func setupHttpRouter(staticdir string) http.Handler {
r := mux.NewRouter()
// This will serve files under
// http://localhost:8000/static/<filename>
r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(staticdir))))
return r
}
func setupHttpServer() *http.Server {
var dir string
flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir")
flag.Parse()
router := setupHttpRouter(dir)
server := alice.New(LoggerMiddleware).Then(router)
listener := &http.Server{
Handler: server,
Addr: ":8000",
WriteTimeout: 15 * time.Second,
ReadTimeout: 15 * time.Second,
}
return listener
}