You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
2.9 KiB
82 lines
2.9 KiB
package app.updates;
|
|
|
|
import app.entities.Stats;
|
|
import app.services.ServerService;
|
|
import app.services.db.VIPService;
|
|
import jakarta.annotation.PostConstruct;
|
|
import jakarta.persistence.EntityManager;
|
|
import jakarta.persistence.PersistenceContext;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Qualifier;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.time.Instant;
|
|
import java.util.concurrent.CompletableFuture;
|
|
|
|
@Component
|
|
public class VipCountUpdater extends BaseUpdater{
|
|
private Stats stats;
|
|
|
|
EntityManager entityManager;
|
|
|
|
private VIPService vipService;
|
|
private ServerService serverService;
|
|
|
|
private final Logger logger = LoggerFactory.getLogger(VipCountUpdater.class);
|
|
|
|
@Value("${backend.updates.vip_count}")
|
|
private boolean update = false;
|
|
private int timeout = 5 * 60 * 1000;
|
|
|
|
@Autowired
|
|
public VipCountUpdater(Stats stats,
|
|
VIPService vipService,
|
|
ServerService serverService,
|
|
@Qualifier(value = "RoEntityManager") EntityManager entityManager) {
|
|
this.stats = stats;
|
|
this.vipService = vipService;
|
|
this.serverService = serverService;
|
|
this.entityManager = entityManager;
|
|
}
|
|
|
|
@PostConstruct
|
|
public void SetUpdater(){
|
|
if (update) {
|
|
logger.warn("Updater enabled");
|
|
CreateTaskUpdater(this::UpdateVIPCount, timeout);
|
|
CreateTaskUpdater(this::UpdateFreeVIPCount, timeout);
|
|
CreateTaskUpdater(this::CheckEndedVIPs, 60 * 1000);
|
|
}
|
|
}
|
|
|
|
public boolean UpdateVIPCount() {
|
|
logger.info("Update current active VIP profiles");
|
|
stats.setVip_players(
|
|
(Long) entityManager.createNativeQuery("SELECT COUNT(*) as count FROM `sm_admins` WHERE `status` LIKE 'VIP' AND (`comment` LIKE 'Donate.User' OR `comment` LIKE 'f13bot.User')")
|
|
.getSingleResult());
|
|
stats.getUpdates().merge("vip_count", Instant.now().getEpochSecond(), (x, y) -> y);
|
|
return true;
|
|
}
|
|
|
|
public boolean UpdateFreeVIPCount() {
|
|
logger.info("Update current active FreeVIP profiles");
|
|
stats.setFreevip_players(
|
|
(Long) entityManager.createNativeQuery("SELECT COUNT(*) as count FROM `sm_admins` WHERE `status` LIKE 'VIP' AND `comment` LIKE 'f13bot.FreeVIP'")
|
|
.getSingleResult());
|
|
stats.getUpdates().merge("freevip_count", Instant.now().getEpochSecond(), (x, y) -> y);
|
|
return true;
|
|
}
|
|
|
|
public boolean CheckEndedVIPs() {
|
|
int count = vipService.removeEndedVIPs();
|
|
if (count > 0) {
|
|
logger.info("Found {} ended vips", count);
|
|
serverService.executeRCONOnAllServers("sm_reloadadmins");
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
|