mirror of
				https://github.com/yggdrasil-network/yggdrasil-go.git
				synced 2025-11-04 11:15:07 +03:00 
			
		
		
		
	Sort dotgraph links by integer value
This commit is contained in:
		
							parent
							
								
									ab73e3cb90
								
							
						
					
					
						commit
						996a593fa2
					
				
					 2 changed files with 22 additions and 15 deletions
				
			
		| 
						 | 
					@ -605,9 +605,16 @@ func (a *admin) getResponse_dot() []byte {
 | 
				
			||||||
		name    string
 | 
							name    string
 | 
				
			||||||
		key     string
 | 
							key     string
 | 
				
			||||||
		parent  string
 | 
							parent  string
 | 
				
			||||||
 | 
							port    switchPort
 | 
				
			||||||
		options string
 | 
							options string
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	infos := make(map[string]nodeInfo)
 | 
						infos := make(map[string]nodeInfo)
 | 
				
			||||||
 | 
						// Get coords as a slice of strings, FIXME? this looks very fragile
 | 
				
			||||||
 | 
						coordSlice := func(coords string) []string {
 | 
				
			||||||
 | 
							tmp := strings.Replace(coords, "[", "", -1)
 | 
				
			||||||
 | 
							tmp = strings.Replace(tmp, "]", "", -1)
 | 
				
			||||||
 | 
							return strings.Split(tmp, " ")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	// First fill the tree with all known nodes, no parents
 | 
						// First fill the tree with all known nodes, no parents
 | 
				
			||||||
	addInfo := func(nodes []admin_nodeInfo, options string, tag string) {
 | 
						addInfo := func(nodes []admin_nodeInfo, options string, tag string) {
 | 
				
			||||||
		for _, node := range nodes {
 | 
							for _, node := range nodes {
 | 
				
			||||||
| 
						 | 
					@ -621,6 +628,14 @@ func (a *admin) getResponse_dot() []byte {
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				info.name = n["ip"].(string)
 | 
									info.name = n["ip"].(string)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
								coordsSplit := coordSlice(info.key)
 | 
				
			||||||
 | 
								if len(coordsSplit) != 0 {
 | 
				
			||||||
 | 
									portStr := coordsSplit[len(coordsSplit)-1]
 | 
				
			||||||
 | 
									portUint, err := strconv.ParseUint(portStr, 10, 64)
 | 
				
			||||||
 | 
									if err == nil {
 | 
				
			||||||
 | 
										info.port = switchPort(portUint)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			infos[info.key] = info
 | 
								infos[info.key] = info
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -628,12 +643,6 @@ func (a *admin) getResponse_dot() []byte {
 | 
				
			||||||
	addInfo(sessions, "fillcolor=\"#acf3fd\" style=filled fontname=\"sans serif\"", "Open session")                          // blue
 | 
						addInfo(sessions, "fillcolor=\"#acf3fd\" style=filled fontname=\"sans serif\"", "Open session")                          // blue
 | 
				
			||||||
	addInfo(peers, "fillcolor=\"#ffffb5\" style=filled fontname=\"sans serif\"", "Connected peer")                           // yellow
 | 
						addInfo(peers, "fillcolor=\"#ffffb5\" style=filled fontname=\"sans serif\"", "Connected peer")                           // yellow
 | 
				
			||||||
	addInfo(append([]admin_nodeInfo(nil), *self), "fillcolor=\"#a5ff8a\" style=filled fontname=\"sans serif\"", "This node") // green
 | 
						addInfo(append([]admin_nodeInfo(nil), *self), "fillcolor=\"#a5ff8a\" style=filled fontname=\"sans serif\"", "This node") // green
 | 
				
			||||||
	// Get coords as a slice of strings, FIXME? this looks very fragile
 | 
					 | 
				
			||||||
	coordSlice := func(coords string) []string {
 | 
					 | 
				
			||||||
		tmp := strings.Replace(coords, "[", "", -1)
 | 
					 | 
				
			||||||
		tmp = strings.Replace(tmp, "]", "", -1)
 | 
					 | 
				
			||||||
		return strings.Split(tmp, " ")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Now go through and create placeholders for any missing nodes
 | 
						// Now go through and create placeholders for any missing nodes
 | 
				
			||||||
	for _, info := range infos {
 | 
						for _, info := range infos {
 | 
				
			||||||
		// This is ugly string manipulation
 | 
							// This is ugly string manipulation
 | 
				
			||||||
| 
						 | 
					@ -665,10 +674,12 @@ func (a *admin) getResponse_dot() []byte {
 | 
				
			||||||
		keys = append(keys, info.key)
 | 
							keys = append(keys, info.key)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	// sort
 | 
						// sort
 | 
				
			||||||
	less := func(i, j int) bool {
 | 
						sort.SliceStable(keys, func(i, j int) bool {
 | 
				
			||||||
		return keys[i] < keys[j]
 | 
							return keys[i] < keys[j]
 | 
				
			||||||
	}
 | 
						})
 | 
				
			||||||
	sort.Slice(keys, less)
 | 
						sort.SliceStable(keys, func(i, j int) bool {
 | 
				
			||||||
 | 
							return infos[keys[i]].port < infos[keys[j]].port
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
	// Now print it all out
 | 
						// Now print it all out
 | 
				
			||||||
	var out []byte
 | 
						var out []byte
 | 
				
			||||||
	put := func(s string) {
 | 
						put := func(s string) {
 | 
				
			||||||
| 
						 | 
					@ -686,11 +697,7 @@ func (a *admin) getResponse_dot() []byte {
 | 
				
			||||||
		if info.key == info.parent {
 | 
							if info.key == info.parent {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		} // happens for the root, skip it
 | 
							} // happens for the root, skip it
 | 
				
			||||||
		coordsSplit := coordSlice(key)
 | 
							port := fmt.Sprint(info.port)
 | 
				
			||||||
		if len(coordsSplit) == 0 {
 | 
					 | 
				
			||||||
			continue
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		port := coordsSplit[len(coordsSplit)-1]
 | 
					 | 
				
			||||||
		style := "fontname=\"sans serif\""
 | 
							style := "fontname=\"sans serif\""
 | 
				
			||||||
		if infos[info.parent].name == "?" || infos[info.key].name == "?" {
 | 
							if infos[info.parent].name == "?" || infos[info.key].name == "?" {
 | 
				
			||||||
			style = "fontname=\"sans serif\" style=dashed color=\"#999999\" fontcolor=\"#999999\""
 | 
								style = "fontname=\"sans serif\" style=dashed color=\"#999999\" fontcolor=\"#999999\""
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue