diff options
-rw-r--r-- | conf/parser.go | 7 | ||||
-rw-r--r-- | input/http/http.go (renamed from input/http.go) | 20 | ||||
-rw-r--r-- | input/inputinterface.go (renamed from input/interface.go) | 0 | ||||
-rw-r--r-- | input/stdin/stdin.go (renamed from input/stdin.go) | 10 | ||||
-rw-r--r-- | main.go | 4 | ||||
-rw-r--r-- | registry/registry.go | 20 |
6 files changed, 55 insertions, 6 deletions
diff --git a/conf/parser.go b/conf/parser.go index 6aca3aa..bdec888 100644 --- a/conf/parser.go +++ b/conf/parser.go @@ -19,6 +19,8 @@ import ( "fmt" "io" "os" + + "github.com/Shugyousha/stasher/registry" ) // Having a Config to Manager function could be nice? Or we could just @@ -55,6 +57,11 @@ func NewConfig(r io.Reader) *Config { func (p *parser) startparsing() { inputmdesc := p.module("input") fmt.Fprintf(os.Stderr, "input moduledesc: %#v\n", inputmdesc) + inputfunc, ok := registry.Inputregistry[inputmdesc.name] + if !ok { + fmt.Fprintf(os.Stderr, "input module is not known: %q\n", inputmdesc.name) + } + inputfunc(nil) filtermdesc := p.module("filter") fmt.Fprintf(os.Stderr, "filter moduledesc: %#v\n", filtermdesc) diff --git a/input/http.go b/input/http/http.go index 285f1f6..71a0340 100644 --- a/input/http.go +++ b/input/http/http.go @@ -1,20 +1,36 @@ -package input +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 NewHTTPInput(prefix, port string) *HTTPInput { +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} } diff --git a/input/interface.go b/input/inputinterface.go index 1743249..1743249 100644 --- a/input/interface.go +++ b/input/inputinterface.go diff --git a/input/stdin.go b/input/stdin/stdin.go index 25840ef..fa4d21f 100644 --- a/input/stdin.go +++ b/input/stdin/stdin.go @@ -1,4 +1,4 @@ -package input +package stdin import ( "bufio" @@ -6,14 +6,20 @@ import ( "io" "os" + "github.com/Shugyousha/stasher/input" + "github.com/Shugyousha/stasher/registry" "github.com/Shugyousha/stasher/work" ) +func init() { + registry.Inputregistry["input"] = New +} + type StdinInput struct { retchan chan *work.Work } -func NewStdin() *StdinInput { +func New(map[string]string) input.Input { return &StdinInput{} } @@ -8,7 +8,7 @@ import ( "github.com/Shugyousha/stasher/conf" "github.com/Shugyousha/stasher/filter" - "github.com/Shugyousha/stasher/input" + "github.com/Shugyousha/stasher/input/stdin" "github.com/Shugyousha/stasher/output" ) @@ -26,7 +26,7 @@ func main() { ffmap["F"] = func(s string) string { return strings.ToUpper(s) } m := Manager{ - Input: input.NewStdin(), + Input: stdin.New(nil), Filter: filter.NewStringFilter(ffmap), Output: &output.StdoutOutput{}, } diff --git a/registry/registry.go b/registry/registry.go new file mode 100644 index 0000000..5b285b8 --- /dev/null +++ b/registry/registry.go @@ -0,0 +1,20 @@ +package registry + +import ( + "github.com/Shugyousha/stasher/input" + "github.com/Shugyousha/stasher/work" +) + +var ( + Inputregistry map[string]func(map[string]string) input.Input + Filterregistry map[string]func(map[string]string) Filter + Outputregistry map[string]func(map[string]string) Output +) + +type Filter interface { + Filter(*work.Work) *work.Work +} + +type Output interface { + Output(*work.Work) +} |