cluster.go 1.2 KB
Newer Older
qiuqunfeng's avatar
qiuqunfeng committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
package utils

import (
	"sync"

	"gitlab.com/tensorsecurity-rd/waf-console/pkg/generated/clientset/versioned"
)

type ClusterClientManager struct {
	clients map[string]*versioned.Clientset
}

func NewClusterClientManager() *ClusterClientManager {
	return &ClusterClientManager{
		clients: make(map[string]*versioned.Clientset),
	}
}

func (c *ClusterClientManager) GetClient(regionCode string) *versioned.Clientset {
	return c.clients[regionCode]
}

func (c *ClusterClientManager) AddClient(regionCode string, client *versioned.Clientset) {
	c.clients[regionCode] = client
}

func (c *ClusterClientManager) RemoveClient(regionCode string) {
	delete(c.clients, regionCode)
}

func (c *ClusterClientManager) GetAllClients() map[string]*versioned.Clientset {
	return c.clients
}

func (c *ClusterClientManager) GetClientByRegionCode(regionCode string) *versioned.Clientset {
	return c.clients[regionCode]
}

func (c *ClusterClientManager) ForEach(fn func(regionCode string, client *versioned.Clientset)) {
	wg := sync.WaitGroup{}
	for regionCode, client := range c.clients {
		wg.Add(1)
		go func(regionCode string, client *versioned.Clientset) {
			defer wg.Done()
			fn(regionCode, client)
		}(regionCode, client)
	}
	wg.Wait()
}