func TestMonitorServer(t *testing.T) { config := &hydra.Config{ Monitor: &hydra.ConfigMonitor{ Host: "localhost", Port: 0, }, } _, ch := hydra.NewChannel() monitor, _ := hydra.NewMonitor(config, ch) go monitor.Run() expectedMessages := make(map[string]int64) expectedBytes := make(map[string]int64) tags := []string{"foo", "bar", "dummy.test"} for _, tag := range tags { for i := 1; i <= 100; i++ { m := rand.Int63n(10) b := rand.Int63n(2560) ch <- &hydra.SentStat{ Tag: tag, Messages: m, Bytes: b, } expectedMessages[tag] += m expectedBytes[tag] += b } } sleep(1) resp, err := http.Get(fmt.Sprintf("http://%s/", monitor.Addr)) if err != nil { t.Error(err) } defer resp.Body.Close() if ct := resp.Header.Get("Content-Type"); ct != "application/json" { t.Error("invalid content-type", ct) } body, _ := ioutil.ReadAll(resp.Body) js := bytes.NewReader(body) for tag, n := range expectedMessages { js.Seek(int64(0), os.SEEK_SET) var got int64 scan.ScanJSON(js, "/sent/"+tag+"/messages", &got) if got != n { t.Errorf("/sent/%s/messages got %d expected %d", tag, got, n) } } for tag, n := range expectedBytes { js.Seek(int64(0), os.SEEK_SET) var got int64 scan.ScanJSON(js, "/sent/"+tag+"/bytes", &got) if got != n { t.Errorf("/sent/%s/bytes got %d expected %d", tag, got, n) } } log.Println(string(body)) }
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() } } }