func run(config *hydra.Config) { messageCh, monitorCh := hydra.NewChannel() if config.ReadBufferSize > 0 { hydra.ReadBufferSize = config.ReadBufferSize log.Println("[info] set ReadBufferSize", hydra.ReadBufferSize) } // start monitor server monitor, err := hydra.NewMonitor(config, monitorCh) if err != nil { log.Println("[error] Couldn't start monitor server.", err) } else { go monitor.Run() } // start out_forward outForward, err := hydra.NewOutForward(config.Servers, messageCh, monitorCh) if err != nil { log.Println("[error]", err) } else { outForward.RoundRobin = config.ServerRoundRobin if outForward.RoundRobin { log.Println("[info] ServerRoundRobin enabled") } go outForward.Run() } // start watcher && in_tail if len(config.Logs) > 0 { watcher, err := hydra.NewWatcher() if err != nil { log.Println("[error]", err) } for _, configLogfile := range config.Logs { tail, err := hydra.NewInTail(configLogfile, watcher, messageCh, monitorCh) if err != nil { log.Println("[error]", err) } else { go tail.Run() } } go watcher.Run() } // start in_forward if config.Receiver != nil { if runtime.GOMAXPROCS(0) < 2 { log.Println("[warning] When using Receiver, recommend to set GOMAXPROCS >= 2.") } inForward, err := hydra.NewInForward(config.Receiver, messageCh, monitorCh) if err != nil { log.Println("[error]", err) } else { go inForward.Run() } } }
func TestInForward(t *testing.T) { config := &hydra.ConfigReceiver{ Host: "127.0.0.1", Port: 0, MaxBufferMessages: 1000, } messageCh, monitorCh := hydra.NewChannel() inForward, err := hydra.NewInForward(config, messageCh, monitorCh) if err != nil { t.Error(err) } go inForward.Run() host, _port, _ := net.SplitHostPort(inForward.Addr.String()) port, _ := strconv.Atoi(_port) logger, err := client.New(client.Config{ FluentHost: host, FluentPort: port, }) if err != nil { t.Error(err) } log.Println("logger", logger) defer logger.Close() tag := "myapp.access" for i := 0; i < 10; i++ { var data = map[string]interface{}{ "foo": "bar", "hoge": "hoge", } logger.Post(tag, data) } n := 0 RECEIVE: for { select { case <-messageCh: n++ continue case <-time.After(1 * time.Second): break RECEIVE } } if n != 10 { t.Errorf("arrived messages %d expected %d", n, 10) } }