diff --git a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/MetadataJSONResolver.java b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/MetadataJSONResolver.java index 41e847a3a..9a63b1a5d 100644 --- a/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/MetadataJSONResolver.java +++ b/Plan/common/src/main/java/com/djrapitops/plan/delivery/webserver/resolver/json/MetadataJSONResolver.java @@ -77,6 +77,9 @@ public class MetadataJSONResolver implements NoAuthResolver { return Response.builder() .setJSONContent(Maps.builder(String.class, Object.class) .put("timestamp", System.currentTimeMillis()) + .put("timeZoneId", config.getTimeZone().getID()) + .put("timeZoneOffsetHours", config.getTimeZoneOffsetHours()) + .put("timeZoneOffsetMinutes", config.getTimeZoneOffsetHours() * 60) .put("contributors", Contributors.getContributors()) .put("defaultTheme", config.get(DisplaySettings.THEME)) .put("gmPieColors", theme.getPieColors(ThemeVal.GRAPH_GM_PIE)) diff --git a/Plan/react/dashboard/src/components/graphs/LineGraph.js b/Plan/react/dashboard/src/components/graphs/LineGraph.js index 17129ad4a..8f2b3e652 100644 --- a/Plan/react/dashboard/src/components/graphs/LineGraph.js +++ b/Plan/react/dashboard/src/components/graphs/LineGraph.js @@ -5,10 +5,22 @@ import Highcharts from "highcharts/highstock"; import NoDataDisplay from "highcharts/modules/no-data-to-display" import Accessibility from "highcharts/modules/accessibility" import {useTranslation} from "react-i18next"; +import {useMetadata} from "../../hooks/metadataHook"; -const LineGraph = ({id, series, legendEnabled, tall, yAxis, selectedRange, extremes, onSetExtremes}) => { +const LineGraph = ({ + id, + series, + legendEnabled, + tall, + yAxis, + selectedRange, + extremes, + onSetExtremes, + alreadyOffsetTimezone + }) => { const {t} = useTranslation() const {graphTheming, nightModeEnabled} = useTheme(); + const {timeZoneOffsetMinutes} = useMetadata(); const [graph, setGraph] = useState(undefined); useEffect(() => { @@ -39,9 +51,16 @@ const LineGraph = ({id, series, legendEnabled, tall, yAxis, selectedRange, extre legend: { enabled: legendEnabled }, + time: { + timezoneOffset: alreadyOffsetTimezone ? 0 : timeZoneOffsetMinutes + }, series: series })); - }, [series, graphTheming, id, t, nightModeEnabled, legendEnabled, yAxis, onSetExtremes, setGraph, selectedRange]) + }, [series, id, t, + graphTheming, nightModeEnabled, alreadyOffsetTimezone, timeZoneOffsetMinutes, + legendEnabled, yAxis, + onSetExtremes, setGraph, selectedRange]); + useEffect(() => { if (graph && graph.xAxis && graph.xAxis.length && extremes) { graph.xAxis[0].setExtremes(extremes.min, extremes.max); diff --git a/Plan/react/dashboard/src/components/graphs/TimeByTimeGraph.js b/Plan/react/dashboard/src/components/graphs/TimeByTimeGraph.js index 173adb84f..a291fcfeb 100644 --- a/Plan/react/dashboard/src/components/graphs/TimeByTimeGraph.js +++ b/Plan/react/dashboard/src/components/graphs/TimeByTimeGraph.js @@ -29,7 +29,7 @@ const TimeByTimeGraph = ({data}) => { }, [data, t, nightModeEnabled]) return ( - + ) } diff --git a/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js index 59c6b9a46..5ead86f99 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/AllPerformanceGraph.js @@ -7,6 +7,7 @@ import {useTranslation} from "react-i18next"; import {useTheme} from "../../../hooks/themeHook"; import {withReducedSaturation} from "../../../util/colors"; import Accessibility from "highcharts/modules/accessibility"; +import {useMetadata} from "../../../hooks/metadataHook"; const yAxis = [ { @@ -64,6 +65,7 @@ const yAxis = [ const AllPerformanceGraph = ({id, data, dataSeries}) => { const {t} = useTranslation(); const {graphTheming, nightModeEnabled} = useTheme(); + const {timeZoneOffsetMinutes} = useMetadata(); const onResize = useCallback(() => { let chartElement = document.getElementById(id); @@ -170,9 +172,12 @@ const AllPerformanceGraph = ({id, data, dataSeries}) => { legend: { enabled: true }, + time: { + timezoneOffset: timeZoneOffsetMinutes + }, series: [series.playersOnline, series.tps, series.cpu, series.ram, series.entities, series.chunks] }); - }, [data, dataSeries, graphTheming, nightModeEnabled, id, t]) + }, [data, dataSeries, graphTheming, nightModeEnabled, id, t, timeZoneOffsetMinutes]) return (
diff --git a/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js index 313fa86b5..d25d8a689 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/CpuRamPerformanceGraph.js @@ -7,10 +7,12 @@ import {useTranslation} from "react-i18next"; import {useTheme} from "../../../hooks/themeHook"; import {withReducedSaturation} from "../../../util/colors"; import Accessibility from "highcharts/modules/accessibility"; +import {useMetadata} from "../../../hooks/metadataHook"; const CpuRamPerformanceGraph = ({id, data, dataSeries}) => { const {t} = useTranslation(); const {graphTheming, nightModeEnabled} = useTheme(); + const {timeZoneOffsetMinutes} = useMetadata(); useEffect(() => { const spline = 'spline' @@ -82,9 +84,12 @@ const CpuRamPerformanceGraph = ({id, data, dataSeries}) => { legend: { enabled: true }, + time: { + timezoneOffset: timeZoneOffsetMinutes + }, series: [series.playersOnline, series.cpu, series.ram] }); - }, [data, dataSeries, graphTheming, nightModeEnabled, id, t]) + }, [data, dataSeries, graphTheming, nightModeEnabled, id, t, timeZoneOffsetMinutes]) return (
diff --git a/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js index 1ff2fac55..edb745ef8 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/DiskPerformanceGraph.js @@ -7,10 +7,12 @@ import {useTranslation} from "react-i18next"; import {useTheme} from "../../../hooks/themeHook"; import {withReducedSaturation} from "../../../util/colors"; import Accessibility from "highcharts/modules/accessibility"; +import {useMetadata} from "../../../hooks/metadataHook"; const DiskPerformanceGraph = ({id, data, dataSeries}) => { const {t} = useTranslation(); const {graphTheming, nightModeEnabled} = useTheme(); + const {timeZoneOffsetMinutes} = useMetadata(); useEffect(() => { const zones = { @@ -63,9 +65,12 @@ const DiskPerformanceGraph = ({id, data, dataSeries}) => { legend: { enabled: true }, + time: { + timezoneOffset: timeZoneOffsetMinutes + }, series: [series.disk] }); - }, [data, dataSeries, graphTheming, nightModeEnabled, id, t]) + }, [data, dataSeries, graphTheming, nightModeEnabled, id, t, timeZoneOffsetMinutes]) return (
diff --git a/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js b/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js index d917007df..b96470dd6 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/PingGraph.js @@ -7,10 +7,12 @@ import {useTranslation} from "react-i18next"; import {useTheme} from "../../../hooks/themeHook"; import {withReducedSaturation} from "../../../util/colors"; import Accessibility from "highcharts/modules/accessibility"; +import {useMetadata} from "../../../hooks/metadataHook"; const PingGraph = ({id, data}) => { const {t} = useTranslation(); const {graphTheming, nightModeEnabled} = useTheme(); + const {timeZoneOffsetMinutes} = useMetadata(); useEffect(() => { const spline = 'spline' @@ -60,9 +62,12 @@ const PingGraph = ({id, data}) => { legend: { enabled: true }, + time: { + timezoneOffset: timeZoneOffsetMinutes + }, series: [series.avgPing, series.maxPing, series.minPing] }); - }, [data, graphTheming, nightModeEnabled, id, t]) + }, [data, graphTheming, nightModeEnabled, id, t, timeZoneOffsetMinutes]) return (
diff --git a/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js index 3118e9f94..7fa1f2741 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/TpsPerformanceGraph.js @@ -7,10 +7,12 @@ import {useTranslation} from "react-i18next"; import {useTheme} from "../../../hooks/themeHook"; import {withReducedSaturation} from "../../../util/colors"; import Accessibility from "highcharts/modules/accessibility"; +import {useMetadata} from "../../../hooks/metadataHook"; const TpsPerformanceGraph = ({id, data, dataSeries}) => { const {t} = useTranslation(); const {graphTheming, nightModeEnabled} = useTheme(); + const {timeZoneOffsetMinutes} = useMetadata(); useEffect(() => { const zones = { @@ -79,9 +81,12 @@ const TpsPerformanceGraph = ({id, data, dataSeries}) => { legend: { enabled: true }, + time: { + timezoneOffset: timeZoneOffsetMinutes + }, series: [series.playersOnline, series.tps] }); - }, [data, dataSeries, graphTheming, nightModeEnabled, id, t]) + }, [data, dataSeries, graphTheming, nightModeEnabled, id, t, timeZoneOffsetMinutes]) return (
diff --git a/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js b/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js index 6f239c29d..65bef3d11 100644 --- a/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js +++ b/Plan/react/dashboard/src/components/graphs/performance/WorldPerformanceGraph.js @@ -7,10 +7,12 @@ import {useTranslation} from "react-i18next"; import {useTheme} from "../../../hooks/themeHook"; import {withReducedSaturation} from "../../../util/colors"; import Accessibility from "highcharts/modules/accessibility"; +import {useMetadata} from "../../../hooks/metadataHook"; const WorldPerformanceGraph = ({id, data, dataSeries}) => { const {t} = useTranslation(); const {graphTheming, nightModeEnabled} = useTheme(); + const {timeZoneOffsetMinutes} = useMetadata(); useEffect(() => { const spline = 'spline' @@ -81,9 +83,12 @@ const WorldPerformanceGraph = ({id, data, dataSeries}) => { legend: { enabled: true }, + time: { + timezoneOffset: timeZoneOffsetMinutes + }, series: [series.playersOnline, series.entities, series.chunks] }); - }, [data, dataSeries, graphTheming, nightModeEnabled, id, t]) + }, [data, dataSeries, graphTheming, nightModeEnabled, id, t, timeZoneOffsetMinutes]) return (