github.com/altipla-consulting/ravendb-go-client@v0.1.3/cluster_topology.go (about)

     1  package ravendb
     2  
     3  // ClusterTopology is a part of ClusterTopologyResponse
     4  // TODO: should be private?
     5  type ClusterTopology struct {
     6  	LastNodeID string `json:"LastNodeId"`
     7  	TopologyID string `json:"TopologyId"`
     8  
     9  	// Those map name like A to server url like http://localhost:9999
    10  	Members     map[string]string `json:"Members"`
    11  	Promotables map[string]string `json:"Promotables"`
    12  	Watchers    map[string]string `json:"Watchers"`
    13  }
    14  
    15  // contains returns true if topology contains a given node
    16  func (t *ClusterTopology) contains(node string) bool {
    17  	if t.Members != nil {
    18  		if _, ok := t.Members[node]; ok {
    19  			return true
    20  		}
    21  	}
    22  
    23  	if t.Promotables != nil {
    24  		if _, ok := t.Promotables[node]; ok {
    25  			return true
    26  		}
    27  	}
    28  
    29  	if t.Watchers != nil {
    30  		if _, ok := t.Watchers[node]; ok {
    31  			return true
    32  		}
    33  	}
    34  
    35  	return false
    36  }
    37  
    38  func (t *ClusterTopology) getUrlFromTag(tag string) string {
    39  	if tag == "" {
    40  		return ""
    41  	}
    42  
    43  	if t.Members != nil {
    44  		if v, ok := t.Members[tag]; ok {
    45  			return v
    46  		}
    47  	}
    48  
    49  	if t.Promotables != nil {
    50  		if v, ok := t.Promotables[tag]; ok {
    51  			return v
    52  		}
    53  	}
    54  
    55  	if t.Watchers != nil {
    56  		if v, ok := t.Watchers[tag]; ok {
    57  			return v
    58  		}
    59  	}
    60  
    61  	return ""
    62  }
    63  
    64  // getAllNodes returns all nodes
    65  func (t *ClusterTopology) getAllNodes() map[string]string {
    66  	res := map[string]string{}
    67  	for name, uri := range t.Members {
    68  		res[name] = uri
    69  	}
    70  	for name, uri := range t.Promotables {
    71  		res[name] = uri
    72  	}
    73  	for name, uri := range t.Watchers {
    74  		res[name] = uri
    75  	}
    76  	return res
    77  }