github.com/Financial-Times/publish-availability-monitor@v1.12.0/envs/environments.go (about) 1 package envs 2 3 import ( 4 "sync" 5 ) 6 7 // Environment defines an environment in which the publish metrics should be checked 8 type Environment struct { 9 Name string `json:"name"` 10 ReadURL string `json:"read-url"` 11 Username string `json:"username"` 12 Password string `json:"password"` 13 } 14 15 // Environments provides a thread-safe collection of Environment structs 16 type Environments struct { 17 mu *sync.RWMutex 18 envMap map[string]Environment 19 ready bool 20 } 21 22 func NewEnvironments() *Environments { 23 return &Environments{ 24 mu: &sync.RWMutex{}, 25 envMap: make(map[string]Environment), 26 ready: false, 27 } 28 } 29 30 func (e *Environments) Len() int { 31 e.mu.RLock() 32 defer e.mu.RUnlock() 33 return len(e.envMap) 34 } 35 36 func (e *Environments) Names() []string { 37 e.mu.RLock() 38 defer e.mu.RUnlock() 39 40 names := make([]string, e.Len()) 41 42 i := 0 43 for name := range e.envMap { 44 names[i] = name 45 i++ 46 } 47 48 return names 49 } 50 51 func (e *Environments) Values() []Environment { 52 e.mu.RLock() 53 defer e.mu.RUnlock() 54 55 vals := make([]Environment, e.Len()) 56 57 i := 0 58 for _, val := range e.envMap { 59 vals[i] = val 60 i++ 61 } 62 63 return vals 64 } 65 66 func (e *Environments) SetEnvironment(name string, env Environment) { 67 e.mu.Lock() 68 defer e.mu.Unlock() 69 e.envMap[name] = env 70 } 71 72 func (e *Environments) RemoveEnvironment(name string) { 73 e.mu.Lock() 74 defer e.mu.Unlock() 75 delete(e.envMap, name) 76 } 77 78 func (e *Environments) Environment(name string) Environment { 79 e.mu.RLock() 80 defer e.mu.RUnlock() 81 return e.envMap[name] 82 } 83 84 func (e *Environments) SetReady(val bool) { 85 e.mu.Lock() 86 defer e.mu.Unlock() 87 e.ready = val 88 } 89 90 func (e *Environments) AreReady() bool { 91 e.mu.RLock() 92 defer e.mu.RUnlock() 93 return e.ready 94 }