import (
"fmt"
"strconv"
+ "strings"
"gerrit.automotivelinux.org/gerrit/src/xds/xds-agent/lib/xaapiv1"
"gerrit.automotivelinux.org/gerrit/src/xds/xds-agent/lib/xdsconfig"
} 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
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)
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 ""
+}