diff --git a/gemini/workerStatus.go b/common/workerStatus.go similarity index 100% rename from gemini/workerStatus.go rename to common/workerStatus.go diff --git a/hostPool/hostPool.go b/hostPool/hostPool.go new file mode 100644 index 0000000..317f488 --- /dev/null +++ b/hostPool/hostPool.go @@ -0,0 +1,32 @@ +package gemini + +import ( + "sync" +) + +var ipPool = IpAddressPool{IPs: make(map[string]int)} //nolint:gochecknoglobals +var hostPool = HostPool{hostnames: make(map[string]struct{})} //nolint:gochecknoglobals + +type HostPool struct { + hostnames map[string]struct{} + Lock sync.RWMutex +} + +func (p *HostPool) Add(key string) { + p.Lock.Lock() + defer p.Lock.Unlock() + p.hostnames[key] = struct{}{} +} + +func (p *HostPool) Get(key string) bool { + p.Lock.RLock() + defer p.Lock.RUnlock() + _, ok := p.hostnames[key] + return ok +} + +func (p *HostPool) Delete(key string) { + p.Lock.Lock() + defer p.Lock.Unlock() + delete(p.hostnames, key) +}