func main() { runtime.GOMAXPROCS(4) var interval = flag.String("interval", "1s", "Interval for reported results") var writeRate = flag.Int("writeRate", 15000, "Number of writes per second to send to doppler") var stopAfter = flag.String("stopAfter", "5m", "How long to run the experiment for") var sharedSecret string flag.StringVar(&sharedSecret, "sharedSecret", "", "Shared secret used by Doppler to verify message validity") var dopplerOutgoingPort = flag.Int("dopplerOutgoingPort", 8080, "Outgoing port from doppler") var dopplerIncomingDropsondePort = flag.Int("dopplerIncomingDropsondePort", 3457, "Incoming dropsonde port to doppler") flag.Parse() duration, err := time.ParseDuration(*interval) if err != nil { log.Fatalf("Invalid duration %s\n", *interval) } stopAfterDuration, err := time.ParseDuration(*stopAfter) if err != nil { log.Fatalf("Invalid duration %s\n", *stopAfter) } reporter := metricsreporter.New(duration, os.Stdout) ip, err := localip.LocalIP() if err != nil { panic(err) } generator := messagegenerator.NewValueMetricGenerator() writer := messagewriter.NewMessageWriter(ip, *dopplerIncomingDropsondePort, sharedSecret, reporter.SentCounter()) reader := websocketmessagereader.New(fmt.Sprintf("%s:%d", ip, *dopplerOutgoingPort), reporter.ReceivedCounter()) defer reader.Close() writeStrategy := writestrategies.NewConstantWriteStrategy(generator, writer, *writeRate) exp := experiment.NewExperiment(reader) exp.AddWriteStrategy(writeStrategy) exp.Warmup() go reporter.Start() go exp.Start() timer := time.NewTimer(stopAfterDuration) <-timer.C exp.Stop() reporter.Stop() }
"net/http/httptest" "time" "tools/benchmark/metricsreporter" "github.com/cloudfoundry/loggregatorlib/loggertesthelper" "github.com/cloudfoundry/loggregatorlib/server/handlers" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("Websocketmessagereader", func() { It("connects to a websocket endpoint", func() { sentMessage := "a message" messages := make(chan []byte, 1) wsh := handlers.NewWebsocketHandler(messages, time.Second, loggertesthelper.Logger()) server := httptest.NewServer(wsh) defer server.Close() messages <- []byte(sentMessage) receivedCounter := metricsreporter.NewCounter("counter") reader := websocketmessagereader.New(server.Listener.Addr().String(), receivedCounter) reader.Read() Eventually(receivedCounter.GetValue).Should(BeEquivalentTo(1)) }) })
import ( "tools/dopplerbenchmark/websocketmessagereader" "github.com/cloudfoundry/loggregatorlib/loggertesthelper" "github.com/cloudfoundry/loggregatorlib/server/handlers" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "net/http/httptest" "time" ) var _ = Describe("Websocketmessagereader", func() { It("connects to a websocket endpoint", func() { sentMessage := "a message" messages := make(chan []byte, 1) wsh := handlers.NewWebsocketHandler(messages, time.Second, loggertesthelper.Logger()) server := httptest.NewServer(wsh) defer server.Close() messages <- []byte(sentMessage) reader := websocketmessagereader.New(server.Listener.Addr().String()) Eventually(reader.ReadAndReturn).Should(BeEquivalentTo(sentMessage)) }) })