diff --git a/libs/stats.js b/libs/stats.js
new file mode 100644
index 0000000..e73980c
--- /dev/null
+++ b/libs/stats.js
@@ -0,0 +1,21 @@
+const stats = {
+ apiqps: 0,
+ lastAccess: 0,
+};
+
+const addAPIQPS = () => {
+ stats.apiqps++;
+ clearStats();
+};
+
+const clearStats = () => {
+ const now = Date.now();
+ if (stats.lastAccess + 1000 < now) {
+ const now_formated = new Date(now).toISOString();
+ console.log(`${now_formated} - APIQPS: ${stats.apiqps}`);
+ stats.apiqps = parseInt(stats.apiqps / 3);
+ stats.lastAccess = now;
+ }
+};
+
+export { stats, addAPIQPS };
diff --git a/pages/api/stats.js b/pages/api/stats.js
new file mode 100644
index 0000000..0c69cfe
--- /dev/null
+++ b/pages/api/stats.js
@@ -0,0 +1,7 @@
+import { stats, addAPIQPS } from "../../libs/stats";
+
+export default function handler(req, res) {
+ addAPIQPS();
+ res.setHeader("Cache-Control", "no-cache no-store must-revalidate");
+ res.status(200).json(stats);
+}
diff --git a/pages/api/time/limit.js b/pages/api/time/limit.js
index 6ee568b..97505ba 100644
--- a/pages/api/time/limit.js
+++ b/pages/api/time/limit.js
@@ -1,6 +1,8 @@
import { authenticate, setLimit, getLimit } from "../../../libs/db";
+import { addAPIQPS } from "../../../libs/stats";
export default function handler(req, res) {
+ addAPIQPS();
// put method
if (req.method === "PUT") {
const { token, limit } = req.body;
diff --git a/pages/api/time/ranges.js b/pages/api/time/ranges.js
index 158bc8a..fbfc92f 100644
--- a/pages/api/time/ranges.js
+++ b/pages/api/time/ranges.js
@@ -1,6 +1,9 @@
import { authenticate, getTimeRanges, insertTimeRange } from "../../../libs/db";
+import { addAPIQPS } from "../../../libs/stats";
+
export default function handler(req, res) {
+ addAPIQPS();
// get method
if (req.method === "GET") {
res.setHeader("Cache-Control", "no-cache no-store must-revalidate");
diff --git a/pages/api/time/ranges/[id].js b/pages/api/time/ranges/[id].js
index 139b9f4..36a540a 100644
--- a/pages/api/time/ranges/[id].js
+++ b/pages/api/time/ranges/[id].js
@@ -5,7 +5,10 @@ import {
updateUsernameWithLimit,
} from "../../../../libs/db";
+import { addAPIQPS } from '../../../../libs/stats';
+
export default function handler(req, res) {
+ addAPIQPS();
// check if id is valid
const { id } = req.query;
if (id === undefined) {
diff --git a/pages/api/time/started.js b/pages/api/time/started.js
index 379f67a..eb5fb5b 100644
--- a/pages/api/time/started.js
+++ b/pages/api/time/started.js
@@ -1,6 +1,8 @@
import { authenticate, getStarted, setStarted } from "../../../libs/db";
+import { addAPIQPS } from "../../../libs/stats";
export default function handler(req, res) {
+ addAPIQPS();
// get method
if (req.method === "GET") {
res.setHeader("Cache-Control", "no-cache no-store must-revalidate");
diff --git a/pages/time.js b/pages/time.js
index 878fa21..bc4b44c 100644
--- a/pages/time.js
+++ b/pages/time.js
@@ -16,9 +16,9 @@ import {
} from "@mui/material";
import { useEffect, useState } from "react";
import { useRouter } from "next/router";
-import config from '../next.config';
+import config from "../next.config";
-const prefix = config.basePath ? config.basePath : '';
+const prefix = config.basePath ? config.basePath : "";
export default function Time(props) {
const [ranges, setRanges] = useState([]);
@@ -29,9 +29,20 @@ export default function Time(props) {
const [snackbarSuccess, setSnackbarSuccess] = useState(false);
const [limit, setLimit] = useState(1);
const [token, setToken] = useState("");
+ const [stats, setStats] = useState({});
const router = useRouter();
+ const getStats = () => {
+ fetch(`${prefix}/api/stats`, {
+ method: "GET",
+ })
+ .then((res) => res.json())
+ .then((res) => {
+ setStats(res);
+ });
+ };
+
const setStarted = (started) => {
fetch(`${prefix}/api/time/started`, {
method: "PUT",
@@ -98,6 +109,7 @@ export default function Time(props) {
const refreshRanges = () => {
getLimit();
+ getStats();
fetch(`${prefix}/api/time/ranges`)
.then((res) => res.json())
.then((res) => {
@@ -275,13 +287,20 @@ export default function Time(props) {
}}
>
- 当前每人排班数量上限:{limit}
+
+ 当前每人数量上限: {limit}
+
+ 服务器负载 (QPS): {stats.apiqps}
+