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  }