ideas, better logging

This commit is contained in:
Mark McGranaghan 2012-09-20 09:59:32 -07:00
parent 8e209cd6ab
commit 44ad627f6c
4 changed files with 34 additions and 22 deletions

12
README
View File

@ -1,8 +1,10 @@
= next
get web presence in good enough shape to point to from blog post
gbe-web
force https, canonical host, request logging
graceful shutdown
staging site, behind basic auth
basic design / brand
favicon
google analytics
sign up form
log archival
@ -62,11 +64,17 @@ devcenter
* http://code.google.com/p/go-wiki/wiki/BoundingResourceUse
= topics
* websockets
* html web scraping hn
* protocol buffers
* gomax procs
* noblocking send and non-blocking receive
* dropping sends if buffer full
* web app
* accessing header values and query params
* accessing post body
* serve static files http://code.google.com/p/go-wiki/wiki/HttpStaticFiles
* simultaneios assignement
* simultaneous assignment
* mongo
* time formatting
* typed json parse/unparse

View File

@ -15,3 +15,7 @@ func main() {
os.Setenv("FOO", "bar")
fmt.Println(os.Getenv("FOO"))
}
// == todo
// ensure pattern
// link to 12 factor

View File

@ -16,6 +16,7 @@ func wrapCanonicalHost(f http.HandlerFunc, canonicalHost string) http.HandlerFun
hostPort[0] = canonicalHost
url := "http://" + strings.Join(hostPort, ":") + req.URL.String()
http.Redirect(res, req, url, 301)
return
}
f(res, req)
}

View File

@ -2,34 +2,33 @@ package main
import ("net/http"; "fmt"; "time")
func hello(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "text/plain")
time.Sleep(time.Millisecond * 50)
fmt.Fprintln(res, "Hello logged world")
}
func wrapLogging(f http.HandlerFunc, logs chan string) http.HandlerFunc {
return func(res http.ResponseWriter, req *http.Request) {
start := time.Now()
f(res, req)
method := req.Method
path := req.URL.Path
elapsed := float64(time.Since(start)) / 1000000.0
logs <- fmt.Sprintf("method=%s path=%s elapsed=%f", method, path, elapsed)
}
}
func runLogging(logs chan string) {
for log := range logs {
fmt.Println(log)
}
}
func main() {
func wrapLogging(f http.HandlerFunc, logs chan string) http.HandlerFunc {
logs := make(chan string, 10000)
go runLogging(logs)
handler := wrapLogging(hello, logs)
return func(res http.ResponseWriter, req *http.Request) {
start := time.Now()
f(res, req)
method := req.Method
path := req.URL.Path
elapsed := float64(time.Since(start)) / 1000000.0
logs <- fmt.Sprintf("method=%s path=%s elapsed=%f", method, path, elapsed)
}
}
func hello(res http.ResponseWriter, req *http.Request) {
res.Header().Set("Content-Type", "text/plain")
time.Sleep(time.Millisecond * 50)
fmt.Fprintln(res, "Hello logged world")
}
func main() {
handler := wrapLogging(hello)
http.HandleFunc("/", handler)
http.ListenAndServe(":5000", nil)
}