X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=lib%2Fagent%2Fapiv1.go;h=504558ec7cde11253dffa6c70e1c1ceb8e95ed7d;hb=ee66af78c42c4d7ff33f104415bc09d60dbdc27b;hp=1921f981b5d5b79c3cb073b55e183ebcae21f8ce;hpb=38e0baedab9da4516cdc97b526392cbc2c7da67e;p=src%2Fxds%2Fxds-agent.git diff --git a/lib/agent/apiv1.go b/lib/agent/apiv1.go index 1921f98..504558e 100644 --- a/lib/agent/apiv1.go +++ b/lib/agent/apiv1.go @@ -20,6 +20,7 @@ package agent import ( "fmt" "strconv" + "strings" "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent/lib/xaapiv1" "gerrit.automotivelinux.org/gerrit/src/xds/xds-agent/lib/xdsconfig" @@ -49,7 +50,7 @@ func NewAPIV1(ctx *Context) *APIService { s.apiRouter.GET("/config", s.getConfig) s.apiRouter.POST("/config", s.setConfig) - s.apiRouter.GET("/browse", s.browseFS) + // s.apiRouter.GET("/browse", s.browseFS) s.apiRouter.GET("/projects", s.getProjects) s.apiRouter.GET("/projects/:id", s.getProject) @@ -66,6 +67,9 @@ func NewAPIV1(ctx *Context) *APIService { s.apiRouter.POST("/events/register", s.eventsRegister) s.apiRouter.POST("/events/unregister", s.eventsUnRegister) + s.apiRouter.GET("/supervisor/topo", s.getSupervisorTopo) + s.apiRouter.POST("/supervisor/trace/start", s.startSupervisor) + s.apiRouter.POST("/supervisor/trace/stop", s.stopSupervisor) return s } @@ -99,12 +103,13 @@ func (s *APIService) AddXdsServer(cfg xdsconfig.XDSServerConf) (*XdsServer, erro } else { // Create a new server object + cfg.URLIndex = strconv.Itoa(s.serverIndex) + s.serverIndex = s.serverIndex + 1 if cfg.APIBaseURL == "" { cfg.APIBaseURL = apiBaseURL } if cfg.APIPartialURL == "" { - cfg.APIPartialURL = "/servers/" + strconv.Itoa(s.serverIndex) - s.serverIndex = s.serverIndex + 1 + cfg.APIPartialURL = "/servers/" + cfg.URLIndex } // Create a new XDS Server @@ -112,12 +117,18 @@ func (s *APIService) AddXdsServer(cfg xdsconfig.XDSServerConf) (*XdsServer, erro svr.SetLoggerOutput(s.Config.LogVerboseOut) - // Passthrough routes (handle by XDS Server) + // Define API group for this XDS Server grp := s.apiRouter.Group(svr.PartialURL) svr.SetAPIRouterGroup(grp) - // Declare passthrough routes + // Define servers API processed locally + s.apiRouter.GET("/servers", s.getServersList) // API /servers + svr.apiRouter.GET("", s.getServer) // API /servers/:id + svr.apiRouter.POST("/reconnect", s.reconnectServer) // API /servers/:id/reconnect + + // Declare passthrough API/routes s.sdksPassthroughInit(svr) + s.targetsPassthroughInit(svr) // Register callback on Connection svr.ConnectOn(func(server *XdsServer) error { @@ -125,9 +136,15 @@ func (s *APIService) AddXdsServer(cfg xdsconfig.XDSServerConf) (*XdsServer, erro // Add server to list s.xdsServers[server.ID] = svr - // Register event forwarder + // Register events forwarder if err := s.sdksEventsForwardInit(server); err != nil { - s.Log.Errorf("XDS Server %v - sdk event forwarding error: %v", server.ID, err) + s.Log.Errorf("XDS Server %v - sdk events forwarding error: %v", server.ID, err) + } + if err := s.targetsEventsForwardInit(server); err != nil { + s.Log.Errorf("XDS Server %v - target events forwarding error: %v", server.ID, err) + } + if err := s.terminalsEventsForwardInit(server); err != nil { + s.Log.Errorf("XDS Server %v - terminal events forwarding error: %v", server.ID, err) } // Load projects @@ -164,7 +181,6 @@ func (s *APIService) DelXdsServer(id string) error { s.xdsServers[id].Close() return nil } -} // UpdateXdsServer Update XDS Server configuration settings func (s *APIService) UpdateXdsServer(cfg xaapiv1.ServerCfg) error { @@ -179,3 +195,27 @@ func (s *APIService) UpdateXdsServer(cfg xaapiv1.ServerCfg) error { return nil } + +// GetXdsServerFromURLIndex Retrieve XdsServer from URLIndex value +func (s *APIService) GetXdsServerFromURLIndex(urlIdx string) *XdsServer { + for _, svr := range s.xdsServers { + if svr.URLIndex == urlIdx { + return svr + } + } + return nil +} + +// ParamGetIndex Retrieve numerical parameter in request url +func (s *APIService) ParamGetIndex(c *gin.Context) string { + uri := c.Request.RequestURI + for idx := strings.LastIndex(uri, "/"); idx > 0; { + id := uri[idx+1:] + if _, err := strconv.Atoi(id); err == nil { + return id + } + uri = uri[:idx] + idx = strings.LastIndex(uri, "/") + } + return "" +}