package tc.oc.pgm.analytics;
import javax.inject.Inject;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import tc.oc.analytics.Gauge;
import tc.oc.analytics.MetricFactory;
import tc.oc.commons.core.scheduler.Scheduler;
import tc.oc.minecraft.analytics.AnalyticsFacet;
import tc.oc.pgm.events.PlayerChangePartyEvent;
import tc.oc.pgm.match.MatchFinder;
public class MatchPlayerReporter extends AnalyticsFacet implements Listener {
private final MatchFinder matchFinder;
private final Scheduler scheduler;
private final Gauge participants, observers;
@Inject MatchPlayerReporter(MatchFinder matchFinder, Scheduler scheduler, MetricFactory metrics) {
this.matchFinder = matchFinder;
this.scheduler = scheduler;
this.participants = metrics.gauge("players.participants");
this.observers = metrics.gauge("players.observers");
}
private void update() {
scheduler.debounceTask(() -> {
participants.measure(matchFinder.currentMatches()
.stream()
.mapToInt(match -> match.getParticipatingPlayers().size())
.sum());
observers.measure(matchFinder.currentMatches()
.stream()
.mapToInt(match -> match.getObservingPlayers().size())
.sum());
});
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void changeParty(PlayerChangePartyEvent event) {
update();
}
}