github.com/ravendb/ravendb-go-client@v0.0.0-20240229102137-4474ee7aa0fa/cluster_topology.go (about) 1 package ravendb 2 3 // ClusterTopology is a part of ClusterTopologyResponse 4 type ClusterTopology struct { 5 TopologyID string `json:"TopologyId"` 6 AllNodes map[string]string `json:"AllNodes"` 7 // Those map name like A to server url like http://localhost:9999 8 Members map[string]string `json:"Members"` 9 Promotables map[string]string `json:"Promotables"` 10 Watchers map[string]string `json:"Watchers"` 11 LastNodeId string `json:"LastNodeId"` 12 Etag int `json:"Etag"` 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 }