code: func (s *server) GetSite(name string) (RemoteSite, error) {
  	s.RLock()
  	defer s.RUnlock()
  	for i := range s.remoteSites {
  		if s.remoteSites[i].GetName() == name {
  			return s.remoteSites[i], nil
  		}
  	}
  	for i := range s.localSites {
  		if s.localSites[i].GetName() == name {
  			return s.localSites[i], nil
  		}
  	}
  	for i := range s.clusterPeers {
  		if s.clusterPeers[i].GetName() == name {
  			return s.clusterPeers[i], nil
  		}
  	}
  	return nil, trace.NotFound("cluster %q is not found", name)
  }
docs: // GetSite returns a RemoteSite. The first attempt is to find and return a
  // remote site and that is what is returned if a remote remote agent has
  // connected to this proxy. Next we loop over local sites and try and try and
  // return a local site. If that fails, we return a cluster peer. This happens
  // when you hit proxy that has never had an agent connect to it. If you end up
  // with a cluster peer your best bet is to wait until the agent has discovered
  // all proxies behind a the load balancer. Note, the cluster peer is a
  // services.TunnelConnection that was created by another proxy.