mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-09-19 02:01:04 +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.api.TimeAmount;
|
||||||
import com.djrapitops.plugin.utilities.Verify;
|
import com.djrapitops.plugin.utilities.Verify;
|
||||||
import main.java.com.djrapitops.plan.data.SessionData;
|
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.MiscUtils;
|
||||||
import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
import main.java.com.djrapitops.plan.utilities.analysis.AnalysisUtils;
|
||||||
|
|
||||||
@ -18,7 +19,8 @@ import java.util.stream.Collectors;
|
|||||||
* <p>
|
* <p>
|
||||||
* Contains following place-holders: totallogins, uniquejoinsday,
|
* Contains following place-holders: totallogins, uniquejoinsday,
|
||||||
* uniquejoinsweek, uniquejoinsmonth, avguniquejoins, avguniquejoinsday,
|
* uniquejoinsweek, uniquejoinsmonth, avguniquejoins, avguniquejoinsday,
|
||||||
* avguniquejoinsweek, avguniquejoinsmonth, npday, npweek, npmonth
|
* avguniquejoinsweek, avguniquejoinsmonth, npday, npweek, npmonth,
|
||||||
|
* npdataday, npdataweek, npdatamonth, newperday, newperdayday, newperdayweek, newperdaymonth
|
||||||
*
|
*
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
* @since 3.5.2
|
* @since 3.5.2
|
||||||
@ -67,13 +69,32 @@ public class JoinInfoPart extends RawData<JoinInfoPart> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void newPlayers() {
|
private void newPlayers() {
|
||||||
int newDay = AnalysisUtils.getNewPlayers(registered, TimeAmount.DAY.ms(), MiscUtils.getTime());
|
long now = MiscUtils.getTime();
|
||||||
int newWeek = AnalysisUtils.getNewPlayers(registered, TimeAmount.WEEK.ms(), MiscUtils.getTime());
|
long newDay = AnalysisUtils.getNewPlayers(registered, TimeAmount.DAY.ms(), now);
|
||||||
int newMonth = AnalysisUtils.getNewPlayers(registered, TimeAmount.MONTH.ms(), MiscUtils.getTime());
|
long newWeek = AnalysisUtils.getNewPlayers(registered, TimeAmount.WEEK.ms(), now);
|
||||||
|
long newMonth = AnalysisUtils.getNewPlayers(registered, TimeAmount.MONTH.ms(), now);
|
||||||
|
|
||||||
addValue("npday", newDay);
|
addValue("npday", newDay);
|
||||||
addValue("npweek", newWeek);
|
addValue("npweek", newWeek);
|
||||||
addValue("npmonth", newMonth);
|
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() {
|
public void addToLoginTimes() {
|
||||||
|
@ -19,7 +19,7 @@ import java.util.List;
|
|||||||
* <p>
|
* <p>
|
||||||
* Contains following place-holders: tpsscatterday, tpsscatterweek, cpuscatterday, cpuscatterweek, averagetps(-week),
|
* Contains following place-holders: tpsscatterday, tpsscatterweek, cpuscatterday, cpuscatterweek, averagetps(-week),
|
||||||
* averagetpsday, averagecpuday, averagecpuweek, averagememoryday, averagememoryweek, averageentitiesday, averageentitiesweek,
|
* averagetpsday, averagecpuday, averagecpuweek, averagememoryday, averagememoryweek, averageentitiesday, averageentitiesweek,
|
||||||
* averagechunksday, averagechunkweek
|
* averagechunksday, averagechunkweek, ramscatterday, ramscatterweek
|
||||||
*
|
*
|
||||||
* @author Rsl1122
|
* @author Rsl1122
|
||||||
* @since 3.5.2
|
* @since 3.5.2
|
||||||
@ -42,6 +42,8 @@ public class TPSPart extends RawData<TPSPart> {
|
|||||||
String tpsScatterWeek = TPSGraphCreator.buildScatterDataStringTPS(week, TimeAmount.WEEK.ms());
|
String tpsScatterWeek = TPSGraphCreator.buildScatterDataStringTPS(week, TimeAmount.WEEK.ms());
|
||||||
String cpuScatterDay = CPUGraphCreator.buildScatterDataString(day, TimeAmount.DAY.ms());
|
String cpuScatterDay = CPUGraphCreator.buildScatterDataString(day, TimeAmount.DAY.ms());
|
||||||
String cpuScatterWeek = CPUGraphCreator.buildScatterDataString(week, TimeAmount.WEEK.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("tpsscatterday", tpsScatterDay);
|
||||||
addValue("tpsscatterweek", tpsScatterWeek);
|
addValue("tpsscatterweek", tpsScatterWeek);
|
||||||
@ -49,6 +51,12 @@ public class TPSPart extends RawData<TPSPart> {
|
|||||||
addValue("cpuscatterday", cpuScatterDay);
|
addValue("cpuscatterday", cpuScatterDay);
|
||||||
addValue("cpuscatterweek", cpuScatterWeek);
|
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 averageTPSWeek = MathUtils.averageDouble(week.stream().map(TPS::getTps));
|
||||||
double averageTPSDay = MathUtils.averageDouble(day.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
|
* @param now
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static int getNewPlayers(List<Long> registered, long scale, long now) {
|
public static long getNewPlayers(List<Long> registered, long scale, long now) {
|
||||||
int newPlayers = 0;
|
long newPlayers = 0;
|
||||||
if (!registered.isEmpty()) {
|
if (!registered.isEmpty()) {
|
||||||
newPlayers = registered.stream()
|
newPlayers = registered.stream()
|
||||||
.filter((reg) -> (reg != null))
|
.filter(Objects::nonNull)
|
||||||
.filter((reg) -> (reg > now - scale))
|
.filter(reg -> reg > now - scale)
|
||||||
.map((_item) -> 1).reduce(newPlayers, Integer::sum);
|
.count();
|
||||||
}
|
}
|
||||||
// Filters out register dates before scale
|
// Filters out register dates before scale
|
||||||
return newPlayers;
|
return newPlayers;
|
||||||
@ -200,9 +200,11 @@ public class AnalysisUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param sessions
|
* Used to calculate unique players that have played within the time frame determined by scale.
|
||||||
* @param scale
|
*
|
||||||
* @return
|
* @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) {
|
public static int getUniqueJoins(Map<UUID, List<SessionData>> sessions, long scale) {
|
||||||
long now = MiscUtils.getTime();
|
long now = MiscUtils.getTime();
|
||||||
@ -245,11 +247,33 @@ public class AnalysisUtils {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
int total = MathUtils.sumInt(uniqueJoins.values().stream().map(Set::size));
|
int total = MathUtils.sumInt(uniqueJoins.values().stream().map(Set::size));
|
||||||
int size = uniqueJoins.keySet().size();
|
int numberOfDays = uniqueJoins.keySet().size();
|
||||||
if (size == 0) {
|
if (numberOfDays == 0) {
|
||||||
return 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) {
|
private static int getDayOfYear(SessionData session) {
|
||||||
|
return getDayOfYear(session.getSessionStart());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int getDayOfYear(long date) {
|
||||||
Calendar day = Calendar.getInstance();
|
Calendar day = Calendar.getInstance();
|
||||||
day.setTimeInMillis(session.getSessionStart());
|
day.setTimeInMillis(date);
|
||||||
return day.get(Calendar.DAY_OF_YEAR);
|
return day.get(Calendar.DAY_OF_YEAR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -101,9 +101,8 @@ public class AnalysisUtilsTest {
|
|||||||
registered.add(1L);
|
registered.add(1L);
|
||||||
long scale = 8L;
|
long scale = 8L;
|
||||||
long now = 10L;
|
long now = 10L;
|
||||||
int expResult = 1;
|
long result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
||||||
int result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
assertEquals(1L, result);
|
||||||
assertEquals(expResult, result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -114,9 +113,8 @@ public class AnalysisUtilsTest {
|
|||||||
List<Long> registered = new ArrayList<>();
|
List<Long> registered = new ArrayList<>();
|
||||||
long scale = 1L;
|
long scale = 1L;
|
||||||
long now = 2L;
|
long now = 2L;
|
||||||
int expResult = 0;
|
long result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
||||||
int result = AnalysisUtils.getNewPlayers(registered, scale, now);
|
assertEquals(0L, result);
|
||||||
assertEquals(expResult, result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user