Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ It handles:
- ACL Cleanup
- Bouncer Restart
- Dev Rank Handling
- Ingame Verified Syncc
- IP2ASN
- Patreon Sync
- Profiler Daemon Ingest
Expand All @@ -27,6 +28,10 @@ Restarts our "bouncer" server every day. This is the thing that does 2FA, server

Adds or removes members from development rank when changes are made. Performed hourly.

### Ingame Verified Sync

Tacks roles onto the relevant people for their ingame verified state

### IP2ASN

Caches ASNs for IP addresses of recent players.
Expand Down
26 changes: 23 additions & 3 deletions TaskDaemon.Core/src/me/aa07/paradise/taskdaemon/core/Core.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,18 @@
import java.util.ArrayList;
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.DevRankJob;
import me.aa07.paradise.taskdaemon.core.modules.ingameverifiedsync.IngameVerifiedSyncJob;
import me.aa07.paradise.taskdaemon.core.modules.ip2asn.Ip2AsnJob;
import me.aa07.paradise.taskdaemon.core.modules.patreonsync.PatreonSyncJob;
import me.aa07.paradise.taskdaemon.core.modules.prlabel.PrLabelJob;
import me.aa07.paradise.taskdaemon.core.modules.profilercleanup.ProfilerCleanupJob;
import me.aa07.paradise.taskdaemon.core.modules.profileringest.ProfilerWorker;
import me.aa07.paradise.taskdaemon.core.redis.RedisManager;
import me.aa07.paradise.taskdaemon.core.services.database.DbCore;
import me.aa07.paradise.taskdaemon.core.services.invision.InvisionUtil;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.quartz.CronScheduleBuilder;
Expand Down Expand Up @@ -63,6 +65,7 @@ public void run() {
private void setupThreads(ConfigHolder config, Logger logger) {
// Initial setup
DbCore database = new DbCore(config, logger);
InvisionUtil iu = new InvisionUtil(config.invisionConfig);

// Profiler stuff
ProfilerWorker pw = new ProfilerWorker(database, logger);
Expand All @@ -75,14 +78,14 @@ private void setupThreads(ConfigHolder config, Logger logger) {
// Launch Quartz
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
setupJobs(scheduler, database, config, logger);
setupJobs(scheduler, database, iu, config, logger);
scheduler.start();
} catch (SchedulerException ex) {
logger.error("Quartz had a hissy fit!", ex);
}
}

private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config, Logger logger) throws SchedulerException {
private void setupJobs(Scheduler scheduler, DbCore dbCore, InvisionUtil iu, ConfigHolder config, Logger logger) throws SchedulerException {
// See below for CRON format
// https://www.quartz-scheduler.org/documentation/quartz-2.3.0/tutorials/crontrigger.html

Expand Down Expand Up @@ -185,6 +188,20 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config,
.withSchedule(CronScheduleBuilder.cronSchedule("0 15 * * * ?")) // Every hour, offset 15 minutes
.build();

// Ingame verified sync
JobDataMap jdm_igvsync = new JobDataMap();
jdm_igvsync.put("LOGGER", logger);
jdm_igvsync.put("DBCORE", dbCore);
jdm_igvsync.put("IU", iu);
JobDetail jd_igvsync = JobBuilder.newJob(IngameVerifiedSyncJob.class)
.withIdentity("igvsync", "igvsync")
.usingJobData(jdm_igvsync)
.build();
CronTrigger ct_igvsync = TriggerBuilder.newTrigger()
.withIdentity("igvsync", "igvsync")
.withSchedule(CronScheduleBuilder.cronSchedule("0 23 * * * ?")) // Every hour, offset 23 minutes
.build();

// Lists that exist just to make sure these things show as recognised
ArrayList<JobDetail> bin1 = new ArrayList<JobDetail>();
bin1.add(jd_aclcleanup);
Expand All @@ -194,6 +211,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config,
bin1.add(jd_profilercleanup);
bin1.add(jd_pullrequests);
bin1.add(jd_patreonsync);
bin1.add(jd_igvsync);
ArrayList<CronTrigger> bin2 = new ArrayList<CronTrigger>();
bin2.add(ct_aclcleanup);
bin2.add(ct_bouncerrestart);
Expand All @@ -202,6 +220,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config,
bin2.add(ct_profilercleanup);
bin2.add(ct_pullrequests);
bin2.add(ct_patreonsync);
bin2.add(ct_igvsync);

// Is this necessary? Prolly not!
bin1.clear();
Expand All @@ -216,6 +235,7 @@ private void setupJobs(Scheduler scheduler, DbCore dbCore, ConfigHolder config,
scheduler.scheduleJob(jd_profilercleanup, ct_profilercleanup);
scheduler.scheduleJob(jd_pullrequests, ct_pullrequests);
scheduler.scheduleJob(jd_patreonsync, ct_patreonsync);
scheduler.scheduleJob(jd_igvsync, ct_igvsync);
}

private void launchAll() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ public class ConfigHolder {
public DatabaseConfig forumsDatabase;
public DatabaseConfig gameDatabase;
public GithubConfig github;
public InvisionConfig invisionConfig;
public Ip2AsnSerivceConfig ip2asn;
public PatreonConfig patreon;
public PfsenseConfig pfsense;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package me.aa07.paradise.taskdaemon.core.config;

public class InvisionConfig {
public String apiBaseUrl;
public String apiKey;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package me.aa07.paradise.taskdaemon.core.models.invision;

import com.google.gson.annotations.SerializedName;
import java.util.List;

public class GetUserModel {
@SerializedName("id") // just incase GSON behaviour ever changes
public int id;
@SerializedName("name")
public String name;
@SerializedName("primaryGroup")
public GroupHolder primaryGroup;
@SerializedName("secondaryGroups")
public List<GroupHolder> secondaryGroups;

public class GroupHolder {
@SerializedName("id")
public int id;
@SerializedName("name")
public String name;
@SerializedName("formattedName")
public String formattedName;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,11 @@
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;
import me.aa07.paradise.taskdaemon.core.services.database.DatabaseType;
import me.aa07.paradise.taskdaemon.core.services.database.DbCore;
import me.aa07.paradise.taskdaemon.database.gamedb.Tables;
import org.apache.logging.log4j.Logger;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobDataMap;
Expand Down Expand Up @@ -113,7 +112,7 @@ public void execute(JobExecutionContext context) throws JobExecutionException {
public List<String> checkIpsInDatabase(List<String> ips, Logger logger, DbCore dbcore) {
List<String> to_remove = new ArrayList<>();

DSLContext ctx = dbcore.jooq(DatabaseType.GameDb, SQLDialect.MYSQL);
DSLContext ctx = dbcore.jooq(DatabaseType.GameDb);
LocalDateTime ten_mins_ago = dbcore.now().minusMinutes(10);

for (String ip : ips) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package me.aa07.paradise.taskdaemon.core.modules.bouncerrestart;

import com.google.gson.Gson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
Expand All @@ -11,6 +10,7 @@
import java.util.Optional;
import me.aa07.paradise.taskdaemon.core.config.TgsConfig;
import me.aa07.paradise.taskdaemon.core.models.tgs.TokenResponseModel;
import me.aa07.paradise.taskdaemon.core.util.UtilConst;
import org.apache.logging.log4j.Logger;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
Expand Down Expand Up @@ -76,8 +76,7 @@ public void execute(JobExecutionContext event) throws JobExecutionException {
logger.info("[BouncerRestart] Sending auth token request");
HttpResponse<String> response = client.send(httpreq, BodyHandlers.ofString());

Gson gson = new Gson();
TokenResponseModel tokres = gson.fromJson(response.body(), TokenResponseModel.class);
TokenResponseModel tokres = UtilConst.GSON.fromJson(response.body(), TokenResponseModel.class);

// And send our restart request
HttpRequest httreq2 = HttpRequest.newBuilder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@
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.core.services.database.DatabaseType;
import me.aa07.paradise.taskdaemon.core.services.database.DbCore;
import me.aa07.paradise.taskdaemon.database.forums.Tables;
import me.aa07.paradise.taskdaemon.database.gamedb.tables.Admin;
import me.aa07.paradise.taskdaemon.database.gamedb.tables.records.AdminRecord;
import org.apache.logging.log4j.Logger;
import org.jooq.DSLContext;
import org.jooq.Record;
import org.jooq.Result;
import org.jooq.SQLDialect;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobDataMap;
Expand Down Expand Up @@ -49,8 +48,8 @@ public void execute(JobExecutionContext context) throws JobExecutionException {
logger.info("[DevRank] Starting dev rank sync");

try {
DSLContext forums_db = dbcore.jooq(DatabaseType.Forums, SQLDialect.MYSQL);
DSLContext game_db = dbcore.jooq(DatabaseType.GameDb, SQLDialect.MYSQL);
DSLContext forums_db = dbcore.jooq(DatabaseType.Forums);
DSLContext game_db = dbcore.jooq(DatabaseType.GameDb);

// Collect all dev team ckeys from forums database
List<String> dev_team_ckeys = new ArrayList<>();
Expand Down
Loading
Loading