diff --git a/cluster/proxy/proxy.go b/cluster/proxy/proxy.go index d593676c..e9f36f0f 100644 --- a/cluster/proxy/proxy.go +++ b/cluster/proxy/proxy.go @@ -37,7 +37,7 @@ type ProxyReader interface { FindNodeFromProcess(id app.ProcessID) (string, error) Resources() map[string]NodeResources - ListProcesses(ProcessListOptions) map[string][]clientapi.Process + ListProcesses(ProcessListOptions) []clientapi.Process ListProxyProcesses() []Process ProbeProcess(nodeid string, id app.ProcessID) (clientapi.Probe, error) @@ -367,7 +367,7 @@ type ProcessListOptions struct { } func (p *proxy) ListProxyProcesses() []Process { - processChan := make(chan Process, 64) + processChan := make(chan []Process, 64) processList := []Process{} wgList := sync.WaitGroup{} @@ -376,8 +376,8 @@ func (p *proxy) ListProxyProcesses() []Process { go func() { defer wgList.Done() - for process := range processChan { - processList = append(processList, process) + for list := range processChan { + processList = append(processList, list...) } }() @@ -387,7 +387,7 @@ func (p *proxy) ListProxyProcesses() []Process { for _, node := range p.nodes { wg.Add(1) - go func(node Node, p chan<- Process) { + go func(node Node, p chan<- []Process) { defer wg.Done() processes, err := node.ProxyProcessList() @@ -395,9 +395,7 @@ func (p *proxy) ListProxyProcesses() []Process { return } - for _, process := range processes { - p <- process - } + p <- processes }(node, processChan) } p.nodesLock.RUnlock() @@ -432,14 +430,9 @@ func (p *proxy) FindNodeFromProcess(id app.ProcessID) (string, error) { return nodeid, nil } -type processList struct { - nodeid string - processes []clientapi.Process -} - -func (p *proxy) ListProcesses(options ProcessListOptions) map[string][]clientapi.Process { - processChan := make(chan processList, 64) - processMap := map[string][]clientapi.Process{} +func (p *proxy) ListProcesses(options ProcessListOptions) []clientapi.Process { + processChan := make(chan []clientapi.Process, 64) + processList := []clientapi.Process{} wgList := sync.WaitGroup{} wgList.Add(1) @@ -448,7 +441,7 @@ func (p *proxy) ListProcesses(options ProcessListOptions) map[string][]clientapi defer wgList.Done() for list := range processChan { - processMap[list.nodeid] = list.processes + processList = append(processList, list...) } }() @@ -458,7 +451,7 @@ func (p *proxy) ListProcesses(options ProcessListOptions) map[string][]clientapi for _, node := range p.nodes { wg.Add(1) - go func(node Node, p chan<- processList) { + go func(node Node, p chan<- []clientapi.Process) { defer wg.Done() processes, err := node.ProcessList(options) @@ -466,11 +459,7 @@ func (p *proxy) ListProcesses(options ProcessListOptions) map[string][]clientapi return } - p <- processList{ - nodeid: node.About().ID, - processes: processes, - } - + p <- processes }(node, processChan) } p.nodesLock.RUnlock() @@ -481,7 +470,7 @@ func (p *proxy) ListProcesses(options ProcessListOptions) map[string][]clientapi wgList.Wait() - return processMap + return processList } func (p *proxy) AddProcess(nodeid string, config *app.Config, metadata map[string]interface{}) error { diff --git a/http/handler/api/cluster_process.go b/http/handler/api/cluster_process.go index fc73a19a..6ab4e14b 100644 --- a/http/handler/api/cluster_process.go +++ b/http/handler/api/cluster_process.go @@ -50,7 +50,7 @@ func (h *ClusterHandler) GetAllProcesses(c echo.Context) error { ownerpattern := util.DefaultQuery(c, "ownerpattern", "") domainpattern := util.DefaultQuery(c, "domainpattern", "") - procsMap := h.proxy.ListProcesses(proxy.ProcessListOptions{ + procs := h.proxy.ListProcesses(proxy.ProcessListOptions{ ID: wantids, Filter: filter.Slice(), Domain: domain, @@ -64,15 +64,13 @@ func (h *ClusterHandler) GetAllProcesses(c echo.Context) error { processes := []clientapi.Process{} pmap := map[app.ProcessID]struct{}{} - for _, procs := range procsMap { - for _, p := range procs { - if !h.iam.Enforce(ctxuser, domain, "process:"+p.ID, "read") { - continue - } - - processes = append(processes, p) - pmap[app.NewProcessID(p.ID, p.Domain)] = struct{}{} + for _, p := range procs { + if !h.iam.Enforce(ctxuser, domain, "process:"+p.ID, "read") { + continue } + + processes = append(processes, p) + pmap[app.NewProcessID(p.ID, p.Domain)] = struct{}{} } missing := []api.Process{} @@ -319,18 +317,12 @@ func (h *ClusterHandler) GetProcess(c echo.Context) error { return api.Err(http.StatusForbidden, "") } - procsMap := h.proxy.ListProcesses(proxy.ProcessListOptions{ + procs := h.proxy.ListProcesses(proxy.ProcessListOptions{ ID: []string{id}, Filter: filter.Slice(), Domain: domain, }) - procs := []clientapi.Process{} - - for _, processes := range procsMap { - procs = append(procs, processes...) - } - if len(procs) == 0 { // Check the store in the store for an undeployed process p, err := h.cluster.GetProcess(app.NewProcessID(id, domain))