Browse Source

fix up logging

master
Brett Langdon 10 years ago
parent
commit
1c52d6e69d
1 changed files with 27 additions and 16 deletions
  1. +27
    -16
      github-keys.go

+ 27
- 16
github-keys.go View File

@ -7,9 +7,12 @@ import (
"io/ioutil"
"log"
"net/http"
"os"
"time"
)
var NO_RESPONSE string = ""
var listen *string = flag.String("listen", ":8000", "\"[address]:<port>\" to bind to. [default: \":8000\"]")
var username *string = flag.String("username", "", "GitHub username to fetch keys for. [required]")
var ttl *int64 = flag.Int64("ttl", 86400, "Time in seconds to cache GitHub keys for. [default: 86400 (one day)]")
@ -18,7 +21,7 @@ var cache []string = make([]string, 0)
var expire int64 = 0
func fetchKeys() error {
fmt.Printf("Fetching keys for GitHub user \"%s\"\n", *username)
fmt.Fprintf(os.Stderr, "Fetching keys for GitHub user \"%s\"\n", *username)
var resp *http.Response
var err error
var uri string = fmt.Sprintf("https://api.github.com/users/%s/keys", *username)
@ -51,15 +54,9 @@ func fetchKeys() error {
return nil
}
func logRequest(r *http.Request) {
fmt.Printf("\"%s\"\t\"%s\"\t\"%s\"\t\"%s\"\t\"%s\"\t\"%s\"", r.Method, r.URL, r.Proto, r.Host, r.RemoteAddr, r.RequestURI)
}
func handle(w http.ResponseWriter, r *http.Request) {
logRequest(r)
func getResponse(r *http.Request) (int, string) {
if r.Method != "GET" {
w.WriteHeader(http.StatusMethodNotAllowed)
return
return http.StatusMethodNotAllowed, NO_RESPONSE
}
var err error
@ -67,19 +64,33 @@ func handle(w http.ResponseWriter, r *http.Request) {
if now >= expire {
err = fetchKeys()
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
return http.StatusInternalServerError, NO_RESPONSE
}
}
if len(cache) > 0 {
w.WriteHeader(http.StatusOK)
var response string = ""
for _, key := range cache {
fmt.Fprintf(w, "%s\n", key)
response += fmt.Sprintf("%s\n", key)
}
} else {
w.WriteHeader(http.StatusNoContent)
return http.StatusOK, response
}
return http.StatusNoContent, NO_RESPONSE
}
func handle(w http.ResponseWriter, r *http.Request) {
var status int
var response string
status, response = getResponse(r)
w.WriteHeader(status)
fmt.Fprintf(w, response)
fmt.Fprintf(
os.Stdout,
"\"%d\"\t\"%d\"\t\"%s\"\t\"%s\"\t\"%s\"\t\"%s\"\t\"%s\"\t\"%s\"\n",
status, len(response), r.Method, r.URL, r.Proto, r.Host, r.RemoteAddr, r.UserAgent(),
)
}
func main() {
@ -94,7 +105,7 @@ func main() {
log.Fatal(err)
}
fmt.Printf("Starting server on \"%s\" for GitHub user \"%s\"\n", *listen, *username)
fmt.Fprintf(os.Stderr, "Starting server on \"%s\" for GitHub user \"%s\"\n", *listen, *username)
http.HandleFunc("/", handle)
err = http.ListenAndServe(*listen, nil)
if err != nil {


Loading…
Cancel
Save