featurebase/core/http.go
2013-12-16 11:21:27 -06:00

77 lines
1.9 KiB
Go

package core
import (
"encoding/json"
"io/ioutil"
"log"
"net/http"
"pilosa/db"
"pilosa/query"
)
func (service *Service) HandleMessage(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed)
return
}
var message db.Message
decoder := json.NewDecoder(r.Body)
if decoder.Decode(&message) != nil {
http.Error(w, "Invalid JSON", http.StatusBadRequest)
return
}
//service.Inbox <- &message
}
func (service *Service) HandleQuery(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed)
return
}
body, err := ioutil.ReadAll(r.Body)
defer r.Body.Close()
if err != nil {
http.Error(w, "Error reading POST data", http.StatusBadRequest)
return
}
q := query.QueryParser{string(body)}
log.Println(q) // TODO: parse and perform
}
func (service *Service) HandleStats(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "Only GET allowed", http.StatusMethodNotAllowed)
return
}
encoder := json.NewEncoder(w)
//stats := service.GetStats()
stats := ""
err := encoder.Encode(stats)
if err != nil {
log.Fatal("Error encoding stats")
}
}
func (service *Service) HandleListen(w http.ResponseWriter, r *http.Request) {
//listener := service.NewListener()
//encoder := json.NewEncoder(w)
//for {
// select {
// case message := <-listener:
// err := encoder.Encode(message)
// if err != nil {
// log.Println("Error sending message")
// return
// }
// }
//}
}
func (service *Service) ServeHTTP() {
log.Println("Serving HTTP...")
http.HandleFunc("/message", service.HandleMessage)
http.HandleFunc("/query", service.HandleQuery)
http.HandleFunc("/stats", service.HandleStats)
http.HandleFunc("/listen", service.HandleListen)
//http.ListenAndServe(":" + strconv.Itoa(service.HttpLocation.Port), nil)
}