Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance Leaderboard Availability During Refresh #1101

Merged
merged 3 commits into from
Jan 16, 2024
Merged
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
84 changes: 37 additions & 47 deletions app/org/maproulette/jobs/SchedulerActor.scala
Original file line number Diff line number Diff line change
Expand Up @@ -425,56 +425,46 @@ class SchedulerActor @Inject() (
val start = System.currentTimeMillis
logger.info(s"Scheduled Task '$action': Starting run")

db.withConnection { implicit c =>
// Clear TABLEs
SQL("DELETE FROM user_leaderboard WHERE country_code IS NULL").executeUpdate()
SQL("DELETE FROM user_top_challenges WHERE country_code IS NULL").executeUpdate()

// Past Month
logger.info(s"Scheduled Task '$action': updating user_leaderboard for the last month")
SQL(LeaderboardHelper.rebuildChallengesLeaderboardSQL(SchedulerActor.ONE_MONTH, config))
.executeUpdate()
logger.info(s"Scheduled Task '$action': updating user_top_challenges for the last month")
SQL(LeaderboardHelper.rebuildTopChallengesSQL(SchedulerActor.ONE_MONTH, config))
.executeUpdate()

// Past 3 Months
logger.info(s"Scheduled Task '$action': updating user_leaderboard for the last 3 months")
SQL(LeaderboardHelper.rebuildChallengesLeaderboardSQL(SchedulerActor.THREE_MONTHS, config))
.executeUpdate()
logger.info(s"Scheduled Task '$action': updating user_top_challenges for the last 3 months")
SQL(LeaderboardHelper.rebuildTopChallengesSQL(SchedulerActor.THREE_MONTHS, config))
.executeUpdate()

// Past 6 Months
logger.info(s"Scheduled Task '$action': updating user_leaderboard for the last 6 months")
SQL(LeaderboardHelper.rebuildChallengesLeaderboardSQL(SchedulerActor.SIX_MONTHS, config))
.executeUpdate()
logger.info(s"Scheduled Task '$action': updating user_top_challenges for the last 6 months")
SQL(LeaderboardHelper.rebuildTopChallengesSQL(SchedulerActor.SIX_MONTHS, config))
.executeUpdate()

// Past Year
logger.info(s"Scheduled Task '$action': updating user_leaderboard for the last 12 months")
SQL(LeaderboardHelper.rebuildChallengesLeaderboardSQL(SchedulerActor.TWELVE_MONTHS, config))
.executeUpdate()
logger.info(s"Scheduled Task '$action': updating user_top_challenges for the last 12 months")
SQL(LeaderboardHelper.rebuildTopChallengesSQL(SchedulerActor.TWELVE_MONTHS, config))
.executeUpdate()

// All Time
logger.info(s"Scheduled Task '$action': updating user_leaderboard for ALL TIME")
SQL(LeaderboardHelper.rebuildChallengesLeaderboardSQL(SchedulerActor.ALL_TIME, config))
.executeUpdate()
logger.info(s"Scheduled Task '$action': updating user_top_challenges for ALL TIME")
SQL(LeaderboardHelper.rebuildTopChallengesSQL(SchedulerActor.ALL_TIME, config))
.executeUpdate()
def deleteAndUpdateLeaderboardForTimePeriod(monthDuration: Int): Unit = {
logger.info(
s"Scheduled Task '$action': updating user_leaderboard monthDuration=$monthDuration"
)
db.withConnection { implicit c =>
SQL(
s"DELETE FROM user_leaderboard WHERE country_code IS NULL AND month_duration = {monthDuration}"
).on(Symbol("monthDuration") -> monthDuration)
.executeUpdate()
SQL(
s"DELETE FROM user_top_challenges WHERE country_code IS NULL AND month_duration = {monthDuration}"
).on(Symbol("monthDuration") -> monthDuration).executeUpdate()

val totalTime = System.currentTimeMillis - start
SQL(LeaderboardHelper.rebuildChallengesLeaderboardSQL(monthDuration, config))
.executeUpdate()
SQL(
LeaderboardHelper.rebuildTopChallengesSQL(monthDuration, config)
).executeUpdate()
}
logger.info(
s"Scheduled Task '$action': Finished run. Time spent: ${String.format("%1d", totalTime)}ms"
s"Scheduled Task '$action': finished updating user_leaderboard monthDuration=$monthDuration"
)
}

SchedulerActor.MONTH_DURATIONS.foreach(monthDuration => {
try {
deleteAndUpdateLeaderboardForTimePeriod(monthDuration)
} catch {
case e: Exception =>
logger.error(
s"Scheduled Task '$action': Failed to update user_leaderboard monthDuration=$monthDuration",
e
)
}
})

val totalTime = System.currentTimeMillis - start
logger.info(
s"Scheduled Task '$action': Finished run. Time spent: ${String.format("%1d", totalTime)}ms"
)
}

/**
Expand Down Expand Up @@ -892,7 +882,7 @@ object SchedulerActor {
SchedulerActor.SIX_MONTHS,
SchedulerActor.TWELVE_MONTHS,
SchedulerActor.ALL_TIME
).sorted
)

def props = Props[SchedulerActor]()

Expand Down