From 712961bf6dab47236eacbf2799806f2d87043478 Mon Sep 17 00:00:00 2001 From: vatten Date: Mon, 15 Feb 2021 19:06:22 +0100 Subject: [PATCH 1/3] Added sessiongraph --- .../helpbot/bot/HelpBotInstance.java | 3 +- .../stats/support/SessionGraphCommand.java | 91 +++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/SessionGraphCommand.java diff --git a/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java b/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java index 699b064a..f5e320b1 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java +++ b/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java @@ -110,7 +110,8 @@ public static void initialize() throws LoginException { new ExcusedStaffCommand(), new SupportBannedPlayersCommand(), new DiscussionMuteCommand(), - new NbsCommand() + new NbsCommand(), + new SessionGraphCommand() ); JDABuilder builder = JDABuilder.createDefault(config.getToken()) diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/SessionGraphCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/SessionGraphCommand.java new file mode 100644 index 00000000..345127cd --- /dev/null +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/SessionGraphCommand.java @@ -0,0 +1,91 @@ +package com.diamondfire.helpbot.bot.command.impl.stats.support; + +import com.diamondfire.helpbot.bot.command.argument.ArgumentSet; +import com.diamondfire.helpbot.bot.command.argument.impl.parsing.types.SingleArgumentContainer; +import com.diamondfire.helpbot.bot.command.argument.impl.types.*; +import com.diamondfire.helpbot.bot.command.help.*; +import com.diamondfire.helpbot.bot.command.impl.Command; +import com.diamondfire.helpbot.bot.command.impl.stats.AbstractPlayerUUIDCommand; +import com.diamondfire.helpbot.bot.command.permissions.Permission; +import com.diamondfire.helpbot.bot.events.CommandEvent; +import com.diamondfire.helpbot.sys.database.impl.DatabaseQuery; +import com.diamondfire.helpbot.sys.database.impl.queries.BasicQuery; +import com.diamondfire.helpbot.sys.graph.graphable.*; +import com.diamondfire.helpbot.sys.graph.impl.ChartGraphBuilder; +import com.diamondfire.helpbot.util.DateUtil; + +import java.sql.ResultSet; +import java.util.*; + + +public class SessionGraphCommand extends Command { + + @Override + public String getName() { + return "sessiongraph"; + } + + @Override + public String[] getAliases() { + return new String[]{"sessiongraph"}; + } + + @Override + public HelpContext getHelpContext() { + return new HelpContext() + .description("Generates a graph of all sessions done in a specific day.") + .category(CommandCategory.SUPPORT) + .addArgument( + new HelpContextArgument() + .name("date") + .optional() + ); + } + + @Override + public ArgumentSet compileArguments() { + return new ArgumentSet() + .addArgument("date", + new DateArgument()); + + } + + @Override + public Permission getPermission() { + return Permission.USER; + } + + @Override + public void run(CommandEvent event) { + Date date = event.getArgument("date"); + java.sql.Date sqlDate = DateUtil.toSqlDate(date); + + new DatabaseQuery() + .query(new BasicQuery("WITH RECURSIVE all_dates(dt) AS ( SELECT (SELECT DATE(time) FROM hypercube.support_sessions WHERE time > CURRENT_TIMESTAMP() - INTERVAL 24 HOURS ORDER BY time) dt UNION ALL SELECT dt + ? FROM all_dates WHERE dt + ? <= CURRENT_TIMESTAMP() ) SELECT dates.dt date, COALESCE(t.total, 0) AS total FROM all_dates dates LEFT JOIN (SELECT DATE(time) AS date, COUNT(time) AS total FROM hypercube.support_sessions GROUP BY DATE(time)) t ON t.date = dates.dt ORDER BY dates.dt", + (statement) -> { + statement.setDate(1, sqlDate); + statement.setDate(2, sqlDate); + }) + ) + .compile() + .run((query) -> { + Map, Integer> dates = new LinkedHashMap<>(); + int i = 0; + for (ResultSet set : query) { + String timedisplay = i+""; + if(i < 10){ + timedisplay = "0" + timedisplay; + } + dates.put(new StringEntry(timedisplay + ":00"), set.getInt("total")); + i++; + } + + event.getChannel().sendFile(new ChartGraphBuilder() + .setGraphName(String.format("Total sessions on %s", date)) + .createGraph(dates)).queue(); + + }); + + } + +} From 1fc4f33cc072ffa92f223146bf84c412f416ef34 Mon Sep 17 00:00:00 2001 From: vatten Date: Mon, 15 Feb 2021 22:17:12 +0100 Subject: [PATCH 2/3] DailySessions --- .../helpbot/bot/HelpBotInstance.java | 3 +- ...Command.java => DailySessionsCommand.java} | 46 +++++++++++-------- 2 files changed, 28 insertions(+), 21 deletions(-) rename src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/{SessionGraphCommand.java => DailySessionsCommand.java} (65%) diff --git a/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java b/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java index f5e320b1..fe6f3a76 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java +++ b/src/main/java/com/diamondfire/helpbot/bot/HelpBotInstance.java @@ -1,6 +1,5 @@ package com.diamondfire.helpbot.bot; -import com.diamondfire.helpbot.HelpBot; import com.diamondfire.helpbot.bot.command.CommandHandler; import com.diamondfire.helpbot.bot.command.impl.codeblock.*; import com.diamondfire.helpbot.bot.command.impl.other.*; @@ -111,7 +110,7 @@ public static void initialize() throws LoginException { new SupportBannedPlayersCommand(), new DiscussionMuteCommand(), new NbsCommand(), - new SessionGraphCommand() + new DailySessionsCommand() ); JDABuilder builder = JDABuilder.createDefault(config.getToken()) diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/SessionGraphCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/DailySessionsCommand.java similarity index 65% rename from src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/SessionGraphCommand.java rename to src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/DailySessionsCommand.java index 345127cd..ef663458 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/SessionGraphCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/DailySessionsCommand.java @@ -2,10 +2,9 @@ import com.diamondfire.helpbot.bot.command.argument.ArgumentSet; import com.diamondfire.helpbot.bot.command.argument.impl.parsing.types.SingleArgumentContainer; -import com.diamondfire.helpbot.bot.command.argument.impl.types.*; +import com.diamondfire.helpbot.bot.command.argument.impl.types.DateArgument; import com.diamondfire.helpbot.bot.command.help.*; import com.diamondfire.helpbot.bot.command.impl.Command; -import com.diamondfire.helpbot.bot.command.impl.stats.AbstractPlayerUUIDCommand; import com.diamondfire.helpbot.bot.command.permissions.Permission; import com.diamondfire.helpbot.bot.events.CommandEvent; import com.diamondfire.helpbot.sys.database.impl.DatabaseQuery; @@ -15,19 +14,20 @@ import com.diamondfire.helpbot.util.DateUtil; import java.sql.ResultSet; +import java.time.Instant; import java.util.*; -public class SessionGraphCommand extends Command { +public class DailySessionsCommand extends Command { @Override public String getName() { - return "sessiongraph"; + return "dailysessions"; } @Override public String[] getAliases() { - return new String[]{"sessiongraph"}; + return new String[]{"ds"}; } @Override @@ -46,7 +46,7 @@ public HelpContext getHelpContext() { public ArgumentSet compileArguments() { return new ArgumentSet() .addArgument("date", - new DateArgument()); + new SingleArgumentContainer<>(new DateArgument()).optional(null)); } @@ -57,27 +57,35 @@ public Permission getPermission() { @Override public void run(CommandEvent event) { - Date date = event.getArgument("date"); + Date date; + if (event.getArgument("date") == null) { + date = Date.from(Instant.now()); + } else { + date = event.getArgument("date"); + } + java.sql.Date sqlDate = DateUtil.toSqlDate(date); new DatabaseQuery() - .query(new BasicQuery("WITH RECURSIVE all_dates(dt) AS ( SELECT (SELECT DATE(time) FROM hypercube.support_sessions WHERE time > CURRENT_TIMESTAMP() - INTERVAL 24 HOURS ORDER BY time) dt UNION ALL SELECT dt + ? FROM all_dates WHERE dt + ? <= CURRENT_TIMESTAMP() ) SELECT dates.dt date, COALESCE(t.total, 0) AS total FROM all_dates dates LEFT JOIN (SELECT DATE(time) AS date, COUNT(time) AS total FROM hypercube.support_sessions GROUP BY DATE(time)) t ON t.date = dates.dt ORDER BY dates.dt", - (statement) -> { - statement.setDate(1, sqlDate); - statement.setDate(2, sqlDate); - }) + .query(new BasicQuery("SELECT hour(time) AS time, COUNT(*) AS count\n" + + "FROM hypercube.support_sessions\n" + + "WHERE DATE(time) = ?\n" + + "GROUP BY hour(time)\n" + + "ORDER BY time", + (statement) -> statement.setDate(1, sqlDate)) ) .compile() .run((query) -> { Map, Integer> dates = new LinkedHashMap<>(); - int i = 0; - for (ResultSet set : query) { - String timedisplay = i+""; - if(i < 10){ + ResultSet set = query.getResult(); + + for (int i = 0; i < 25; i++) { + boolean end = set.next(); + String timedisplay = i + ""; + if (i < 10) { timedisplay = "0" + timedisplay; } - dates.put(new StringEntry(timedisplay + ":00"), set.getInt("total")); - i++; + dates.put(new StringEntry(timedisplay + ":00"), !end ? 0 : set.getInt("count")); } event.getChannel().sendFile(new ChartGraphBuilder() @@ -88,4 +96,4 @@ public void run(CommandEvent event) { } -} +} \ No newline at end of file From 87b2abc602471b1b3d03538da36dfc11b62df9a6 Mon Sep 17 00:00:00 2001 From: vatten Date: Mon, 15 Feb 2021 22:22:59 +0100 Subject: [PATCH 3/3] DailySessions --- .../bot/command/impl/stats/support/DailySessionsCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/DailySessionsCommand.java b/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/DailySessionsCommand.java index ef663458..fb1bf540 100644 --- a/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/DailySessionsCommand.java +++ b/src/main/java/com/diamondfire/helpbot/bot/command/impl/stats/support/DailySessionsCommand.java @@ -52,7 +52,7 @@ public ArgumentSet compileArguments() { @Override public Permission getPermission() { - return Permission.USER; + return Permission.SUPPORT; } @Override