func (r *RouteFetcher) deleteEndpoints(validRoutes []db.Route) { var diff []db.Route for _, curRoute := range r.endpoints { routeFound := false for _, validRoute := range validRoutes { if routeEquals(curRoute, validRoute) { routeFound = true break } } if !routeFound { diff = append(diff, curRoute) r.endpoints = r.endpoints } } for _, aRoute := range diff { r.RouteRegistry.Unregister( route.Uri(aRoute.Route), route.NewEndpoint( aRoute.LogGuid, aRoute.IP, uint16(aRoute.Port), aRoute.LogGuid, nil, aRoute.TTL, aRoute.RouteServiceUrl, )) } }
func (r *Router) RegisterAllEndpoint() { eps := r.mbusClient.TotalEndPoints() r.logger.Infof("registry all eps: %v", eps) r.registry.RegisterAll( route.Uri(r.config.Domain), r.mbusClient.MakeRouteEndPoints(eps...), ) }
func registerAddr(reg *registry.RouteRegistry, path string, routeServiceUrl string, addr net.Addr, instanceId string) { host, portStr, err := net.SplitHostPort(addr.String()) Ω(err).NotTo(HaveOccurred()) port, err := strconv.Atoi(portStr) Ω(err).NotTo(HaveOccurred()) reg.Register(route.Uri(path), route.NewEndpoint("", host, uint16(port), instanceId, nil, -1, routeServiceUrl)) }
func (r *RouteFetcher) HandleEvent(e routing_api.Event) error { r.logger.Infof("Handling event: %v", e) eventRoute := e.Route uri := route.Uri(eventRoute.Route) endpoint := route.NewEndpoint(eventRoute.LogGuid, eventRoute.IP, uint16(eventRoute.Port), eventRoute.LogGuid, nil, eventRoute.TTL, eventRoute.RouteServiceUrl) switch e.Action { case "Delete": r.RouteRegistry.Unregister(uri, endpoint) case "Upsert": r.RouteRegistry.Register(uri, endpoint) } r.logger.Infof("Successfully handled event: %v", e) return nil }
func (r *Trie) toMap(segment string, m map[route.Uri]*route.Pool) map[route.Uri]*route.Pool { if r.Pool != nil { m[route.Uri(segment)] = r.Pool } for _, child := range r.ChildNodes { var newseg string if len(segment) == 0 { newseg = segment + child.Segment } else { newseg = segment + "/" + child.Segment } child.toMap(newseg, m) } return m }
func (r *RouteFetcher) refreshEndpoints(validRoutes []db.Route) { r.deleteEndpoints(validRoutes) r.endpoints = validRoutes for _, aRoute := range r.endpoints { r.RouteRegistry.Register( route.Uri(aRoute.Route), route.NewEndpoint( aRoute.LogGuid, aRoute.IP, uint16(aRoute.Port), aRoute.LogGuid, nil, aRoute.TTL, aRoute.RouteServiceUrl, )) } }
func (p *proxy) lookup(request *http.Request) *route.Pool { uri := route.Uri(hostWithoutPort(request) + request.RequestURI) // return p.registry.Lookup(uri) uri = route.Uri(p.fakedomain) return p.registry.Lookup(uri) }
proxyObj = proxy.NewProxy(proxy.ProxyArgs{ EndpointTimeout: conf.EndpointTimeout, Ip: conf.Ip, TraceKey: conf.TraceKey, Registry: r, Reporter: nullVarz{}, AccessLogger: fakeAccessLogger, SecureCookies: conf.SecureCookies, TLSConfig: tlsConfig, RouteServiceEnabled: conf.RouteServiceEnabled, RouteServiceTimeout: conf.RouteServiceTimeout, Crypto: crypto, CryptoPrev: cryptoPrev, }) r.Register(route.Uri("some-app"), &route.Endpoint{}) }) Context("Log response time", func() { It("logs response time for HTTP connections", func() { body := []byte("some body") req := test_util.NewRequest("GET", "some-app", "/", bytes.NewReader(body)) resp := httptest.NewRecorder() proxyObj.ServeHTTP(resp, req) Expect(fakeAccessLogger.LogCallCount()).To(Equal(1)) Expect(fakeAccessLogger.LogArgsForCall(0).FinishedAt).NotTo(Equal(time.Time{})) }) It("logs response time for TCP connections", func() { req := test_util.NewRequest("UPGRADE", "some-app", "/", nil)
conn.Close() }) }) }) Context("when the endpoint is nil", func() { It("responds with a 502 BadGateway", func() { ln := registerHandler(r, "nil-endpoint", func(conn *test_util.HttpConn) { conn.CheckLine("GET / HTTP/1.1") resp := test_util.NewResponse(http.StatusOK) conn.WriteResponse(resp) conn.Close() }) defer ln.Close() pool := r.Lookup(route.Uri("nil-endpoint")) endpoints := make([]*route.Endpoint, 0) pool.Each(func(e *route.Endpoint) { endpoints = append(endpoints, e) }) for _, e := range endpoints { pool.Remove(e) } conn := dialProxy(proxyServer) req := test_util.NewRequest("GET", "nil-endpoint", "/", nil) conn.WriteRequest(req) b := make([]byte, 0, 0) buf := bytes.NewBuffer(b)
var _ = Describe("AccessLogRecord", func() { Measure("Register", func(b Benchmarker) { c := config.DefaultConfig() mbus := fakeyagnats.Connect() r := registry.NewRouteRegistry(c, mbus, new(fakes.FakeRouteReporter)) accesslog, err := access_log.CreateRunningAccessLogger(c) Expect(err).ToNot(HaveOccurred()) proxy.NewProxy(proxy.ProxyArgs{ EndpointTimeout: c.EndpointTimeout, Ip: c.Ip, TraceKey: c.TraceKey, Registry: r, Reporter: varz.NewVarz(r), AccessLogger: accesslog, }) b.Time("RegisterTime", func() { for i := 0; i < 1000; i++ { str := strconv.Itoa(i) r.Register( route.Uri("bench.vcap.me."+str), route.NewEndpoint("", "localhost", uint16(i), "", nil, -1, ""), ) } }) }, 10) })
} }) It("updates the route registry", func() { client.RoutesReturns(response, nil) err := fetcher.FetchRoutes() Expect(err).ToNot(HaveOccurred()) Expect(registry.RegisterCallCount()).To(Equal(3)) for i := 0; i < 3; i++ { expectedRoute := response[i] uri, endpoint := registry.RegisterArgsForCall(i) Expect(uri).To(Equal(route.Uri(expectedRoute.Route))) Expect(endpoint).To(Equal( route.NewEndpoint(expectedRoute.LogGuid, expectedRoute.IP, uint16(expectedRoute.Port), expectedRoute.LogGuid, nil, expectedRoute.TTL, expectedRoute.RouteServiceUrl, ))) } }) It("removes unregistered routes", func() { secondResponse := []db.Route{ response[0], }