package http import ( "fmt" "io/ioutil" "net/http" "github.com/Shugyousha/stasher/input" "github.com/Shugyousha/stasher/registry" "github.com/Shugyousha/stasher/work" ) func init() { registry.Inputregistry["http"] = New } type HTTPInput struct { retchan chan *work.Work prefix string port string } func New(conf map[string]string) input.Input { prefix := conf["prefix"] if prefix == "" { fmt.Printf("Need a prefix when setting up http input\n") return nil } port := conf["port"] if port == "" { fmt.Printf("Need a port number when setting up http input\n") return nil } return &HTTPInput{prefix: prefix, port: port} } func (hi *HTTPInput) httphandler(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { fmt.Printf("Expected POST method was: %q\n", r.Method) return } all, err := ioutil.ReadAll(r.Body) if err != nil { fmt.Printf("Error when reading HTTP request body: %q\n", err) return } hi.retchan <- &work.Work{Data: all} } func (hi *HTTPInput) Start() chan *work.Work { hi.retchan = make(chan *work.Work, 100) go func() { http.HandleFunc("/"+hi.prefix, hi.httphandler) err := http.ListenAndServe(hi.port, nil) fmt.Printf("Error when serving HTTP: %q\n", err) close(hi.retchan) }() return hi.retchan }