diff --git a/client/src/Components/Charts/StatusPageBarChart/index.jsx b/client/src/Components/Charts/StatusPageBarChart/index.jsx index e8a34806d..eab0c7d1d 100644 --- a/client/src/Components/Charts/StatusPageBarChart/index.jsx +++ b/client/src/Components/Charts/StatusPageBarChart/index.jsx @@ -1,7 +1,7 @@ import { useTheme } from "@emotion/react"; import { Box, Stack, Tooltip, Typography } from "@mui/material"; import { formatDateWithTz } from "../../../Utils/timeUtils"; -import { useEffect, useState } from "react"; +import { useEffect, useState, forwardRef } from "react"; import { useSelector } from "react-redux"; import PropTypes from "prop-types"; @@ -17,23 +17,29 @@ import PropTypes from "prop-types"; * @returns {JSX.Element} The Bar component. */ -const Bar = ({ width, height, backgroundColor, borderRadius, children }) => { - const theme = useTheme(); +const Bar = forwardRef( + ({ width, height, backgroundColor, borderRadius, children, ...otherProps }, ref) => { + const theme = useTheme(); - return ( - - {children} - - ); -}; + return ( + + {children} + + ); + } +); + +Bar.displayName = "Bar"; Bar.propTypes = { width: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired, diff --git a/client/src/Pages/StatusPage/Status/Components/MonitorsList/index.jsx b/client/src/Pages/StatusPage/Status/Components/MonitorsList/index.jsx index 1097cf1da..545974c57 100644 --- a/client/src/Pages/StatusPage/Status/Components/MonitorsList/index.jsx +++ b/client/src/Pages/StatusPage/Status/Components/MonitorsList/index.jsx @@ -11,7 +11,12 @@ import PropTypes from "prop-types"; import { useSelector } from "react-redux"; -const MonitorsList = ({ isLoading = false, shouldRender = true, monitors = [] }) => { +const MonitorsList = ({ + isLoading = false, + shouldRender = true, + monitors = [], + statusPage = {}, +}) => { const theme = useTheme(); const { determineState } = useMonitorUtils(); @@ -40,10 +45,12 @@ const MonitorsList = ({ isLoading = false, shouldRender = true, monitors = [] }) alignItems="center" gap={theme.spacing(20)} > - - - - + {statusPage.showCharts !== false && ( + + + + )} + { /> {t("statusPageStatusServiceStatus")} - + {link} ); diff --git a/client/vite.config.js b/client/vite.config.js index bc2ab42a4..a90b67462 100644 --- a/client/vite.config.js +++ b/client/vite.config.js @@ -5,7 +5,7 @@ import { execSync } from "child_process"; export default defineConfig(({ mode }) => { const env = loadEnv(mode, process.cwd(), ""); - let version = "3.1.5"; + let version = "3.1.7"; return { base: "/", diff --git a/docker/coolify/server.Dockerfile b/docker/coolify/server.Dockerfile index 6cb685571..238bd404c 100755 --- a/docker/coolify/server.Dockerfile +++ b/docker/coolify/server.Dockerfile @@ -1,5 +1,10 @@ FROM node:20-slim +# Install ping +RUN apt-get update \ + && apt-get install -y iputils-ping \ + && rm -rf /var/lib/apt/lists/* + WORKDIR /app COPY ../../package*.json ./ diff --git a/docker/dev/server.Dockerfile b/docker/dev/server.Dockerfile index 0108588e3..d24bff63f 100755 --- a/docker/dev/server.Dockerfile +++ b/docker/dev/server.Dockerfile @@ -1,5 +1,10 @@ FROM node:20-slim +# Install ping +RUN apt-get update \ + && apt-get install -y iputils-ping \ + && rm -rf /var/lib/apt/lists/* + WORKDIR /app COPY ./server/package*.json ./ diff --git a/docker/dist-arm/server.Dockerfile b/docker/dist-arm/server.Dockerfile index 3aee87abd..3a4aa755d 100644 --- a/docker/dist-arm/server.Dockerfile +++ b/docker/dist-arm/server.Dockerfile @@ -3,6 +3,11 @@ # --------------------- FROM node:24-slim AS frontend-build +# Install ping +RUN apt-get update \ + && apt-get install -y iputils-ping \ + && rm -rf /var/lib/apt/lists/* + WORKDIR /app/client COPY client/package.json ./ diff --git a/docker/dist-mono/server.Dockerfile b/docker/dist-mono/server.Dockerfile index 778c822f6..7304d9995 100644 --- a/docker/dist-mono/server.Dockerfile +++ b/docker/dist-mono/server.Dockerfile @@ -1,5 +1,10 @@ FROM node:20-slim AS frontend-build +# Install ping +RUN apt-get update \ + && apt-get install -y iputils-ping \ + && rm -rf /var/lib/apt/lists/* + WORKDIR /app/client COPY client/package*.json ./ diff --git a/docker/dist/server.Dockerfile b/docker/dist/server.Dockerfile index 0108588e3..d24bff63f 100755 --- a/docker/dist/server.Dockerfile +++ b/docker/dist/server.Dockerfile @@ -1,5 +1,10 @@ FROM node:20-slim +# Install ping +RUN apt-get update \ + && apt-get install -y iputils-ping \ + && rm -rf /var/lib/apt/lists/* + WORKDIR /app COPY ./server/package*.json ./ diff --git a/docker/prod/server.Dockerfile b/docker/prod/server.Dockerfile index 672f8be0b..b78de2e33 100755 --- a/docker/prod/server.Dockerfile +++ b/docker/prod/server.Dockerfile @@ -1,5 +1,10 @@ FROM node:20-slim +# Install ping +RUN apt-get update \ + && apt-get install -y iputils-ping \ + && rm -rf /var/lib/apt/lists/* + ENV NODE_OPTIONS="--max-old-space-size=2048" WORKDIR /app diff --git a/docker/staging/server.Dockerfile b/docker/staging/server.Dockerfile index 672f8be0b..b78de2e33 100755 --- a/docker/staging/server.Dockerfile +++ b/docker/staging/server.Dockerfile @@ -1,5 +1,10 @@ FROM node:20-slim +# Install ping +RUN apt-get update \ + && apt-get install -y iputils-ping \ + && rm -rf /var/lib/apt/lists/* + ENV NODE_OPTIONS="--max-old-space-size=2048" WORKDIR /app diff --git a/server/src/db/mongo/modules/statusPageModule.js b/server/src/db/mongo/modules/statusPageModule.js index 10710d0f7..aadde0c81 100755 --- a/server/src/db/mongo/modules/statusPageModule.js +++ b/server/src/db/mongo/modules/statusPageModule.js @@ -162,6 +162,14 @@ class StatusPageModule { as: "monitors.checks", }, }, + { + $lookup: { + from: "monitorstats", + localField: "monitors._id", + foreignField: "monitorId", + as: "monitors.stats", + }, + }, { $addFields: { "monitors.orderIndex": { @@ -181,6 +189,9 @@ class StatusPageModule { }, }, }, + "monitors.uptimePercentage": { + $arrayElemAt: ["$monitors.stats.uptimePercentage", 0], + }, }, }, { $match: { "monitors.orderIndex": { $ne: -1 } } }, diff --git a/server/src/service/infrastructure/networkService.js b/server/src/service/infrastructure/networkService.js index d1a1ff108..50cf16b85 100644 --- a/server/src/service/infrastructure/networkService.js +++ b/server/src/service/infrastructure/networkService.js @@ -75,6 +75,9 @@ class NetworkService { const { response, responseTime, error } = await this.timeRequest(() => this.ping.promise.probe(monitor.url)); if (!response) { + if (error) { + throw error; + } throw new Error("Ping failed - no result returned"); }