func (o *Observation) Combine(other *Observation) *Observation {
	return &Observation{
		ReplicaSets: append(o.ReplicaSets, other.ReplicaSets...),
	}
}
Combine merges two Observations into a new Observation
package observe
type IntStat struct {
	Min   int32
	Max   int32
	Sum   int32
	Count int32
}
func (s *IntStat) Record(n int32) {
	if s.Count == 0 || s.Min > n {
		s.Min = n
	}
	if s.Max < n {
		s.Max = n
	}
	s.Sum += n
	s.Count++
}
type DeploymentInfo struct {
	Desired IntStat
	Current IntStat
}
type DeploymentInfoSet struct {
	Live    *DeploymentInfo
	Standby *DeploymentInfo
}
func NewDeploymentInfoSet() *DeploymentInfoSet {
	return &DeploymentInfoSet{
		Live:    &DeploymentInfo{},
		Standby: &DeploymentInfo{},
	}
}
func (dis *DeploymentInfoSet) GetInfo(liveness bool) *DeploymentInfo {
	if liveness {
		return dis.Live
	}
	return dis.Standby
}
type Cluster struct {
	Name string
	Live bool
}
type replicaSet struct {
	Desired int32
	Current int32
	Tag     string
	Cluster Cluster
}
type Observation struct {
	ReplicaSets []replicaSet
}
func (o *Observation) Count(liveness bool) int {
	nameSet := map[string]bool{}
	for i := range o.ReplicaSets {
		cluster := o.ReplicaSets[i].Cluster
		if cluster.Live == liveness {
			nameSet[cluster.Name] = true
		}
	}
	return len(nameSet)
}