mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-01-23 00:21:43 +01:00
Playerbase graphs to network page
This commit is contained in:
parent
986a753918
commit
9d865ad516
@ -25,6 +25,7 @@ import com.djrapitops.plan.data.store.objects.DateMap;
|
|||||||
import com.djrapitops.plan.data.time.WorldTimes;
|
import com.djrapitops.plan.data.time.WorldTimes;
|
||||||
import com.djrapitops.plan.db.Database;
|
import com.djrapitops.plan.db.Database;
|
||||||
import com.djrapitops.plan.db.access.queries.analysis.ActivityIndexQueries;
|
import com.djrapitops.plan.db.access.queries.analysis.ActivityIndexQueries;
|
||||||
|
import com.djrapitops.plan.db.access.queries.analysis.NetworkActivityIndexQueries;
|
||||||
import com.djrapitops.plan.db.access.queries.analysis.PlayerCountQueries;
|
import com.djrapitops.plan.db.access.queries.analysis.PlayerCountQueries;
|
||||||
import com.djrapitops.plan.db.access.queries.objects.*;
|
import com.djrapitops.plan.db.access.queries.objects.*;
|
||||||
import com.djrapitops.plan.system.database.DBSystem;
|
import com.djrapitops.plan.system.database.DBSystem;
|
||||||
@ -169,6 +170,27 @@ public class GraphJSONParser {
|
|||||||
return dataMap;
|
return dataMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> activityGraphsJSONAsMap() {
|
||||||
|
Database db = dbSystem.getDatabase();
|
||||||
|
long date = System.currentTimeMillis();
|
||||||
|
Long threshold = config.get(TimeSettings.ACTIVE_PLAY_THRESHOLD);
|
||||||
|
|
||||||
|
DateMap<Map<String, Integer>> activityData = new DateMap<>();
|
||||||
|
for (long time = date; time >= date - TimeAmount.MONTH.toMillis(2L); time -= TimeAmount.WEEK.toMillis(1L)) {
|
||||||
|
activityData.put(time, db.query(NetworkActivityIndexQueries.fetchActivityIndexGroupingsOn(time, threshold)));
|
||||||
|
}
|
||||||
|
|
||||||
|
Map.Entry<Long, Map<String, Integer>> lastActivityEntry = activityData.lastEntry();
|
||||||
|
Pie activityPie = graphs.pie().activityPie(lastActivityEntry != null ? lastActivityEntry.getValue() : Collections.emptyMap());
|
||||||
|
StackGraph activityStackGraph = graphs.stack().activityStackGraph(activityData);
|
||||||
|
|
||||||
|
Map<String, Object> dataMap = new HashMap<>();
|
||||||
|
dataMap.put("activity_series", activityStackGraph.getDataSets());
|
||||||
|
dataMap.put("activity_labels", activityStackGraph.getLabels());
|
||||||
|
dataMap.put("activity_pie_series", activityPie.getSlices());
|
||||||
|
return dataMap;
|
||||||
|
}
|
||||||
|
|
||||||
public Map<String, Object> geolocationGraphsJSONAsMap(UUID serverUUID) {
|
public Map<String, Object> geolocationGraphsJSONAsMap(UUID serverUUID) {
|
||||||
Database db = dbSystem.getDatabase();
|
Database db = dbSystem.getDatabase();
|
||||||
Map<String, Integer> geolocationCounts = db.query(GeoInfoQueries.serverGeolocationCounts(serverUUID));
|
Map<String, Integer> geolocationCounts = db.query(GeoInfoQueries.serverGeolocationCounts(serverUUID));
|
||||||
|
@ -54,10 +54,15 @@ public class GraphsJSONHandler implements PageHandler {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Response getResponse(Request request, RequestTarget target) throws WebException {
|
public Response getResponse(Request request, RequestTarget target) throws WebException {
|
||||||
UUID serverUUID = identifiers.getServerUUID(target); // Can throw BadRequestException
|
|
||||||
String type = target.getParameter("type")
|
String type = target.getParameter("type")
|
||||||
.orElseThrow(() -> new BadRequestException("'type' parameter was not defined."));
|
.orElseThrow(() -> new BadRequestException("'type' parameter was not defined."));
|
||||||
return generateGraphDataJSONOfType(type, serverUUID);
|
|
||||||
|
if (target.getParameter("server").isPresent()) {
|
||||||
|
UUID serverUUID = identifiers.getServerUUID(target); // Can throw BadRequestException
|
||||||
|
return generateGraphDataJSONOfType(type, serverUUID);
|
||||||
|
}
|
||||||
|
// Assume network
|
||||||
|
return generateGraphDataJSONOfType(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private JSONResponse generateGraphDataJSONOfType(String type, UUID serverUUID) throws BadRequestException {
|
private JSONResponse generateGraphDataJSONOfType(String type, UUID serverUUID) throws BadRequestException {
|
||||||
@ -83,6 +88,15 @@ public class GraphsJSONHandler implements PageHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JSONResponse generateGraphDataJSONOfType(String type) throws BadRequestException {
|
||||||
|
switch (type) {
|
||||||
|
case "activity":
|
||||||
|
return new JSONResponse(graphJSON.activityGraphsJSONAsMap());
|
||||||
|
default:
|
||||||
|
throw new BadRequestException("unknown 'type' parameter: " + type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAuthorized(Authentication auth, RequestTarget target) throws WebUserAuthException {
|
public boolean isAuthorized(Authentication auth, RequestTarget target) throws WebUserAuthException {
|
||||||
return auth.getWebUser().getPermLevel() <= 0;
|
return auth.getWebUser().getPermLevel() <= 0;
|
||||||
|
@ -1288,6 +1288,19 @@
|
|||||||
setLoadingText('Calculating values..');
|
setLoadingText('Calculating values..');
|
||||||
jsonRequest("../v1/network/playerbaseOverview", loadPlayerbaseOverviewValues);
|
jsonRequest("../v1/network/playerbaseOverview", loadPlayerbaseOverviewValues);
|
||||||
setLoadingText('Rendering graphs..');
|
setLoadingText('Rendering graphs..');
|
||||||
|
|
||||||
|
jsonRequest("../v1/graph?type=activity", function (json, error) {
|
||||||
|
if (json) {
|
||||||
|
activityPie('activityPie', {
|
||||||
|
name: 'Players', colorByPoint: true, data: json.activity_pie_series
|
||||||
|
});
|
||||||
|
stackChart('activityStackGraph', json.activity_labels, json.activity_series, 'Players');
|
||||||
|
} else if (error) {
|
||||||
|
$('#activityPie').text("Failed to load graph data: " + error);
|
||||||
|
$('#activityStackGraph').text("Failed to load graph data: " + error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
setLoadingText('Sorting players table..');
|
setLoadingText('Sorting players table..');
|
||||||
setLoadingText('Almost done..');
|
setLoadingText('Almost done..');
|
||||||
var navButtons = document.getElementsByClassName("nav-button");
|
var navButtons = document.getElementsByClassName("nav-button");
|
||||||
|
Loading…
Reference in New Issue
Block a user