Skip to content

Commit 20f5079

Browse files
committed
Optimize PlayersOnlineTooltip requests on 0 player points
1 parent 6b0bdd1 commit 20f5079

6 files changed

Lines changed: 37 additions & 48 deletions

File tree

Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/PlayersOnlineJSONResolver.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public boolean canAccess(Request request) {
8080
@ApiResponse(responseCode = "400", description = "If 'date' parameter is not specified or invalid")
8181
},
8282
parameters = {
83-
@Parameter(in = ParameterIn.QUERY, name = "date", description = "Epoch millisecond", required = true),
83+
@Parameter(in = ParameterIn.QUERY, name = "date", description = "Epoch millisecond"),
8484
@Parameter(in = ParameterIn.QUERY, name = "server", description = "Server UUID")
8585
},
8686
requestBody = @RequestBody(content = @Content(examples = @ExampleObject()))
@@ -95,8 +95,7 @@ public Optional<Response> resolve(Request request) {
9595
private List<PlayerIdentifier> getResponse(Request request) {
9696
URIQuery query = request.getQuery();
9797
try {
98-
Long date = query.get("date").map(Long::parseLong)
99-
.orElseThrow(() -> new BadRequestException("Missing date"));
98+
long date = query.get("date").map(Long::parseLong).orElseGet(System::currentTimeMillis);
10099
if (query.get("server").isPresent()) {
101100
ServerUUID serverUUID = identifiers.getServerUUID(request);
102101
return jsonFactory.playersOnlineOn(date, serverUUID);

Plan/common/src/main/java/com/djrapitops/plan/settings/locale/lang/HtmlLang.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,7 @@ public enum HtmlLang implements Lang {
537537
LABEL_WEEK_DAYS("html.label.weekdays", "'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'"),
538538
QUERY_ARE_ACTIVITY_GROUP("html.query.filter.activity.text", "are in Activity Groups"),
539539
QUERY_ON_DATE("html.query.filter.onDate", "on"),
540-
QUERY_ON_SERVER("html.query.filter.onDate", "on server(s)"),
540+
QUERY_ON_SERVER("html.query.filter.onServer", "on server(s)"),
541541
QUERY_ANY_SERVER("html.query.filter.anyServer", "any server"),
542542
QUERY_JOINED_WITH_ADDRESS("html.query.filter.joinAddress.text", "joined with address"),
543543
QUERY_JOINED_FROM_COUNTRY("html.query.filter.country.text", "have joined from country"),

Plan/common/src/test/java/com/djrapitops/plan/delivery/webserver/AccessControlTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,9 @@ static Stream<Arguments> testCases() {
172172
Arguments.of("/theme-editor", WebPermission.ACCESS_THEME_EDITOR, 200, 403),
173173
Arguments.of("/theme-editor/new", WebPermission.ACCESS_THEME_EDITOR, 200, 403),
174174
Arguments.of("/theme-editor/delete", WebPermission.ACCESS_THEME_EDITOR, 200, 403),
175-
Arguments.of("/theme-editor/default", WebPermission.ACCESS_THEME_EDITOR, 200, 403)
175+
Arguments.of("/theme-editor/default", WebPermission.ACCESS_THEME_EDITOR, 200, 403),
176+
Arguments.of("/v1/playersOnline", WebPermission.PAGE_NETWORK_OVERVIEW_GRAPHS_ONLINE, 200, 403),
177+
Arguments.of("/v1/playersOnline?server=" + TestConstants.SERVER_UUID_STRING, WebPermission.PAGE_SERVER_OVERVIEW_PLAYERS_ONLINE_GRAPH, 200, 403)
176178
);
177179
}
178180

Plan/react/dashboard/src/components/graphs/PlayersOnlineGraph.jsx

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {useTranslation} from "react-i18next";
33
import {tooltip} from "../../util/graphs";
44
import LineGraph from "./LineGraph";
55
import {ChartLoader} from "../navigation/Loader";
6-
import {PlayersOnlineTooltip} from "./tooltip/PlayersOnlineTooltip.jsx";
6+
import {PlayersOnlineTooltip, useTooltipOptions} from "./tooltip/PlayersOnlineTooltip.jsx";
77

88

99
const PlayersOnlineGraph = ({data, identifier, selectedRange, extremes, onSetExtremes, color, showPlayersOnline}) => {
@@ -24,31 +24,15 @@ const PlayersOnlineGraph = ({data, identifier, selectedRange, extremes, onSetExt
2424

2525
const [hoveredDate, setHoveredDate] = useState(undefined);
2626
const onMouseLeave = () => setHoveredDate(undefined);
27-
const extraOptions = useMemo(() => {
28-
return showPlayersOnline ? {
29-
plotOptions: {
30-
series: {
31-
point: {
32-
events: {
33-
mouseOver: e => {
34-
setHoveredDate(e.target.x)
35-
},
36-
click: e => {
37-
setHoveredDate(e.target.point.x)
38-
}
39-
}
40-
}
41-
}
42-
}
43-
} : {};
44-
}, [showPlayersOnline, setHoveredDate]);
27+
const extraOptions = useTooltipOptions(showPlayersOnline, setHoveredDate);
4528

4629
if (!data) return <ChartLoader/>;
4730

4831
return (
4932
<>
5033
{showPlayersOnline && (
51-
<PlayersOnlineTooltip id="players-online-graph" hoveredDate={hoveredDate} identifier={identifier}/>)}
34+
<PlayersOnlineTooltip id="players-online-graph" hoveredDate={hoveredDate} identifier={identifier}/>
35+
)}
5236
<LineGraph id="players-online-graph"
5337
series={series}
5438
selectedRange={selectedRange}

Plan/react/dashboard/src/components/graphs/StackedPlayersOnlineGraph.jsx

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import React, {useEffect, useMemo, useState} from "react";
1+
import React, {useEffect, useState} from "react";
22
import {useTranslation} from "react-i18next";
33
import {tooltip, translateLinegraphButtons} from "../../util/graphs";
44
import LineGraph from './LineGraph'
55
import {ChartLoader} from "../navigation/Loader";
66
import {useTheme} from "../../hooks/themeHook";
7-
import {PlayersOnlineTooltip} from "./tooltip/PlayersOnlineTooltip.jsx";
7+
import {PlayersOnlineTooltip, useTooltipOptions} from "./tooltip/PlayersOnlineTooltip.jsx";
88

99
const StackedPlayersOnlineGraph = ({data}) => {
1010
const {t} = useTranslation();
@@ -66,31 +66,14 @@ const StackedPlayersOnlineGraph = ({data}) => {
6666

6767
const [hoveredDate, setHoveredDate] = useState(undefined);
6868
const onMouseLeave = () => setHoveredDate(undefined);
69-
const extraOptions = useMemo(() => {
70-
return showPlayersOnline ? {
71-
plotOptions: {
72-
series: {
73-
point: {
74-
events: {
75-
mouseOver: e => {
76-
setHoveredDate(e.target.x)
77-
},
78-
click: e => {
79-
setHoveredDate(e.target.point.x)
80-
}
81-
}
82-
}
83-
}
84-
}
85-
} : {};
86-
}, [showPlayersOnline, setHoveredDate]);
69+
70+
const extraOptions = useTooltipOptions(showPlayersOnline, setHoveredDate);
8771

8872
if (!data) return <ChartLoader/>;
8973

9074
return (
9175
<>
92-
{showPlayersOnline && (<PlayersOnlineTooltip id="stacked-players-online-graph" hoveredDate={hoveredDate}
93-
identifier={null}/>)}
76+
<PlayersOnlineTooltip id="stacked-players-online-graph" hoveredDate={hoveredDate} identifier={null}/>
9477
<LineGraph id="stacked-players-online-graph"
9578
options={graphOptions} extraOptions={extraOptions} onMouseLeave={onMouseLeave}/>
9679
</>

Plan/react/dashboard/src/components/graphs/tooltip/PlayersOnlineTooltip.jsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,30 @@
11
import {useTranslation} from "react-i18next";
2-
import React, {useCallback, useEffect, useState} from "react";
2+
import React, {useCallback, useEffect, useMemo, useState} from "react";
33
import {fetchPlayersOnline} from "../../../service/serverService.js";
44
import {Card, CardBody} from "react-bootstrap";
55
import FormattedDate from "../../text/FormattedDate.jsx";
66

7+
export const useTooltipOptions = (showPlayersOnline, setHoveredDate) => {
8+
return useMemo(() => {
9+
return showPlayersOnline ? {
10+
plotOptions: {
11+
series: {
12+
point: {
13+
events: {
14+
mouseOver: e => {
15+
setHoveredDate(e.target.y > 0 ? e.target.x : undefined)
16+
},
17+
click: e => {
18+
setHoveredDate(e.target.point.y > 0 ? e.target.point.x : undefined)
19+
}
20+
}
21+
}
22+
}
23+
}
24+
} : {};
25+
}, [showPlayersOnline, setHoveredDate]);
26+
}
27+
728
export const PlayersOnlineTooltip = ({id, hoveredDate, identifier}) => {
829
const {t} = useTranslation();
930

0 commit comments

Comments
 (0)