Update Upstream

This commit is contained in:
Fuzzlemann 2017-07-27 19:02:33 +02:00
commit 1f931ed885
7 changed files with 147 additions and 23 deletions

View File

@ -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() {

View File

@ -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));

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,5 @@
package main.java.com.djrapitops.plan.ui.html.graphs;
public class WorldLoadGraphCreator {
// TODO
}

View File

@ -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);
}
}

View File

@ -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);
}
/**