diff options
Diffstat (limited to 'input/http')
-rw-r--r-- | input/http/http.go | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/input/http/http.go b/input/http/http.go new file mode 100644 index 0000000..71a0340 --- /dev/null +++ b/input/http/http.go @@ -0,0 +1,61 @@ +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 +} |