diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java index fd7c76d07..5ae1ad998 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java @@ -85,16 +85,21 @@ public class NetworkContainer extends DataContainer { putSupplier(NetworkKeys.NETWORK_PLAYER_ONLINE_DATA, () -> dbSystem.getDatabase().fetch().getPlayersOnlineForServers( getValue(NetworkKeys.BUKKIT_SERVERS).orElse(new ArrayList<>())) ); + putSupplier(NetworkKeys.SERVER_REGISTER_DATA, () -> dbSystem.getDatabase().fetch().getPlayersRegisteredForServers( + getValue(NetworkKeys.BUKKIT_SERVERS).orElse(new ArrayList<>())) + ); putSupplier(NetworkKeys.SERVERS_TAB, () -> { StringBuilder serverBoxes = new StringBuilder(); Map> playersOnlineData = getValue(NetworkKeys.NETWORK_PLAYER_ONLINE_DATA).orElse(new HashMap<>()); + Map registerData = getValue(NetworkKeys.SERVER_REGISTER_DATA).orElse(new HashMap<>()); getValue(NetworkKeys.BUKKIT_SERVERS).orElse(new ArrayList<>()) .stream() .sorted((one, two) -> String.CASE_INSENSITIVE_ORDER.compare(one.getName(), two.getName())) .forEach(server -> { - TPSMutator tpsMutator = new TPSMutator(playersOnlineData.getOrDefault(server.getId(), new ArrayList<>())); - // TODO Add Registered players per server. - NetworkServerBox serverBox = new NetworkServerBox(server, 0, tpsMutator, graphs); + int serverId = server.getId(); + TPSMutator tpsMutator = new TPSMutator(playersOnlineData.getOrDefault(serverId, new ArrayList<>())); + int registered = registerData.getOrDefault(serverId, 0); + NetworkServerBox serverBox = new NetworkServerBox(server, registered, tpsMutator, graphs); serverBoxes.append(serverBox.toHtml()); }); return serverBoxes.toString(); diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/keys/NetworkKeys.java b/Plan/src/main/java/com/djrapitops/plan/data/store/keys/NetworkKeys.java index f5519f29d..c8a577a0f 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/keys/NetworkKeys.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/keys/NetworkKeys.java @@ -58,6 +58,7 @@ public class NetworkKeys { public static final Key> BUKKIT_SERVERS = new Key<>(new Type>() {}, "BUKKIT_SERVERS"); public static final Key>>> ACTIVITY_DATA = CommonKeys.ACTIVITY_DATA; public static final Key>> NETWORK_PLAYER_ONLINE_DATA = new Key<>(new Type>>() {}, "NETWORK_PLAYER_ONLINE_DATA"); + public static final Key> SERVER_REGISTER_DATA = new Key<>(new Type>() {}, "SERVER_REGISTER_DATA"); private NetworkKeys() { /* static variable class */ diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/FetchOperations.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/FetchOperations.java index c5a80a86c..786b4bd5e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/FetchOperations.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/operation/FetchOperations.java @@ -116,5 +116,7 @@ public interface FetchOperations { List getServerUUIDs(); - Map> getPlayersOnlineForServers(Collection serverUUIDs); + Map> getPlayersOnlineForServers(Collection servers); + + Map getPlayersRegisteredForServers(Collection servers); } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java index 0f726295b..c9a379ebe 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/operation/SQLFetchOps.java @@ -469,7 +469,12 @@ public class SQLFetchOps extends SQLOps implements FetchOperations { } @Override - public Map> getPlayersOnlineForServers(Collection serverUUIDs) { - return tpsTable.getPlayersOnlineForServers(serverUUIDs); + public Map> getPlayersOnlineForServers(Collection servers) { + return tpsTable.getPlayersOnlineForServers(servers); + } + + @Override + public Map getPlayersRegisteredForServers(Collection servers) { + return userInfoTable.getPlayersRegisteredForServers(servers); } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java index 689e1b28d..f52c6de7d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/UserInfoTable.java @@ -11,6 +11,7 @@ import com.djrapitops.plan.system.database.databases.sql.processing.ExecStatemen import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStatement; import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; import com.djrapitops.plan.system.database.databases.sql.statements.*; +import com.djrapitops.plan.system.info.server.Server; import com.djrapitops.plugin.utilities.Verify; import java.sql.PreparedStatement; @@ -315,6 +316,30 @@ public class UserInfoTable extends UserIDTable { return isRegistered(player, getServerUUID()); } + public Map getPlayersRegisteredForServers(Collection servers) { + if (servers.isEmpty()) { + return new HashMap<>(); + } + + String sql = "SELECT " + Col.SERVER_ID + ", " + + "COUNT(" + Col.REGISTERED + ") AS count " + + "FROM " + tableName + + "GROUP BY " + Col.SERVER_ID; + return query(new QueryAllStatement>(sql, 10000) { + @Override + public Map processResults(ResultSet set) throws SQLException { + Map map = new HashMap<>(); + while (set.next()) { + int serverID = set.getInt(Col.SERVER_ID.get()); + int count = set.getInt("count"); + map.put(serverID, count); + } + return map; + } + }); + + } + public enum Col implements Column { USER_ID(UserIDTable.Col.USER_ID.get()), SERVER_ID("server_id"),