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