Esempio n. 1
0
// Handler for group versions summarizer.
func (ds *discoverySummarizerServer) summarizeGroupVersionsHandler(path string) func(http.ResponseWriter, *http.Request) {
	return func(w http.ResponseWriter, r *http.Request) {
		var apiGroupList *unversioned.APIGroupList
		// TODO: We can cache and parallelize the calls to all servers.
		for _, serverAddress := range ds.groupVersionPaths[path] {
			groupList, err := ds.getAPIGroupList(serverAddress + path)
			if err != nil {
				ds.writeErr(http.StatusBadGateway, err, w)
				return
			}
			if apiGroupList == nil {
				apiGroupList = &unversioned.APIGroupList{}
				*apiGroupList = *groupList
			} else {
				apiGroupList.Groups = append(apiGroupList.Groups, groupList.Groups...)
			}
		}
		ds.writeRawJSON(http.StatusOK, *apiGroupList, w)
		return
	}
}
Esempio n. 2
0
// Handler for group versions summarizer.
func (ds *discoverySummarizerServer) summarizeGroupVersionsHandler(path string) func(http.ResponseWriter, *http.Request) {
	return func(w http.ResponseWriter, r *http.Request) {
		var apiGroupList *unversioned.APIGroupList
		// TODO: We can cache calls to all servers.
		groups := make(chan *unversioned.APIGroupList)
		errorChannel := make(chan error)
		for _, serverAddress := range ds.groupVersionPaths[path] {
			addr := serverAddress
			go func(groups chan *unversioned.APIGroupList, error_channel chan error) {
				groupList, err := ds.getAPIGroupList(addr + path)
				if err != nil {
					errorChannel <- err
					return
				}
				groups <- groupList
				return
			}(groups, errorChannel)
		}

		var groupList *unversioned.APIGroupList
		var err error
		for range ds.groupVersionPaths[path] {
			select {
			case groupList = <-groups:
				if apiGroupList == nil {
					apiGroupList = &unversioned.APIGroupList{}
					*apiGroupList = *groupList
				} else {
					apiGroupList.Groups = append(apiGroupList.Groups, groupList.Groups...)
				}
			case err = <-errorChannel:
				ds.writeErr(http.StatusBadGateway, err, w)
				return
			}
		}

		ds.writeRawJSON(http.StatusOK, *apiGroupList, w)
		return
	}
}