From cf640b734b2aa53009a680f1a723d61bdf30857c Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 4 Sep 2020 02:43:07 +0400 Subject: [PATCH] * Server: added stats about correctly ended tourneys and games in news feed; --- .../java/mage/server/TableController.java | 4 ++ .../main/java/mage/server/TableManager.java | 1 + .../mage/server/util/ServerMessagesUtil.java | 39 ++++++++++++------- 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 5f42a4c9273..d2f69ef5ac9 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -681,6 +681,7 @@ public class TableController { Game game = match.getGame(); if (game != null) { GameManager.instance.removeGame(game.getId()); + // game ended by error, so don't add it to ended stats } } } @@ -746,6 +747,7 @@ public class TableController { public void endTournament(Tournament tournament) { table.endTournament(); + ServerMessagesUtil.instance.incTournamentsEnded(); } public MatchOptions getOptions() { @@ -771,6 +773,8 @@ public class TableController { } } GameManager.instance.removeGame(game.getId()); + ServerMessagesUtil.instance.incGamesEnded(); + try { if (!match.hasEnded()) { if (match.getGame() != null && match.getGame().getGameType().isSideboardingAllowed()) { diff --git a/Mage.Server/src/main/java/mage/server/TableManager.java b/Mage.Server/src/main/java/mage/server/TableManager.java index dcea18b32bf..b898241ab22 100644 --- a/Mage.Server/src/main/java/mage/server/TableManager.java +++ b/Mage.Server/src/main/java/mage/server/TableManager.java @@ -366,6 +366,7 @@ public enum TableManager { if (table.getState() != TableState.FINISHED) { if (game != null) { GameManager.instance.removeGame(game.getId()); + // something goes wrong, so don't add it to ended stats } GamesRoomManager.instance.removeTable(tableId); } diff --git a/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java b/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java index ee7ed6e3a6a..bc157746159 100644 --- a/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java +++ b/Mage.Server/src/main/java/mage/server/util/ServerMessagesUtil.java @@ -27,7 +27,6 @@ public enum ServerMessagesUtil { instance; private static final Logger log = Logger.getLogger(ServerMessagesUtil.class); private static final String SERVER_MSG_TXT_FILE = "server.msg.txt"; - private ScheduledExecutorService updateExecutor; private final List messages = new ArrayList<>(); private final ReadWriteLock lock = new ReentrantReadWriteLock(); @@ -38,7 +37,9 @@ public enum ServerMessagesUtil { private static long startDate; private static final AtomicInteger gamesStarted = new AtomicInteger(0); + private static final AtomicInteger gamesEnded = new AtomicInteger(0); private static final AtomicInteger tournamentsStarted = new AtomicInteger(0); + private static final AtomicInteger tournamentsEnded = new AtomicInteger(0); private static final AtomicInteger lostConnection = new AtomicInteger(0); private static final AtomicInteger reconnects = new AtomicInteger(0); @@ -47,7 +48,7 @@ public enum ServerMessagesUtil { } ServerMessagesUtil() { - updateExecutor = Executors.newSingleThreadScheduledExecutor(); + ScheduledExecutorService updateExecutor = Executors.newSingleThreadScheduledExecutor(); updateExecutor.scheduleAtFixedRate(this::reloadMessages, 5, 5 * 60, TimeUnit.SECONDS); } @@ -139,13 +140,10 @@ public enum ServerMessagesUtil { private String getServerStatistics() { long current = System.currentTimeMillis(); long hours = ((current - startDate) / (1000 * 60 * 60)); - StringBuilder statistics = new StringBuilder("Server uptime: "); - statistics.append(hours); - statistics.append(" hour(s), games played: "); - statistics.append(gamesStarted.get()); - statistics.append(" tournaments started: "); - statistics.append(tournamentsStarted.get()); - return statistics.toString(); + String statistics = "Server uptime: " + hours + " hour(s)" + + "; Games started: " + gamesStarted.get() + ", ended: " + gamesEnded.get() + + "; Tourneys started: " + tournamentsStarted.get() + ", ended: " + tournamentsEnded.get(); + return statistics; } private String getServerStatistics2() { @@ -154,12 +152,9 @@ public enum ServerMessagesUtil { if (minutes == 0) { minutes = 1; } - StringBuilder statistics = new StringBuilder("Disconnects: "); - statistics.append(lostConnection.get()); - statistics.append(" avg/hour ").append(lostConnection.get() * 60 / minutes); - statistics.append(" Reconnects: ").append(reconnects.get()); - statistics.append(" avg/hour ").append(reconnects.get() * 60 / minutes); - return statistics.toString(); + String statistics = "Disconnects: " + lostConnection.get() + ", avg/hour: " + lostConnection.get() * 60 / minutes + + "; Reconnects: " + reconnects.get() + ", avg/hour: " + reconnects.get() * 60 / minutes; + return statistics; } // private Timer timer = new Timer(1000 * 60, new ActionListener() { @@ -178,6 +173,13 @@ public enum ServerMessagesUtil { } while (!gamesStarted.compareAndSet(value, value + 1)); } + public void incGamesEnded() { + int value; + do { + value = gamesEnded.get(); + } while (!gamesEnded.compareAndSet(value, value + 1)); + } + public void incTournamentsStarted() { int value; do { @@ -185,6 +187,13 @@ public enum ServerMessagesUtil { } while (!tournamentsStarted.compareAndSet(value, value + 1)); } + public void incTournamentsEnded() { + int value; + do { + value = tournamentsEnded.get(); + } while (!tournamentsEnded.compareAndSet(value, value + 1)); + } + public void incReconnects() { int value; do {