mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-09-17 09:14:07 +02:00
Update Upstream
This commit is contained in:
commit
1f931ed885
@ -3,6 +3,7 @@ package main.java.com.djrapitops.plan.data.analysis;
|
||||
import com.djrapitops.plugin.api.TimeAmount;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import main.java.com.djrapitops.plan.data.SessionData;
|
||||
import main.java.com.djrapitops.plan.ui.html.graphs.NewPlayersGraphCreator;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||
|
||||
@ -18,7 +19,8 @@ import java.util.stream.Collectors;
|
||||
* <p>
|
||||
* Contains following place-holders: totallogins, uniquejoinsday,
|
||||
* uniquejoinsweek, uniquejoinsmonth, avguniquejoins, avguniquejoinsday,
|
||||
* avguniquejoinsweek, avguniquejoinsmonth, npday, npweek, npmonth
|
||||
* avguniquejoinsweek, avguniquejoinsmonth, npday, npweek, npmonth,
|
||||
* npdataday, npdataweek, npdatamonth, newperday, newperdayday, newperdayweek, newperdaymonth
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @since 3.5.2
|
||||
@ -67,13 +69,32 @@ public class JoinInfoPart extends RawData<JoinInfoPart> {
|
||||
}
|
||||
|
||||
private void newPlayers() {
|
||||
int newDay = AnalysisUtils.getNewPlayers(registered, TimeAmount.DAY.ms(), MiscUtils.getTime());
|
||||
int newWeek = AnalysisUtils.getNewPlayers(registered, TimeAmount.WEEK.ms(), MiscUtils.getTime());
|
||||
int newMonth = AnalysisUtils.getNewPlayers(registered, TimeAmount.MONTH.ms(), MiscUtils.getTime());
|
||||
long now = MiscUtils.getTime();
|
||||
long newDay = AnalysisUtils.getNewPlayers(registered, TimeAmount.DAY.ms(), now);
|
||||
long newWeek = AnalysisUtils.getNewPlayers(registered, TimeAmount.WEEK.ms(), now);
|
||||
long newMonth = AnalysisUtils.getNewPlayers(registered, TimeAmount.MONTH.ms(), now);
|
||||
|
||||
addValue("npday", newDay);
|
||||
addValue("npweek", newWeek);
|
||||
addValue("npmonth", newMonth);
|
||||
|
||||
long newPerDay = AnalysisUtils.getNewUsersPerDay(registered, -1);
|
||||
long newPerDayDay = AnalysisUtils.getNewUsersPerDay(registered, TimeAmount.DAY.ms());
|
||||
long newPerDayWeek = AnalysisUtils.getNewUsersPerDay(registered, TimeAmount.WEEK.ms());
|
||||
long newPerDayMonth = AnalysisUtils.getNewUsersPerDay(registered, TimeAmount.MONTH.ms());
|
||||
|
||||
addValue("newperday", newPerDay);
|
||||
addValue("newperdayday", newPerDayDay);
|
||||
addValue("newperdayweek", newPerDayWeek);
|
||||
addValue("newperdaymonth", newPerDayMonth);
|
||||
|
||||
String scatterDay = NewPlayersGraphCreator.buildScatterDataString(registered, TimeAmount.DAY.ms(), now);
|
||||
String scatterWeek = NewPlayersGraphCreator.buildScatterDataString(registered, TimeAmount.WEEK.ms(), now);
|
||||
String scatterMonth = NewPlayersGraphCreator.buildScatterDataString(registered, TimeAmount.MONTH.ms(), now);
|
||||
|
||||
addValue("npdataday", scatterDay);
|
||||
addValue("npdataweek", scatterWeek);
|
||||
addValue("npdatamonth", scatterMonth);
|
||||
}
|
||||
|
||||
public void addToLoginTimes() {
|
||||
|
@ -19,7 +19,7 @@ import java.util.List;
|
||||
* <p>
|
||||
* Contains following place-holders: tpsscatterday, tpsscatterweek, cpuscatterday, cpuscatterweek, averagetps(-week),
|
||||
* averagetpsday, averagecpuday, averagecpuweek, averagememoryday, averagememoryweek, averageentitiesday, averageentitiesweek,
|
||||
* averagechunksday, averagechunkweek
|
||||
* averagechunksday, averagechunkweek, ramscatterday, ramscatterweek
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @since 3.5.2
|
||||
@ -42,6 +42,8 @@ public class TPSPart extends RawData<TPSPart> {
|
||||
String tpsScatterWeek = TPSGraphCreator.buildScatterDataStringTPS(week, TimeAmount.WEEK.ms());
|
||||
String cpuScatterDay = CPUGraphCreator.buildScatterDataString(day, TimeAmount.DAY.ms());
|
||||
String cpuScatterWeek = CPUGraphCreator.buildScatterDataString(week, TimeAmount.WEEK.ms());
|
||||
String ramScatterDay = CPUGraphCreator.buildScatterDataString(day, TimeAmount.DAY.ms());
|
||||
String ramScatterWeek = CPUGraphCreator.buildScatterDataString(week, TimeAmount.WEEK.ms());
|
||||
|
||||
addValue("tpsscatterday", tpsScatterDay);
|
||||
addValue("tpsscatterweek", tpsScatterWeek);
|
||||
@ -49,6 +51,12 @@ public class TPSPart extends RawData<TPSPart> {
|
||||
addValue("cpuscatterday", cpuScatterDay);
|
||||
addValue("cpuscatterweek", cpuScatterWeek);
|
||||
|
||||
addValue("ramscatterday", ramScatterDay);
|
||||
addValue("ramscatterweek", ramScatterWeek);
|
||||
|
||||
Runtime runtime = Runtime.getRuntime();
|
||||
addValue("maxram", (runtime.maxMemory() / (1024L * 1024L)));
|
||||
|
||||
double averageTPSWeek = MathUtils.averageDouble(week.stream().map(TPS::getTps));
|
||||
double averageTPSDay = MathUtils.averageDouble(day.stream().map(TPS::getTps));
|
||||
|
||||
|
@ -0,0 +1,44 @@
|
||||
package main.java.com.djrapitops.plan.ui.html.graphs;
|
||||
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.Point;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Class for creating scatter graph data from Registration epoch dates.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @since 3.6.0
|
||||
*/
|
||||
public class NewPlayersGraphCreator {
|
||||
|
||||
/**
|
||||
* Creates a scatter data string from given data.
|
||||
*
|
||||
* @param registered Registration dates of players
|
||||
* @param scale Scale which the graph should reside within. (Milliseconds)
|
||||
* @param now Current epoch ms.
|
||||
* @return Scatter Graph data string for ChartJs
|
||||
*/
|
||||
public static String buildScatterDataString(List<Long> registered, long scale, long now) {
|
||||
List<Long> filtered = registered.stream()
|
||||
.filter(date -> date >= now - scale).collect(Collectors.toList());
|
||||
List<Point> points = filtered.stream()
|
||||
.distinct()
|
||||
.map(date -> new Point(date, getCount(filtered, date)))
|
||||
.collect(Collectors.toList());
|
||||
return ScatterGraphCreator.scatterGraph(points, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Counts registration amounts of certain date.
|
||||
*
|
||||
* @param filtered Filtered registration list (Filtered to scale)
|
||||
* @param lookFor Look for this date
|
||||
* @return How many were on the list.
|
||||
*/
|
||||
private static long getCount(List<Long> filtered, long lookFor) {
|
||||
return filtered.stream().filter(date -> lookFor == date).count();
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package main.java.com.djrapitops.plan.ui.html.graphs;
|
||||
|
||||
import main.java.com.djrapitops.plan.data.TPS;
|
||||
import main.java.com.djrapitops.plan.utilities.MiscUtils;
|
||||
import main.java.com.djrapitops.plan.utilities.analysis.Point;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class RamGraphCreator {
|
||||
public static String buildScatterDataString(List<TPS> tpsData, long scale) {
|
||||
long now = MiscUtils.getTime();
|
||||
List<Point> points = tpsData.stream()
|
||||
.filter(tps -> tps.getDate() >= now - scale)
|
||||
.map(tps -> new Point(tps.getDate(), tps.getUsedMemory()))
|
||||
.collect(Collectors.toList());
|
||||
return ScatterGraphCreator.scatterGraph(points, true);
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
package main.java.com.djrapitops.plan.ui.html.graphs;
|
||||
|
||||
public class WorldLoadGraphCreator {
|
||||
// TODO
|
||||
}
|
@ -47,13 +47,13 @@ public class AnalysisUtils {
|
||||
* @param now
|
||||
* @return
|
||||
*/
|
||||
public static int getNewPlayers(List<Long> registered, long scale, long now) {
|
||||
int newPlayers = 0;
|
||||
public static long getNewPlayers(List<Long> registered, long scale, long now) {
|
||||
long newPlayers = 0;
|
||||
if (!registered.isEmpty()) {
|
||||
newPlayers = registered.stream()
|
||||
.filter((reg) -> (reg != null))
|
||||
.filter((reg) -> (reg > now - scale))
|
||||
.map((_item) -> 1).reduce(newPlayers, Integer::sum);
|
||||
.filter(Objects::nonNull)
|
||||
.filter(reg -> reg > now - scale)
|
||||
.count();
|
||||
}
|
||||
// Filters out register dates before scale
|
||||
return newPlayers;
|
||||
@ -200,9 +200,11 @@ public class AnalysisUtils {
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sessions
|
||||
* @param scale
|
||||
* @return
|
||||
* Used to calculate unique players that have played within the time frame determined by scale.
|
||||
*
|
||||
* @param sessions All sessions sorted in a map by User's UUID
|
||||
* @param scale Scale (milliseconds), time before (Current epoch - scale) will be ignored.
|
||||
* @return Amount of Unique joins within the time span.
|
||||
*/
|
||||
public static int getUniqueJoins(Map<UUID, List<SessionData>> sessions, long scale) {
|
||||
long now = MiscUtils.getTime();
|
||||
@ -245,11 +247,33 @@ public class AnalysisUtils {
|
||||
}
|
||||
});
|
||||
int total = MathUtils.sumInt(uniqueJoins.values().stream().map(Set::size));
|
||||
int size = uniqueJoins.keySet().size();
|
||||
if (size == 0) {
|
||||
int numberOfDays = uniqueJoins.keySet().size();
|
||||
if (numberOfDays == 0) {
|
||||
return 0;
|
||||
}
|
||||
return total / size;
|
||||
return total / numberOfDays;
|
||||
}
|
||||
|
||||
public static long getNewUsersPerDay(List<Long> registers, long scale) {
|
||||
long now = MiscUtils.getTime();
|
||||
long nowMinusScale = now - scale;
|
||||
|
||||
Set<Integer> days = new HashSet<>();
|
||||
for (Long date : registers) {
|
||||
if (scale != -1) {
|
||||
if (date < nowMinusScale) {
|
||||
continue;
|
||||
}
|
||||
int day = getDayOfYear(date);
|
||||
days.add(day);
|
||||
}
|
||||
}
|
||||
long total = registers.stream().filter(date -> date >= nowMinusScale).count();
|
||||
int numberOfDays = days.size();
|
||||
if (numberOfDays == 0) {
|
||||
return 0;
|
||||
}
|
||||
return total / numberOfDays;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -277,8 +301,13 @@ public class AnalysisUtils {
|
||||
}
|
||||
|
||||
private static int getDayOfYear(SessionData session) {
|
||||
return getDayOfYear(session.getSessionStart());
|
||||
|
||||
}
|
||||
|
||||
private static int getDayOfYear(long date) {
|
||||
Calendar day = Calendar.getInstance();
|
||||
day.setTimeInMillis(session.getSessionStart());
|
||||
day.setTimeInMillis(date);
|
||||
return day.get(Calendar.DAY_OF_YEAR);
|
||||
}
|
||||
}
|
||||
|
@ -101,9 +101,8 @@ public class AnalysisUtilsTest {
|
||||
registered.add(1L);
|
||||
long scale = 8L;
|
||||
long now = 10L;
|
||||
int expResult = 1;
|
||||
int result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
||||
assertEquals(expResult, result);
|
||||
long result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
||||
assertEquals(1L, result);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -114,9 +113,8 @@ public class AnalysisUtilsTest {
|
||||
List<Long> registered = new ArrayList<>();
|
||||
long scale = 1L;
|
||||
long now = 2L;
|
||||
int expResult = 0;
|
||||
int result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
||||
assertEquals(expResult, result);
|
||||
long result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
||||
assertEquals(0L, result);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user