diff --git a/.gitignore b/.gitignore index fef539d2..27349079 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ gen/thrift/js gen/thrift/py vendor/ crossdock-main +crossdock/jaeger-docker-compose.yml diff --git a/crossdock/Dockerfile b/crossdock/Dockerfile index ae8284f1..53550c67 100644 --- a/crossdock/Dockerfile +++ b/crossdock/Dockerfile @@ -1,4 +1,10 @@ FROM scratch + ADD crossdock / -CMD ["/crossdock"] + +ENV AGENT_HOST_PORT=jaeger-agent:5775 +ENV SAMPLING_SEVER_URL=http://test_driver:5778/sampling + EXPOSE 8080-8082 + +CMD ["/crossdock"] diff --git a/crossdock/docker-compose.yml b/crossdock/docker-compose.yml index bc0c85af..f67b08d6 100644 --- a/crossdock/docker-compose.yml +++ b/crossdock/docker-compose.yml @@ -40,32 +40,21 @@ services: image: jaegertracing/xdock-java ports: - "8080-8082" + links: + - "jaeger-agent:test_driver" python: image: jaegertracing/xdock-py ports: - "8080:8082" - - cassandra: - image: "cassandra:3.9" + links: + - "jaeger-agent:test_driver" test_driver: image: jaegertracing/test-driver - links: - - cassandra depends_on: - - cassandra + - jaeger-query + - jaeger-collector + - jaeger-agent ports: - "8080" - -# node: -# image: yarpc/yarpc-node -# ports: -# - "8080-8082" -# -# python-sync: -# image: yarpc/yarpc-python -# ports: -# - 8080 -# environment: -# - SYNC=1 diff --git a/crossdock/endtoend/handler.go b/crossdock/endtoend/handler.go index 837c3235..aef6482c 100644 --- a/crossdock/endtoend/handler.go +++ b/crossdock/endtoend/handler.go @@ -35,14 +35,12 @@ var ( endToEndConfig = config.Configuration{ Disabled: false, Sampler: &config.SamplerConfig{ - Type: defaultSamplerType, - Param: 1.0, - SamplingServerURL: "http://test_driver:5778/sampling", + Type: defaultSamplerType, + Param: 1.0, SamplingRefreshInterval: 5 * time.Second, }, Reporter: &config.ReporterConfig{ BufferFlushInterval: time.Second, - LocalAgentHostPort: "test_driver:5775", }, } ) @@ -65,7 +63,9 @@ var ( type Handler struct { sync.RWMutex - tracers map[string]opentracing.Tracer + tracers map[string]opentracing.Tracer + agentHostPort string + samplingServerURL string } type traceRequest struct { @@ -76,14 +76,22 @@ type traceRequest struct { } // NewHandler returns a Handler. -func NewHandler() *Handler { +func NewHandler(agentHostPort string, samplingServerURL string) *Handler { return &Handler{ - tracers: make(map[string]opentracing.Tracer), + agentHostPort: agentHostPort, + samplingServerURL: samplingServerURL, + tracers: make(map[string]opentracing.Tracer), } } // init initializes the handler with a tracer func (h *Handler) init(cfg config.Configuration) error { + if cfg.Sampler != nil && cfg.Sampler.SamplingServerURL == "" { + cfg.Sampler.SamplingServerURL = h.samplingServerURL + } + if cfg.Reporter != nil && cfg.Reporter.LocalAgentHostPort == "" { + cfg.Reporter.LocalAgentHostPort = h.agentHostPort + } tracer, _, err := cfg.New(common.DefaultTracerServiceName) if err != nil { return err diff --git a/crossdock/endtoend/handler_test.go b/crossdock/endtoend/handler_test.go index 48b4068f..08e15ed8 100644 --- a/crossdock/endtoend/handler_test.go +++ b/crossdock/endtoend/handler_test.go @@ -99,13 +99,13 @@ func newInMemoryTracer() (opentracing.Tracer, *jaeger.InMemoryReporter) { } func TestInit(t *testing.T) { - handler := NewHandler() + handler := NewHandler("", "") err := handler.init(testConfig) assert.NoError(t, err) } func TestInitBadConfig(t *testing.T) { - handler := NewHandler() + handler := NewHandler("", "") err := handler.init(badConfig) assert.Error(t, err) } @@ -118,7 +118,7 @@ func TestGetTracer(t *testing.T) { } func TestGetTracerError(t *testing.T) { - handler := NewHandler() + handler := NewHandler("", "") tracer := handler.getTracer("INVALID_TYPE") assert.Nil(t, tracer) } @@ -132,8 +132,8 @@ func TestGenerateTraces(t *testing.T) { handler *Handler }{ {http.StatusOK, testTraceJSONRequest, &Handler{tracers: map[string]opentracing.Tracer{jaeger.SamplerTypeConst: tracer}}}, - {http.StatusBadRequest, testInvalidJSON, NewHandler()}, - {http.StatusInternalServerError, testInvalidTypeJSONRequest, NewHandler()}, // Tracer failed to initialize + {http.StatusBadRequest, testInvalidJSON, NewHandler("", "")}, + {http.StatusInternalServerError, testInvalidTypeJSONRequest, NewHandler("", "")}, // Tracer failed to initialize } for _, test := range tests { diff --git a/crossdock/main.go b/crossdock/main.go index 6bf47708..b8aa3ca8 100644 --- a/crossdock/main.go +++ b/crossdock/main.go @@ -16,6 +16,7 @@ package main import ( "io" + "os" "github.com/opentracing/opentracing-go" @@ -30,10 +31,19 @@ import ( func main() { log.Enabled = true + agentHostPort, ok := os.LookupEnv("AGENT_HOST_PORT") + if !ok { + jlog.StdLogger.Error("env AGENT_HOST_PORT is not specified!") + } + sServerURL, ok := os.LookupEnv("SAMPLING_SERVER_URL") + if !ok { + jlog.StdLogger.Error("env SAMPLING_SEVER_URL is not specified!") + } + tracer, tCloser := initTracer() defer tCloser.Close() - s := &server.Server{Tracer: tracer} + s := &server.Server{Tracer: tracer, SamplingServerURL: sServerURL, AgentHostPort: agentHostPort} if err := s.Start(); err != nil { panic(err.Error()) } else { diff --git a/crossdock/rules.mk b/crossdock/rules.mk index 30ddfe47..02822c45 100644 --- a/crossdock/rules.mk +++ b/crossdock/rules.mk @@ -1,25 +1,32 @@ XDOCK_YAML=crossdock/docker-compose.yml +JAEGER_COMPOSE_URL=https://raw.githubusercontent.com/jaegertracing/jaeger/master/docker-compose/jaeger-docker-compose.yml +XDOCK_JAEGER_YAML=crossdock/jaeger-docker-compose.yml + .PHONY: crossdock-linux-bin crossdock-linux-bin: CGO_ENABLED=0 GOOS=linux time go build -a -installsuffix cgo -o crossdock/crossdock ./crossdock .PHONY: crossdock -crossdock: crossdock-linux-bin - docker-compose -f $(XDOCK_YAML) kill go - docker-compose -f $(XDOCK_YAML) rm -f go - docker-compose -f $(XDOCK_YAML) build go - docker-compose -f $(XDOCK_YAML) run crossdock 2>&1 | tee run-crossdock.log +crossdock: crossdock-linux-bin crossdock-download-jaeger + docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) kill go + docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) rm -f go + docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) build go + docker-compose -f $(XDOCK_YAML) -f $(XDOCK_JAEGER_YAML) run crossdock 2>&1 | tee run-crossdock.log grep 'Tests passed!' run-crossdock.log .PHONY: crossdock-fresh -crossdock-fresh: crossdock-linux-bin - docker-compose -f $(XDOCK_YAML) kill - docker-compose -f $(XDOCK_YAML) rm --force - docker-compose -f $(XDOCK_YAML) pull - docker-compose -f $(XDOCK_YAML) build - docker-compose -f $(XDOCK_YAML) run crossdock +crossdock-fresh: crossdock-linux-bin crossdock-download-jaeger + docker-compose -f $(XDOCK_JAEGER_YAML) -f $(XDOCK_YAML) kill + docker-compose -f $(XDOCK_JAEGER_YAML) -f $(XDOCK_YAML) rm --force + docker-compose -f $(XDOCK_JAEGER_YAML) -f $(XDOCK_YAML) pull + docker-compose -f $(XDOCK_JAEGER_YAML) -f $(XDOCK_YAML) build + docker-compose -f $(XDOCK_JAEGER_YAML) -f $(XDOCK_YAML) run crossdock .PHONE: crossdock-logs -crossdock-logs: - docker-compose -f $(XDOCK_YAML) logs +crossdock-logs: crossdock-download-jaeger + docker-compose -f $(XDOCK_JAEGER_YAML) -f $(XDOCK_YAML) logs + +.PHONY: crossdock-download-jaeger +crossdock-download-jaeger: + curl -o $(XDOCK_JAEGER_YAML) $(JAEGER_COMPOSE_URL) diff --git a/crossdock/server/server.go b/crossdock/server/server.go index a25b49d6..4758d088 100644 --- a/crossdock/server/server.go +++ b/crossdock/server/server.go @@ -36,12 +36,14 @@ import ( // Server implements S1-S3 servers type Server struct { - HostPortHTTP string - HostPortTChannel string - Tracer opentracing.Tracer - listener net.Listener - channel *tchannel.Channel - eHandler *endtoend.Handler + HostPortHTTP string + HostPortTChannel string + AgentHostPort string + SamplingServerURL string + Tracer opentracing.Tracer + listener net.Listener + channel *tchannel.Channel + eHandler *endtoend.Handler } // Start starts the test server called by the Client and other upstream servers. @@ -56,7 +58,7 @@ func (s *Server) Start() error { if err := s.startTChannelServer(s.Tracer); err != nil { return err } - s.eHandler = endtoend.NewHandler() + s.eHandler = endtoend.NewHandler(s.AgentHostPort, s.SamplingServerURL) mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { return }) // health check