diff --git a/main.go b/main.go index fcadab3..706126b 100644 --- a/main.go +++ b/main.go @@ -23,39 +23,25 @@ type HomeserverServerVersionInfo struct { ServerVersionInfo fclient.Version } -type MaxRoomVersionPath struct { - RoomID id.RoomID - MaxRoomVersion string -} - -type ServerPath struct { - RoomID id.RoomID - MaxRoomVersion string - Server string -} - -type VersionPath struct { - RoomID id.RoomID - MaxRoomVersion string - Server string - Version string -} - type RoomInfoTree map[id.RoomID](*RoomInfo) type RoomInfo struct { + MemberCount uint MaxRoomVersions map[string](*MaxRoomVersionInfo) } type MaxRoomVersionInfo struct { - Servers map[string](*ServerInfo) + MemberCount uint + Servers map[string](*ServerInfo) } type ServerInfo struct { - Versions map[string](*VersionInfo) + MemberCount uint + Versions map[string](*VersionInfo) } type VersionInfo struct { + MemberCount uint Homeservers map[string](*HomeserverInfo) } @@ -385,11 +371,6 @@ func main() { // Info map tree. roomInfoTree := make(RoomInfoTree) - // Member counters. - membersByRoomID := make(map[id.RoomID]uint) - membersByMaxRoomVersion := make(map[MaxRoomVersionPath]uint) - membersByServerPath := make(map[ServerPath]uint) - membersByVersionPath := make(map[VersionPath]uint) for roomID, membersByHomeserver := range membersByHomeserverByRoomID { for hs, members := range membersByHomeserver { @@ -397,13 +378,7 @@ func main() { maxRoomVersion := getMaxRoomVersion(serverVersionInfo) - // Add to counters. - membersByRoomID[roomID] += members - membersByMaxRoomVersion[MaxRoomVersionPath{roomID, maxRoomVersion}] += members - membersByServerPath[ServerPath{roomID, maxRoomVersion, serverVersionInfo.Server.Name}] += members - membersByVersionPath[VersionPath{roomID, maxRoomVersion, serverVersionInfo.Server.Name, serverVersionInfo.Server.Version}] += members - - // Sort into roomInfoTree. + // Sort into roomInfoTree and add to counters. roomInfo, ok := roomInfoTree[roomID] if !ok { roomInfo = &RoomInfo{MaxRoomVersions: make(map[string]*MaxRoomVersionInfo)} @@ -429,13 +404,18 @@ func main() { homeserverInfo = &HomeserverInfo{} versionInfo.Homeservers[hs] = homeserverInfo } + homeserverInfo.MemberCount = members + versionInfo.MemberCount += members + serverInfo.MemberCount += members + maxRoomVersionInfo.MemberCount += members + roomInfo.MemberCount += members } } for roomID, roomInfo := range roomInfoTree { fmt.Println("Room:") - fmt.Printf(" %s -> %d\n", givenRoomsByRoomID[roomID], membersByRoomID[roomID]) + fmt.Printf(" %s -> %d\n", givenRoomsByRoomID[roomID], roomInfo.MemberCount) fmt.Println("Version Support:") @@ -447,7 +427,7 @@ func main() { for _, maxRoomVersionKey := range maxRoomVersionKeys { maxRoomVersionInfo := roomInfo.MaxRoomVersions[maxRoomVersionKey] - fmt.Printf(" %s -> %d\n", maxRoomVersionKey, membersByMaxRoomVersion[MaxRoomVersionPath{roomID, maxRoomVersionKey}]) + fmt.Printf(" %s -> %d\n", maxRoomVersionKey, maxRoomVersionInfo.MemberCount) serverKeys := make([]string, 0, len(maxRoomVersionInfo.Servers)) for key := range maxRoomVersionInfo.Servers { @@ -457,7 +437,7 @@ func main() { for _, serverKey := range serverKeys { serverInfo := maxRoomVersionInfo.Servers[serverKey] - fmt.Printf(" %s -> %d\n", serverKey, membersByServerPath[ServerPath{roomID, maxRoomVersionKey, serverKey}]) + fmt.Printf(" %s -> %d\n", serverKey, serverInfo.MemberCount) versionKeys := make([]string, 0, len(serverInfo.Versions)) for key := range serverInfo.Versions { @@ -467,7 +447,7 @@ func main() { for _, versionKey := range versionKeys { versionInfo := serverInfo.Versions[versionKey] - fmt.Printf(" %s -> %d\n", versionKey, membersByVersionPath[VersionPath{roomID, maxRoomVersionKey, serverKey, versionKey}]) + fmt.Printf(" %s -> %d\n", versionKey, versionInfo.MemberCount) if config.PrintHomeserverMemberCount { homeserverKeys := make([]string, 0, len(versionInfo.Homeservers))