From c9640478fd63f3c2437e10c347edfcfbb5626f74 Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 30 Jun 2025 04:43:27 -0700 Subject: [PATCH 01/11] Initial commit --- .../core/modules/devrank/DevRank.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java new file mode 100644 index 0000000..053ad77 --- /dev/null +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java @@ -0,0 +1,62 @@ +package me.aa07.paradise.taskdaemon.core.modules.devrank; + +import java.util.Arrays; +import java.util.ArrayList; +import java.util.List; +import java.time.LocalDateTime; +import java.util.Optional; + +import me.aa07.paradise.taskdaemon.core.database.DbCore; +import me.aa07.paradise.taskdaemon.core.database.DatabaseType; +import me.aa07.paradise.taskdaemon.database.gamedb.Tables; +import me.aa07.paradise.taskdaemon.database.forumdb.Tables as ForumTables; // TODO: adjust as needed +import org.apache.logging.log4j.Logger; +import org.jooq.DSLContext; +import org.jooq.Record; +import org.quartz.Job; +import org.quartz.JobDataMap; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import static java.lang.System.*; + +/** + * Scheduled job that syncs dev team permissions between forum and game databases + */ +public class DevRank implements Job { + private static final int DEV_TEAM_GROUP = 39; + private static final int DEV_TEAM_BITFLAG = 262144; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + JobDataMap dataMap = context.getMergedJobDataMap(); + + // Get logger + Object rawLogger = dataMap.get("LOGGER"); + Optional loggerHolder = Optional.empty(); + + if (rawLogger instanceof Logger l2) { + loggerHolder = Optional.of(l2); + } + + if (loggerHolder.isEmpty()) { + System.out.println("[DevRank] LOGGER WAS SOMEHOW NULL - THIS IS VERY BAD"); + return; + } + Logger logger = loggerHolder.get(); + + // Get database + Object rawDb = dataMap.get("DBCORE"); + Optional dbCoreHolder = Optional.empty(); + + if (rawDb instanceof DbCore db2) { + dbCoreHolder = Optional.of(db2); + } + + if (dbCoreHolder.isEmpty()) { + logger.error("[DevRank] DBCORE WAS SOMEHOW NULL - THIS IS VERY BAD"); + return; + } + DbCore dbcore = dbCoreHolder.get(); + } +} From 007b51e5a0f250cc1acf975f1f9e232a787b2a1f Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Sat, 5 Jul 2025 08:01:33 -0700 Subject: [PATCH 02/11] draft --- TaskDaemon.Core/pom.xml | 6 + .../aa07/paradise/taskdaemon/core/Core.java | 44 +++-- .../core/database/DatabaseType.java | 2 +- .../core/modules/devrank/DevRank.java | 171 +++++++++++++++--- 4 files changed, 180 insertions(+), 43 deletions(-) diff --git a/TaskDaemon.Core/pom.xml b/TaskDaemon.Core/pom.xml index f886b4e..c16833d 100644 --- a/TaskDaemon.Core/pom.xml +++ b/TaskDaemon.Core/pom.xml @@ -50,6 +50,12 @@ org.apache.logging.log4j log4j-slf4j2-impl + + me.aa07.paradise + taskdaemon-database-forums + dev-SNAPSHOT + compile + diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java index a4147b4..b66b2fb 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java @@ -1,12 +1,15 @@ package me.aa07.paradise.taskdaemon.core; import com.moandjiezana.toml.Toml; + import java.io.File; import java.util.Optional; + import me.aa07.paradise.taskdaemon.core.config.ConfigHolder; import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.modules.aclcleanup.AclCleanupJob; import me.aa07.paradise.taskdaemon.core.modules.bouncerrestart.BouncerRestartJob; +import me.aa07.paradise.taskdaemon.core.modules.devrank.DevRank; import me.aa07.paradise.taskdaemon.core.modules.ip2asn.Ip2AsnJob; import me.aa07.paradise.taskdaemon.core.modules.profilercleanup.ProfilerCleanupJob; import me.aa07.paradise.taskdaemon.core.modules.profileringest.ProfilerWorker; @@ -101,13 +104,29 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, jdm_bouncerrestart.put("LOGGER", logger); jdm_bouncerrestart.put("TGS_CFG", config.tgs); JobDetail jd_bouncerrestart = JobBuilder.newJob(BouncerRestartJob.class) - .withIdentity("bouncerrestart", "bouncerrestart") - .usingJobData(jdm_bouncerrestart) - .build(); + .withIdentity("bouncerrestart", "bouncerrestart") + .usingJobData(jdm_bouncerrestart) + .build(); CronTrigger ct_bouncerrestart = TriggerBuilder.newTrigger() - .withIdentity("bouncerrestart", "bouncerrestart") - .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")) // Every day - midnight - .build(); + .withIdentity("bouncerrestart", "bouncerrestart") + .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?")) // Every day - midnight + .build(); + + // DevRank update + JobDataMap jdm_devrank = new JobDataMap(); + jdm_devrank.put("LOGGER", logger); + jdm_devrank.put("DBCORE", dbCore); + + JobDetail jd_devrank = JobBuilder.newJob(DevRank.class) + .withIdentity("devrank", "devrank") + .usingJobData(jdm_devrank) + .build(); + + CronTrigger ct_devrank = TriggerBuilder.newTrigger() + .withIdentity("devrank", "devrank") + .withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * * ?")) // Every hour on the hour + .build(); + // IP2ASN JobDataMap jdm_ip2asn = new JobDataMap(); @@ -115,13 +134,13 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, jdm_ip2asn.put("DBCORE", dbCore); jdm_ip2asn.put("IP2ASNCFG", config.ip2asn); JobDetail jd_ip2asn = JobBuilder.newJob(Ip2AsnJob.class) - .withIdentity("ip2asn", "ip2asn") - .usingJobData(jdm_ip2asn) - .build(); + .withIdentity("ip2asn", "ip2asn") + .usingJobData(jdm_ip2asn) + .build(); CronTrigger ct_ip2asn = TriggerBuilder.newTrigger() - .withIdentity("ip2asn", "ip2asn") - .withSchedule(CronScheduleBuilder.cronSchedule("0 */10 * * * ?")) // Every 10 minutes - .build(); + .withIdentity("ip2asn", "ip2asn") + .withSchedule(CronScheduleBuilder.cronSchedule("0 */10 * * * ?")) // Every 10 minutes + .build(); // Profiler cleanup JobDataMap jdm_profilercleanup = new JobDataMap(); @@ -139,6 +158,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, // Schedule all scheduler.scheduleJob(jd_aclcleanup, ct_aclcleanup); scheduler.scheduleJob(jd_bouncerrestart, ct_bouncerrestart); + scheduler.scheduleJob(jd_devrank, ct_devrank); scheduler.scheduleJob(jd_ip2asn, ct_ip2asn); scheduler.scheduleJob(jd_profilercleanup, ct_profilercleanup); } diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DatabaseType.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DatabaseType.java index ab125ca..8fa95ba 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DatabaseType.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DatabaseType.java @@ -1,5 +1,5 @@ package me.aa07.paradise.taskdaemon.core.database; public enum DatabaseType { - ProfilerDb, GameDb + ProfilerDb, GameDb, Forums } diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java index 053ad77..f9d6f38 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java @@ -1,62 +1,173 @@ package me.aa07.paradise.taskdaemon.core.modules.devrank; -import java.util.Arrays; -import java.util.ArrayList; -import java.util.List; -import java.time.LocalDateTime; -import java.util.Optional; - import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.database.DatabaseType; -import me.aa07.paradise.taskdaemon.database.gamedb.Tables; -import me.aa07.paradise.taskdaemon.database.forumdb.Tables as ForumTables; // TODO: adjust as needed +import me.aa07.paradise.taskdaemon.database.forums.Tables; +import me.aa07.paradise.taskdaemon.database.gamedb.tables.Admin; import org.apache.logging.log4j.Logger; import org.jooq.DSLContext; import org.jooq.Record; +import org.jooq.Result; import org.quartz.Job; import org.quartz.JobDataMap; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; -import static java.lang.System.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; /** - * Scheduled job that syncs dev team permissions between forum and game databases + * Scheduled job that syncs dev team permissions between forums and game databases. */ public class DevRank implements Job { private static final int DEV_TEAM_GROUP = 39; private static final int DEV_TEAM_BITFLAG = 262144; + private record AdminEntry(int id, String rank, int flags) {} + @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap dataMap = context.getMergedJobDataMap(); - // Get logger - Object rawLogger = dataMap.get("LOGGER"); - Optional loggerHolder = Optional.empty(); - - if (rawLogger instanceof Logger l2) { - loggerHolder = Optional.of(l2); - } + // Get logger and db + Logger logger = (Logger) dataMap.get("LOGGER"); + DbCore dbcore = (DbCore) dataMap.get("DBCORE"); - if (loggerHolder.isEmpty()) { - System.out.println("[DevRank] LOGGER WAS SOMEHOW NULL - THIS IS VERY BAD"); + if (logger == null || dbcore == null) { + System.err.println("[DevRank] LOGGER or DBCORE was not set in JobDataMap."); return; } - Logger logger = loggerHolder.get(); - // Get database - Object rawDb = dataMap.get("DBCORE"); - Optional dbCoreHolder = Optional.empty(); + logger.info("[DevRank] Starting dev rank sync"); - if (rawDb instanceof DbCore db2) { - dbCoreHolder = Optional.of(db2); - } + try { + DSLContext forumsDb = dbcore.jooq(DatabaseType.Forums); // Note enum name "Forums" + DSLContext gameDb = dbcore.jooq(DatabaseType.GameDb); - if (dbCoreHolder.isEmpty()) { - logger.error("[DevRank] DBCORE WAS SOMEHOW NULL - THIS IS VERY BAD"); - return; + // Collect all dev team ckeys from forums database + List devteamCkeys = new ArrayList<>(); + + Result forumRecords = forumsDb.select( + Tables.CORE_MEMBERS.MEMBER_ID, + Tables.CORE_MEMBERS.NAME, + Tables.CORE_MEMBERS.MEMBER_GROUP_ID, + Tables.CORE_MEMBERS.MGROUP_OTHERS, + Tables.CORE_PFIELDS_CONTENT.FIELD_10 + ) + .from(Tables.CORE_MEMBERS) + .leftJoin(Tables.CORE_PFIELDS_CONTENT) + .on(Tables.CORE_MEMBERS.MEMBER_ID.eq(Tables.CORE_PFIELDS_CONTENT.MEMBER_ID)) + .fetch(); + + for (Record rec : forumRecords) { + int primaryGroup = rec.get(Tables.CORE_MEMBERS.MEMBER_GROUP_ID); + String otherGroups = rec.get(Tables.CORE_MEMBERS.MGROUP_OTHERS); + String ckey = rec.get(Tables.CORE_PFIELDS_CONTENT.FIELD_10); + + Set allGroups = new HashSet<>(); + allGroups.add(primaryGroup); + + if (otherGroups != null && !otherGroups.isBlank()) { + Arrays.stream(otherGroups.split(",")) + .filter(g -> !g.isBlank()) + .map(Integer::parseInt) + .forEach(allGroups::add); + } + + if (allGroups.contains(DEV_TEAM_GROUP)) { + if (ckey == null || ckey.isBlank()) { + logger.warn("[DevRank] Forums user {} (ID {}) has no linked ckey", rec.get(Tables.CORE_MEMBERS.NAME), rec.get(Tables.CORE_MEMBERS.MEMBER_ID)); + continue; + } + + String cleaned = ckey.toLowerCase().replaceAll("[\\s_\\-]", ""); + devteamCkeys.add(cleaned); + } + } + + // Load all ingame admins + Map ingameAdmins = new HashMap<>(); + + Result adminRecords = gameDb.select( + Admin.ADMIN.ID, + Admin.ADMIN.CKEY, + Admin.ADMIN.ADMIN_RANK, + Admin.ADMIN.FLAGS + ).from(Admin.ADMIN).fetch(); + + for (Record rec : adminRecords) { + String ckey = rec.get(Admin.ADMIN.CKEY); + ingameAdmins.put(ckey, new AdminEntry( + rec.get(Admin.ADMIN.ID), + rec.get(Admin.ADMIN.ADMIN_RANK), + rec.get(Admin.ADMIN.FLAGS) + )); + } + + // Apply permissions to those who need them + for (String ckey : devteamCkeys) { + AdminEntry entry = ingameAdmins.get(ckey); + + if (entry == null) { + logger.info("[DevRank] Ckey {} not in admin table, adding new dev", ckey); + gameDb.insertInto(Admin.ADMIN) + .set(Admin.ADMIN.CKEY, ckey) + .set(Admin.ADMIN.ADMIN_RANK, "Developer") + .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) + .execute(); + } else { + if ("Removed".equals(entry.rank()) || entry.flags() == 0) { + logger.info("[DevRank] Resetting {} to dev team with new flag", ckey); + gameDb.update(Admin.ADMIN) + .set(Admin.ADMIN.ADMIN_RANK, "Developer") + .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) + .where(Admin.ADMIN.ID.eq(entry.id())) + .execute(); + } else if ((entry.flags() & DEV_TEAM_BITFLAG) == 0) { + logger.info("[DevRank] Adding dev flag to {}", ckey); + gameDb.update(Admin.ADMIN) + .set(Admin.ADMIN.FLAGS, entry.flags() + DEV_TEAM_BITFLAG) + .where(Admin.ADMIN.ID.eq(entry.id())) + .execute(); + } else { + logger.debug("[DevRank] {} already has dev flag", ckey); + } + } + } + + // Remove devteam flag from those who no longer qualify + for (Map.Entry entry : ingameAdmins.entrySet()) { + String ckey = entry.getKey(); + AdminEntry admin = entry.getValue(); + + if (!devteamCkeys.contains(ckey)) { + if (admin.flags() == DEV_TEAM_BITFLAG) { + logger.info("[DevRank] {} only had dev flag, removing rank and flags", ckey); + gameDb.update(Admin.ADMIN) + .set(Admin.ADMIN.ADMIN_RANK, "Removed") + .set(Admin.ADMIN.FLAGS, 0) + .where(Admin.ADMIN.ID.eq(admin.id())) + .execute(); + } else if ((admin.flags() & DEV_TEAM_BITFLAG) != 0) { + logger.info("[DevRank] {} no longer in dev team, removing dev flag only", ckey); + gameDb.update(Admin.ADMIN) + .set(Admin.ADMIN.FLAGS, admin.flags() - DEV_TEAM_BITFLAG) + .where(Admin.ADMIN.ID.eq(admin.id())) + .execute(); + } + } + } + + logger.info("[DevRank] Finished sync, {} devteam users processed", devteamCkeys.size()); + + } catch (Exception e) { + logger.error("[DevRank] Error during sync", e); + throw new JobExecutionException(e); } - DbCore dbcore = dbCoreHolder.get(); } } From 410caf683785d4f9a48571c46e652aa9b0cd4dbf Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Sat, 5 Jul 2025 08:03:52 -0700 Subject: [PATCH 03/11] note cleanup --- .../aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java index f9d6f38..847f55b 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java @@ -46,7 +46,7 @@ public void execute(JobExecutionContext context) throws JobExecutionException { logger.info("[DevRank] Starting dev rank sync"); try { - DSLContext forumsDb = dbcore.jooq(DatabaseType.Forums); // Note enum name "Forums" + DSLContext forumsDb = dbcore.jooq(DatabaseType.Forums); DSLContext gameDb = dbcore.jooq(DatabaseType.GameDb); // Collect all dev team ckeys from forums database From 4ff4ea62d29a1ac974907f1fe9beb22ff31c768a Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:05:20 -0700 Subject: [PATCH 04/11] styling and other things --- .../core/modules/devrank/DevRank.java | 119 +++++++++--------- 1 file changed, 62 insertions(+), 57 deletions(-) diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java index 847f55b..b2a535e 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java @@ -1,7 +1,14 @@ package me.aa07.paradise.taskdaemon.core.modules.devrank; -import me.aa07.paradise.taskdaemon.core.database.DbCore; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import me.aa07.paradise.taskdaemon.core.database.DatabaseType; +import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.database.forums.Tables; import me.aa07.paradise.taskdaemon.database.gamedb.tables.Admin; import org.apache.logging.log4j.Logger; @@ -13,23 +20,17 @@ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - /** * Scheduled job that syncs dev team permissions between forums and game databases. */ +@SuppressWarnings({"checkstyle:Indentation", "checkstyle:LineLength"}) public class DevRank implements Job { + @SuppressWarnings({"checkstyle:Indentation", "checkstyle:JavadocVariable"}) private static final int DEV_TEAM_GROUP = 39; + @SuppressWarnings({"checkstyle:Indentation", "checkstyle:JavadocVariable"}) private static final int DEV_TEAM_BITFLAG = 262144; - private record AdminEntry(int id, String rank, int flags) {} - + @SuppressWarnings({"checkstyle:Indentation", "checkstyle:LineLength", "checkstyle:LocalVariableName", "checkstyle:FinalParameters", "checkstyle:DesignForExtension"}) @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap dataMap = context.getMergedJobDataMap(); @@ -50,43 +51,43 @@ public void execute(JobExecutionContext context) throws JobExecutionException { DSLContext gameDb = dbcore.jooq(DatabaseType.GameDb); // Collect all dev team ckeys from forums database - List devteamCkeys = new ArrayList<>(); + List dev_team_ckeys = new ArrayList<>(); Result forumRecords = forumsDb.select( - Tables.CORE_MEMBERS.MEMBER_ID, - Tables.CORE_MEMBERS.NAME, - Tables.CORE_MEMBERS.MEMBER_GROUP_ID, - Tables.CORE_MEMBERS.MGROUP_OTHERS, - Tables.CORE_PFIELDS_CONTENT.FIELD_10 - ) - .from(Tables.CORE_MEMBERS) - .leftJoin(Tables.CORE_PFIELDS_CONTENT) - .on(Tables.CORE_MEMBERS.MEMBER_ID.eq(Tables.CORE_PFIELDS_CONTENT.MEMBER_ID)) - .fetch(); + Tables.CORE_MEMBERS.MEMBER_ID, + Tables.CORE_MEMBERS.NAME, + Tables.CORE_MEMBERS.MEMBER_GROUP_ID, + Tables.CORE_MEMBERS.MGROUP_OTHERS, + Tables.CORE_PFIELDS_CONTENT.FIELD_10 + ) + .from(Tables.CORE_MEMBERS) + .leftJoin(Tables.CORE_PFIELDS_CONTENT) + .on(Tables.CORE_MEMBERS.MEMBER_ID.eq(Tables.CORE_PFIELDS_CONTENT.MEMBER_ID)) + .fetch(); for (Record rec : forumRecords) { int primaryGroup = rec.get(Tables.CORE_MEMBERS.MEMBER_GROUP_ID); String otherGroups = rec.get(Tables.CORE_MEMBERS.MGROUP_OTHERS); String ckey = rec.get(Tables.CORE_PFIELDS_CONTENT.FIELD_10); - Set allGroups = new HashSet<>(); - allGroups.add(primaryGroup); + Set all_groups = new HashSet(); + all_groups.add(primaryGroup); if (otherGroups != null && !otherGroups.isBlank()) { Arrays.stream(otherGroups.split(",")) - .filter(g -> !g.isBlank()) - .map(Integer::parseInt) - .forEach(allGroups::add); + .filter(g -> !g.isBlank()) + .map(Integer::parseInt) + .forEach(all_groups::add); } - if (allGroups.contains(DEV_TEAM_GROUP)) { + if (all_groups.contains(DEV_TEAM_GROUP)) { if (ckey == null || ckey.isBlank()) { logger.warn("[DevRank] Forums user {} (ID {}) has no linked ckey", rec.get(Tables.CORE_MEMBERS.NAME), rec.get(Tables.CORE_MEMBERS.MEMBER_ID)); continue; } String cleaned = ckey.toLowerCase().replaceAll("[\\s_\\-]", ""); - devteamCkeys.add(cleaned); + dev_team_ckeys.add(cleaned); } } @@ -94,46 +95,46 @@ public void execute(JobExecutionContext context) throws JobExecutionException { Map ingameAdmins = new HashMap<>(); Result adminRecords = gameDb.select( - Admin.ADMIN.ID, - Admin.ADMIN.CKEY, - Admin.ADMIN.ADMIN_RANK, - Admin.ADMIN.FLAGS + Admin.ADMIN.ID, + Admin.ADMIN.CKEY, + Admin.ADMIN.ADMIN_RANK, + Admin.ADMIN.FLAGS ).from(Admin.ADMIN).fetch(); for (Record rec : adminRecords) { String ckey = rec.get(Admin.ADMIN.CKEY); ingameAdmins.put(ckey, new AdminEntry( - rec.get(Admin.ADMIN.ID), - rec.get(Admin.ADMIN.ADMIN_RANK), - rec.get(Admin.ADMIN.FLAGS) + rec.get(Admin.ADMIN.ID), + rec.get(Admin.ADMIN.ADMIN_RANK), + rec.get(Admin.ADMIN.FLAGS) )); } // Apply permissions to those who need them - for (String ckey : devteamCkeys) { + for (String ckey : dev_team_ckeys) { AdminEntry entry = ingameAdmins.get(ckey); if (entry == null) { logger.info("[DevRank] Ckey {} not in admin table, adding new dev", ckey); gameDb.insertInto(Admin.ADMIN) - .set(Admin.ADMIN.CKEY, ckey) - .set(Admin.ADMIN.ADMIN_RANK, "Developer") - .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) - .execute(); + .set(Admin.ADMIN.CKEY, ckey) + .set(Admin.ADMIN.ADMIN_RANK, "Developer") + .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) + .execute(); } else { if ("Removed".equals(entry.rank()) || entry.flags() == 0) { logger.info("[DevRank] Resetting {} to dev team with new flag", ckey); gameDb.update(Admin.ADMIN) - .set(Admin.ADMIN.ADMIN_RANK, "Developer") - .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) - .where(Admin.ADMIN.ID.eq(entry.id())) - .execute(); + .set(Admin.ADMIN.ADMIN_RANK, "Developer") + .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) + .where(Admin.ADMIN.ID.eq(entry.id())) + .execute(); } else if ((entry.flags() & DEV_TEAM_BITFLAG) == 0) { logger.info("[DevRank] Adding dev flag to {}", ckey); gameDb.update(Admin.ADMIN) - .set(Admin.ADMIN.FLAGS, entry.flags() + DEV_TEAM_BITFLAG) - .where(Admin.ADMIN.ID.eq(entry.id())) - .execute(); + .set(Admin.ADMIN.FLAGS, entry.flags() + DEV_TEAM_BITFLAG) + .where(Admin.ADMIN.ID.eq(entry.id())) + .execute(); } else { logger.debug("[DevRank] {} already has dev flag", ckey); } @@ -145,29 +146,33 @@ public void execute(JobExecutionContext context) throws JobExecutionException { String ckey = entry.getKey(); AdminEntry admin = entry.getValue(); - if (!devteamCkeys.contains(ckey)) { + if (!dev_team_ckeys.contains(ckey)) { if (admin.flags() == DEV_TEAM_BITFLAG) { logger.info("[DevRank] {} only had dev flag, removing rank and flags", ckey); gameDb.update(Admin.ADMIN) - .set(Admin.ADMIN.ADMIN_RANK, "Removed") - .set(Admin.ADMIN.FLAGS, 0) - .where(Admin.ADMIN.ID.eq(admin.id())) - .execute(); + .set(Admin.ADMIN.ADMIN_RANK, "Removed") + .set(Admin.ADMIN.FLAGS, 0) + .where(Admin.ADMIN.ID.eq(admin.id())) + .execute(); } else if ((admin.flags() & DEV_TEAM_BITFLAG) != 0) { logger.info("[DevRank] {} no longer in dev team, removing dev flag only", ckey); gameDb.update(Admin.ADMIN) - .set(Admin.ADMIN.FLAGS, admin.flags() - DEV_TEAM_BITFLAG) - .where(Admin.ADMIN.ID.eq(admin.id())) - .execute(); + .set(Admin.ADMIN.FLAGS, admin.flags() - DEV_TEAM_BITFLAG) + .where(Admin.ADMIN.ID.eq(admin.id())) + .execute(); } } } - logger.info("[DevRank] Finished sync, {} devteam users processed", devteamCkeys.size()); + logger.info("[DevRank] Finished sync, {} devteam users processed", dev_team_ckeys.size()); } catch (Exception e) { logger.error("[DevRank] Error during sync", e); throw new JobExecutionException(e); } } + + @SuppressWarnings("checkstyle:Indentation") + private record AdminEntry(int id, String rank, int flags) { + } } From 49259fc28e9d49a297058997cd3e89e56adae31a Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:10:05 -0700 Subject: [PATCH 05/11] names --- .../core/modules/devrank/DevRank.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java index b2a535e..87b9462 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java @@ -33,11 +33,11 @@ public class DevRank implements Job { @SuppressWarnings({"checkstyle:Indentation", "checkstyle:LineLength", "checkstyle:LocalVariableName", "checkstyle:FinalParameters", "checkstyle:DesignForExtension"}) @Override public void execute(JobExecutionContext context) throws JobExecutionException { - JobDataMap dataMap = context.getMergedJobDataMap(); + JobDataMap data_map = context.getMergedJobDataMap(); // Get logger and db - Logger logger = (Logger) dataMap.get("LOGGER"); - DbCore dbcore = (DbCore) dataMap.get("DBCORE"); + Logger logger = (Logger) data_map.get("LOGGER"); + DbCore dbcore = (DbCore) data_map.get("DBCORE"); if (logger == null || dbcore == null) { System.err.println("[DevRank] LOGGER or DBCORE was not set in JobDataMap."); @@ -47,13 +47,13 @@ public void execute(JobExecutionContext context) throws JobExecutionException { logger.info("[DevRank] Starting dev rank sync"); try { - DSLContext forumsDb = dbcore.jooq(DatabaseType.Forums); - DSLContext gameDb = dbcore.jooq(DatabaseType.GameDb); + DSLContext forums_db = dbcore.jooq(DatabaseType.Forums); + DSLContext game_db = dbcore.jooq(DatabaseType.GameDb); // Collect all dev team ckeys from forums database List dev_team_ckeys = new ArrayList<>(); - Result forumRecords = forumsDb.select( + Result forum_records = forums_db.select( Tables.CORE_MEMBERS.MEMBER_ID, Tables.CORE_MEMBERS.NAME, Tables.CORE_MEMBERS.MEMBER_GROUP_ID, @@ -65,16 +65,16 @@ public void execute(JobExecutionContext context) throws JobExecutionException { .on(Tables.CORE_MEMBERS.MEMBER_ID.eq(Tables.CORE_PFIELDS_CONTENT.MEMBER_ID)) .fetch(); - for (Record rec : forumRecords) { - int primaryGroup = rec.get(Tables.CORE_MEMBERS.MEMBER_GROUP_ID); - String otherGroups = rec.get(Tables.CORE_MEMBERS.MGROUP_OTHERS); + for (Record rec : forum_records) { + int primary_group = rec.get(Tables.CORE_MEMBERS.MEMBER_GROUP_ID); + String other_groups = rec.get(Tables.CORE_MEMBERS.MGROUP_OTHERS); String ckey = rec.get(Tables.CORE_PFIELDS_CONTENT.FIELD_10); Set all_groups = new HashSet(); - all_groups.add(primaryGroup); + all_groups.add(primary_group); - if (otherGroups != null && !otherGroups.isBlank()) { - Arrays.stream(otherGroups.split(",")) + if (other_groups != null && !other_groups.isBlank()) { + Arrays.stream(other_groups.split(",")) .filter(g -> !g.isBlank()) .map(Integer::parseInt) .forEach(all_groups::add); @@ -92,18 +92,18 @@ public void execute(JobExecutionContext context) throws JobExecutionException { } // Load all ingame admins - Map ingameAdmins = new HashMap<>(); + Map ingame_admins = new HashMap<>(); - Result adminRecords = gameDb.select( + Result admin_records = game_db.select( Admin.ADMIN.ID, Admin.ADMIN.CKEY, Admin.ADMIN.ADMIN_RANK, Admin.ADMIN.FLAGS ).from(Admin.ADMIN).fetch(); - for (Record rec : adminRecords) { + for (Record rec : admin_records) { String ckey = rec.get(Admin.ADMIN.CKEY); - ingameAdmins.put(ckey, new AdminEntry( + ingame_admins.put(ckey, new AdminEntry( rec.get(Admin.ADMIN.ID), rec.get(Admin.ADMIN.ADMIN_RANK), rec.get(Admin.ADMIN.FLAGS) @@ -112,11 +112,11 @@ public void execute(JobExecutionContext context) throws JobExecutionException { // Apply permissions to those who need them for (String ckey : dev_team_ckeys) { - AdminEntry entry = ingameAdmins.get(ckey); + AdminEntry entry = ingame_admins.get(ckey); if (entry == null) { logger.info("[DevRank] Ckey {} not in admin table, adding new dev", ckey); - gameDb.insertInto(Admin.ADMIN) + game_db.insertInto(Admin.ADMIN) .set(Admin.ADMIN.CKEY, ckey) .set(Admin.ADMIN.ADMIN_RANK, "Developer") .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) @@ -124,14 +124,14 @@ public void execute(JobExecutionContext context) throws JobExecutionException { } else { if ("Removed".equals(entry.rank()) || entry.flags() == 0) { logger.info("[DevRank] Resetting {} to dev team with new flag", ckey); - gameDb.update(Admin.ADMIN) + game_db.update(Admin.ADMIN) .set(Admin.ADMIN.ADMIN_RANK, "Developer") .set(Admin.ADMIN.FLAGS, DEV_TEAM_BITFLAG) .where(Admin.ADMIN.ID.eq(entry.id())) .execute(); } else if ((entry.flags() & DEV_TEAM_BITFLAG) == 0) { logger.info("[DevRank] Adding dev flag to {}", ckey); - gameDb.update(Admin.ADMIN) + game_db.update(Admin.ADMIN) .set(Admin.ADMIN.FLAGS, entry.flags() + DEV_TEAM_BITFLAG) .where(Admin.ADMIN.ID.eq(entry.id())) .execute(); @@ -142,21 +142,21 @@ public void execute(JobExecutionContext context) throws JobExecutionException { } // Remove devteam flag from those who no longer qualify - for (Map.Entry entry : ingameAdmins.entrySet()) { + for (Map.Entry entry : ingame_admins.entrySet()) { String ckey = entry.getKey(); AdminEntry admin = entry.getValue(); if (!dev_team_ckeys.contains(ckey)) { if (admin.flags() == DEV_TEAM_BITFLAG) { logger.info("[DevRank] {} only had dev flag, removing rank and flags", ckey); - gameDb.update(Admin.ADMIN) + game_db.update(Admin.ADMIN) .set(Admin.ADMIN.ADMIN_RANK, "Removed") .set(Admin.ADMIN.FLAGS, 0) .where(Admin.ADMIN.ID.eq(admin.id())) .execute(); } else if ((admin.flags() & DEV_TEAM_BITFLAG) != 0) { logger.info("[DevRank] {} no longer in dev team, removing dev flag only", ckey); - gameDb.update(Admin.ADMIN) + game_db.update(Admin.ADMIN) .set(Admin.ADMIN.FLAGS, admin.flags() - DEV_TEAM_BITFLAG) .where(Admin.ADMIN.ID.eq(admin.id())) .execute(); From ec7d561c1007ae1a21b6d12f70efe2e230861cc6 Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:18:23 -0700 Subject: [PATCH 06/11] job name, and other things --- TaskDaemon.Core/pom.xml | 11 +++++------ .../src/me/aa07/paradise/taskdaemon/core/Core.java | 4 ++-- .../modules/devrank/{DevRank.java => DevRankJob.java} | 2 +- 3 files changed, 8 insertions(+), 9 deletions(-) rename TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/{DevRank.java => DevRankJob.java} (99%) diff --git a/TaskDaemon.Core/pom.xml b/TaskDaemon.Core/pom.xml index c16833d..b74a2ae 100644 --- a/TaskDaemon.Core/pom.xml +++ b/TaskDaemon.Core/pom.xml @@ -22,6 +22,11 @@ taskdaemon-database-profiler dev-SNAPSHOT + + me.aa07.paradise + taskdaemon-database-forums + dev-SNAPSHOT + org.apache.logging.log4j log4j-core @@ -50,12 +55,6 @@ org.apache.logging.log4j log4j-slf4j2-impl - - me.aa07.paradise - taskdaemon-database-forums - dev-SNAPSHOT - compile - diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java index b66b2fb..591c760 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java @@ -9,7 +9,7 @@ import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.modules.aclcleanup.AclCleanupJob; import me.aa07.paradise.taskdaemon.core.modules.bouncerrestart.BouncerRestartJob; -import me.aa07.paradise.taskdaemon.core.modules.devrank.DevRank; +import me.aa07.paradise.taskdaemon.core.modules.devrank.DevRankJob; import me.aa07.paradise.taskdaemon.core.modules.ip2asn.Ip2AsnJob; import me.aa07.paradise.taskdaemon.core.modules.profilercleanup.ProfilerCleanupJob; import me.aa07.paradise.taskdaemon.core.modules.profileringest.ProfilerWorker; @@ -117,7 +117,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, jdm_devrank.put("LOGGER", logger); jdm_devrank.put("DBCORE", dbCore); - JobDetail jd_devrank = JobBuilder.newJob(DevRank.class) + JobDetail jd_devrank = JobBuilder.newJob(DevRankJob.class) .withIdentity("devrank", "devrank") .usingJobData(jdm_devrank) .build(); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java similarity index 99% rename from TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java rename to TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java index 87b9462..3239b92 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRank.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java @@ -24,7 +24,7 @@ * Scheduled job that syncs dev team permissions between forums and game databases. */ @SuppressWarnings({"checkstyle:Indentation", "checkstyle:LineLength"}) -public class DevRank implements Job { +public class DevRankJob implements Job { @SuppressWarnings({"checkstyle:Indentation", "checkstyle:JavadocVariable"}) private static final int DEV_TEAM_GROUP = 39; @SuppressWarnings({"checkstyle:Indentation", "checkstyle:JavadocVariable"}) From d77d6be1fcd97f6696afa90d466d806ec08fc9e6 Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:24:49 -0700 Subject: [PATCH 07/11] import spacing, and rearrange of dep --- TaskDaemon.Core/pom.xml | 6 +++--- .../src/me/aa07/paradise/taskdaemon/core/Core.java | 2 -- .../taskdaemon/core/modules/aclcleanup/AclCleanupJob.java | 1 - 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/TaskDaemon.Core/pom.xml b/TaskDaemon.Core/pom.xml index b74a2ae..8c77124 100644 --- a/TaskDaemon.Core/pom.xml +++ b/TaskDaemon.Core/pom.xml @@ -14,17 +14,17 @@ me.aa07.paradise - taskdaemon-database-gamedb + taskdaemon-database-forums dev-SNAPSHOT me.aa07.paradise - taskdaemon-database-profiler + taskdaemon-database-gamedb dev-SNAPSHOT me.aa07.paradise - taskdaemon-database-forums + taskdaemon-database-profiler dev-SNAPSHOT diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java index 591c760..f249f24 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java @@ -1,10 +1,8 @@ package me.aa07.paradise.taskdaemon.core; import com.moandjiezana.toml.Toml; - import java.io.File; import java.util.Optional; - import me.aa07.paradise.taskdaemon.core.config.ConfigHolder; import me.aa07.paradise.taskdaemon.core.database.DbCore; import me.aa07.paradise.taskdaemon.core.modules.aclcleanup.AclCleanupJob; diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java index 41277f4..d397c59 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/aclcleanup/AclCleanupJob.java @@ -8,7 +8,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; - import me.aa07.paradise.taskdaemon.core.config.PfsenseConfig; import me.aa07.paradise.taskdaemon.core.database.DatabaseType; import me.aa07.paradise.taskdaemon.core.database.DbCore; From dbc5e0c67abe35ff26f45468f70b0fbc3e607283 Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 7 Jul 2025 11:33:18 -0700 Subject: [PATCH 08/11] style fix and xml change --- TaskDaemon.Core/pom.xml | 1 + .../me/aa07/paradise/taskdaemon/core/config/PfsenseConfig.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/TaskDaemon.Core/pom.xml b/TaskDaemon.Core/pom.xml index 8c77124..4692f8b 100644 --- a/TaskDaemon.Core/pom.xml +++ b/TaskDaemon.Core/pom.xml @@ -78,6 +78,7 @@ validate + validate checkstyle.xml true diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/PfsenseConfig.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/PfsenseConfig.java index 8d05331..844f2ea 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/PfsenseConfig.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/PfsenseConfig.java @@ -1,6 +1,6 @@ package me.aa07.paradise.taskdaemon.core.config; -public class PfsenseConfig{ +public class PfsenseConfig { public String host; public int port; } From ec1578f448d17da6d42dc79acf1ac8dad9dde0d0 Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:06:42 -0700 Subject: [PATCH 09/11] formatting, config stuff --- .../taskdaemon/core/config/ConfigHolder.java | 1 + .../taskdaemon/core/database/DbCore.java | 1 + .../core/modules/devrank/DevRankJob.java | 30 ++++++++----------- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java index d37353b..538486c 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/config/ConfigHolder.java @@ -1,6 +1,7 @@ package me.aa07.paradise.taskdaemon.core.config; public class ConfigHolder { + public DatabaseConfig forumsDatabase; public DatabaseConfig gameDatabase; public Ip2AsnSerivceConfig ip2asn; public PfsenseConfig pfsense; diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java index 06b738e..e6fef2d 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java @@ -53,6 +53,7 @@ private void establishConnections(ConfigHolder config) { db_types.put(DatabaseType.GameDb, config.gameDatabase); db_types.put(DatabaseType.ProfilerDb, config.profilerDatabase); + db_types.put(DatabaseType.Forums, config.forumsDatabase); for (DatabaseType dbtype : db_types.keySet()) { DatabaseConfig cfg = db_types.get(dbtype); diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java index 3239b92..f4e3b58 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/modules/devrank/DevRankJob.java @@ -21,16 +21,14 @@ import org.quartz.JobExecutionException; /** - * Scheduled job that syncs dev team permissions between forums and game databases. + * Scheduled job that syncs dev team permissions between forums and game + * databases. */ -@SuppressWarnings({"checkstyle:Indentation", "checkstyle:LineLength"}) + public class DevRankJob implements Job { - @SuppressWarnings({"checkstyle:Indentation", "checkstyle:JavadocVariable"}) private static final int DEV_TEAM_GROUP = 39; - @SuppressWarnings({"checkstyle:Indentation", "checkstyle:JavadocVariable"}) private static final int DEV_TEAM_BITFLAG = 262144; - @SuppressWarnings({"checkstyle:Indentation", "checkstyle:LineLength", "checkstyle:LocalVariableName", "checkstyle:FinalParameters", "checkstyle:DesignForExtension"}) @Override public void execute(JobExecutionContext context) throws JobExecutionException { JobDataMap data_map = context.getMergedJobDataMap(); @@ -54,13 +52,11 @@ public void execute(JobExecutionContext context) throws JobExecutionException { List dev_team_ckeys = new ArrayList<>(); Result forum_records = forums_db.select( - Tables.CORE_MEMBERS.MEMBER_ID, - Tables.CORE_MEMBERS.NAME, - Tables.CORE_MEMBERS.MEMBER_GROUP_ID, - Tables.CORE_MEMBERS.MGROUP_OTHERS, - Tables.CORE_PFIELDS_CONTENT.FIELD_10 - ) - .from(Tables.CORE_MEMBERS) + Tables.CORE_MEMBERS.MEMBER_ID, + Tables.CORE_MEMBERS.NAME, + Tables.CORE_MEMBERS.MEMBER_GROUP_ID, + Tables.CORE_MEMBERS.MGROUP_OTHERS, + Tables.CORE_PFIELDS_CONTENT.FIELD_10).from(Tables.CORE_MEMBERS) .leftJoin(Tables.CORE_PFIELDS_CONTENT) .on(Tables.CORE_MEMBERS.MEMBER_ID.eq(Tables.CORE_PFIELDS_CONTENT.MEMBER_ID)) .fetch(); @@ -82,7 +78,8 @@ public void execute(JobExecutionContext context) throws JobExecutionException { if (all_groups.contains(DEV_TEAM_GROUP)) { if (ckey == null || ckey.isBlank()) { - logger.warn("[DevRank] Forums user {} (ID {}) has no linked ckey", rec.get(Tables.CORE_MEMBERS.NAME), rec.get(Tables.CORE_MEMBERS.MEMBER_ID)); + logger.warn("[DevRank] Forums user {} (ID {}) has no linked ckey", + rec.get(Tables.CORE_MEMBERS.NAME), rec.get(Tables.CORE_MEMBERS.MEMBER_ID)); continue; } @@ -98,16 +95,14 @@ public void execute(JobExecutionContext context) throws JobExecutionException { Admin.ADMIN.ID, Admin.ADMIN.CKEY, Admin.ADMIN.ADMIN_RANK, - Admin.ADMIN.FLAGS - ).from(Admin.ADMIN).fetch(); + Admin.ADMIN.FLAGS).from(Admin.ADMIN).fetch(); for (Record rec : admin_records) { String ckey = rec.get(Admin.ADMIN.CKEY); ingame_admins.put(ckey, new AdminEntry( rec.get(Admin.ADMIN.ID), rec.get(Admin.ADMIN.ADMIN_RANK), - rec.get(Admin.ADMIN.FLAGS) - )); + rec.get(Admin.ADMIN.FLAGS))); } // Apply permissions to those who need them @@ -172,7 +167,6 @@ public void execute(JobExecutionContext context) throws JobExecutionException { } } - @SuppressWarnings("checkstyle:Indentation") private record AdminEntry(int id, String rank, int flags) { } } From 3efd34f3eaef886bc6967360b09ade1fd5228109 Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Mon, 7 Jul 2025 13:21:12 -0700 Subject: [PATCH 10/11] alphabetize --- .../src/me/aa07/paradise/taskdaemon/core/database/DbCore.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java index e6fef2d..c057595 100644 --- a/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java +++ b/TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/database/DbCore.java @@ -51,9 +51,9 @@ private DataSource openDataSource(String url, String username, String password) private void establishConnections(ConfigHolder config) { HashMap db_types = new HashMap(); + db_types.put(DatabaseType.Forums, config.forumsDatabase); db_types.put(DatabaseType.GameDb, config.gameDatabase); db_types.put(DatabaseType.ProfilerDb, config.profilerDatabase); - db_types.put(DatabaseType.Forums, config.forumsDatabase); for (DatabaseType dbtype : db_types.keySet()) { DatabaseConfig cfg = db_types.get(dbtype); From 6569e782634c03bede140fb873c724eccb387088 Mon Sep 17 00:00:00 2001 From: Burzah <116982774+Burzah@users.noreply.github.com> Date: Sun, 13 Jul 2025 06:25:33 -0700 Subject: [PATCH 11/11] update example config and readme --- README.MD | 4 ++++ config.toml.example | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/README.MD b/README.MD index 5067593..4fc90a0 100644 --- a/README.MD +++ b/README.MD @@ -8,6 +8,7 @@ It handles: - ACL Cleanup - Bouncer Restart +- Dev Rank Handling - IP2ASN - Profiler Daemon Ingest - Profiler DB Cleanup @@ -20,6 +21,9 @@ Removes entries from a HAproxy ACL via its socket interface in order for inactiv Restarts our "bouncer" server every day. This is the thing that does 2FA, server queue, and region redirection. +### Dev Rank +Adds or removes members from development rank when changes are made. Performed hourly. + ### IP2ASN Caches ASNs for IP addresses of recent players. diff --git a/config.toml.example b/config.toml.example index 94e5d48..1950360 100644 --- a/config.toml.example +++ b/config.toml.example @@ -1,5 +1,11 @@ # This is an example configuration. Please see README.MD +[forumsDatabase] +host = "172.16.0.200" +username = "myuser" +password = "mypassword" +database = "paradise_forums" + [gameDatabase] host = "172.16.0.200" username = "myuser"