momento

commit 5f4f77eda5992ecc019d5ab32ed6d5e96a6e77c0

Author: Pedro Lucas Porcellis <porcellis@eletrotupi.com>

cmd/momento: flesh out an initial server

 cmd/momento/logging.go | 27 +++++++++++++++++++++++++++
 cmd/momento/main.go | 40 ++++++++++++++++++++++++++++++++++++++++


diff --git a/cmd/momento/logging.go b/cmd/momento/logging.go
new file mode 100644
index 0000000000000000000000000000000000000000..59c8fe8eec236720b430ea8888061d13ed8beee2
--- /dev/null
+++ b/cmd/momento/logging.go
@@ -0,0 +1,27 @@
+package main
+
+import (
+	"log"
+	"net/http"
+	"time"
+)
+
+func WithLogging(h http.Handler) http.Handler {
+	logger := func(w http.ResponseWriter, r *http.Request) {
+		defer func() {
+			if err := recover(); err != nil {
+				log.Printf("%s %s %s panic: %s", r.RemoteAddr,
+				r.RequestURI, r.Method, err)
+			}
+		}()
+
+		start := time.Now()
+		h.ServeHTTP(w, r)
+		duration := time.Since(start)
+
+		log.Printf("%s %s %s %s", r.RemoteAddr, r.RequestURI,
+		r.Method, duration.String())
+	}
+
+	return http.HandlerFunc(logger)
+}




diff --git a/cmd/momento/main.go b/cmd/momento/main.go
new file mode 100644
index 0000000000000000000000000000000000000000..7bfb8c0b78e5e7169ccafed36da5d1ce3c206ec1
--- /dev/null
+++ b/cmd/momento/main.go
@@ -0,0 +1,40 @@
+package main
+
+import (
+	"database/sql"
+	"log"
+	"net/http"
+	"os"
+
+	_ "github.com/lib/pq"
+
+
+	"git.eletrotupi.com/momento/api"
+	"git.eletrotupi.com/momento/database"
+)
+
+func main() {
+	// TODO: Allow to configure bind address and the connection string to be
+	// used
+
+	db, err := sql.Open("postgres", os.Args[1])
+	if err != nil {
+		log.Fatalf("Failed to open a database connection: %v", err)
+	}
+
+	mux := http.NewServeMux()
+	mux.Handle("/api/", api.New())
+	serve := database.Middleware(db)(mux)
+	serve = WithLogging(serve)
+
+	server := &http.Server{
+		Addr:		":8000",
+		Handler:	serve,
+	}
+
+	log.Printf("Listening on %s", server.Addr)
+
+	if err := server.ListenAndServe(); err != nil {
+		log.Fatalf("Error: Couldn't serve %s", err.Error())
+	}
+}