diff --git a/package-lock.json b/package-lock.json index 2eb47f0..6c03585 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "uptime-status", + "name": "jj-status", "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "uptime-status", + "name": "jj-status", "version": "2.0.0", "license": "MIT", "dependencies": { @@ -14,6 +14,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "^5.0.1", + "react-simple-typewriter": "^5.0.1", "react-tooltip": "^4.2.21", "sass": "^1.53.0" } @@ -13538,6 +13539,18 @@ } } }, + "node_modules/react-simple-typewriter": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/react-simple-typewriter/-/react-simple-typewriter-5.0.1.tgz", + "integrity": "sha512-vA5HkABwJKL/DJ4RshSlY/igdr+FiVY4MLsSQYJX6FZG/f1/VwN4y1i3mPXRyfaswrvI8xii1kOVe1dYtO2Row==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=18.0.0", + "react-dom": ">=18.0.0" + } + }, "node_modules/react-tooltip": { "version": "4.2.21", "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.21.tgz", @@ -25752,6 +25765,12 @@ "workbox-webpack-plugin": "^6.4.1" } }, + "react-simple-typewriter": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/react-simple-typewriter/-/react-simple-typewriter-5.0.1.tgz", + "integrity": "sha512-vA5HkABwJKL/DJ4RshSlY/igdr+FiVY4MLsSQYJX6FZG/f1/VwN4y1i3mPXRyfaswrvI8xii1kOVe1dYtO2Row==", + "requires": {} + }, "react-tooltip": { "version": "4.2.21", "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.2.21.tgz", diff --git a/package.json b/package.json index 46ff21b..3be919d 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "uptime-status", + "name": "jj-status", "version": "2.0.0", "license": "MIT", "scripts": { @@ -12,6 +12,7 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "react-scripts": "^5.0.1", + "react-simple-typewriter": "^5.0.1", "react-tooltip": "^4.2.21", "sass": "^1.53.0" }, diff --git a/public/config.js b/public/config.js index 6ff2f72..fe57c76 100644 --- a/public/config.js +++ b/public/config.js @@ -1,15 +1,12 @@ window.Config = { // 显示标题 - SiteName: 'Public Status', + SiteName: '站点检测', // UptimeRobot Api Keys // 支持 Monitor-Specific 和 Read-Only ApiKeys: [ - 'm784488775-dd1ad84b209c05f8e185c33e', - 'm784490063-7b5da437e7f1e0d67613714d', - 'm784497419-de55aa09902ccb3ab22d548a', - 'm784496436-71a4bf7b1e3bdf7756be131b', + 'ur2648744-49ccec99d7a4ea70c9e441f3' ], // 日志天数 @@ -21,16 +18,17 @@ window.Config = { // 导航栏菜单 Navi: [ { - text: 'Homepage', - url: 'https://status.org.cn/' + text: 'Blog', + url: 'https://wzue.cn/' + }, + { + text: '云助手', + url: 'https://mz.wzue.cn/' }, { text: 'GitHub', - url: 'https://github.com/yb/uptime-status' - }, - { - text: 'Blog', - url: 'https://abo.xyz/' + url: 'https://github.com/9075512' }, + ], }; diff --git a/public/index.html b/public/index.html index 164e6bc..09cdc01 100644 --- a/public/index.html +++ b/public/index.html @@ -9,6 +9,7 @@ Uptime Status +
diff --git a/src/app.scss b/src/app.scss index 6124068..f1f1b68 100644 --- a/src/app.scss +++ b/src/app.scss @@ -27,7 +27,7 @@ a { } #header { - background-color: #121a26; + background-color: $primary-color; padding: 30px 0 60px 0; color: $primary-color; width: 100%; @@ -39,6 +39,7 @@ a { .logo { font-size: 20px; font-weight: bold; + color: #ffffff; } .navi { font-size: 14px; @@ -48,7 +49,7 @@ a { transition: color ease 150ms; } a:hover { - color: $primary-color; + // color: $primary-color; } } } @@ -170,4 +171,9 @@ a { font-weight: bold; color: $primary-color; } + .hitokoto{ + font-weight: bold; + color: $primary-color; + cursor: pointer; + } } diff --git a/src/common/hitokoto.js b/src/common/hitokoto.js new file mode 100644 index 0000000..78e5f71 --- /dev/null +++ b/src/common/hitokoto.js @@ -0,0 +1,6 @@ +import axios from 'axios'; + +export async function GetHitokoto() { + const response = await axios.get('https://v1.hitokoto.cn'); + return response; +} diff --git a/src/components/app.js b/src/components/app.js index 7741471..d92c14d 100644 --- a/src/components/app.js +++ b/src/components/app.js @@ -1,30 +1,54 @@ -import { useMemo } from 'react'; -import Link from './link'; -import Header from './header'; -import UptimeRobot from './uptimerobot'; -import Package from '../../package.json'; +import { useMemo } from "react"; +import Link from "./link"; +import Header from "./header"; +import UptimeRobot from "./uptimerobot"; +import Package from "../../package.json"; +import { GetHitokoto } from "../common/hitokoto"; +import { useEffect, useState } from "react"; +import { Typewriter } from 'react-simple-typewriter' function App() { - const apikeys = useMemo(() => { const { ApiKeys } = window.Config; if (Array.isArray(ApiKeys)) return ApiKeys; - if (typeof ApiKeys === 'string') return [ApiKeys]; + if (typeof ApiKeys === "string") return [ApiKeys]; return []; }, []); + const [hitokoto, setHitokoto] = useState(['结局是什么,我们自己决定!']); + + function getText() { + GetHitokoto().then(({ data }) => { + setHitokoto([...hitokoto,data.hitokoto]); + }); + } + + useEffect(() => { + getText(); + }, []); + return ( <>
-
-
+
+
{apikeys.map((key) => ( ))}
- diff --git a/src/components/uptimerobot.js b/src/components/uptimerobot.js index 4f6ee9b..a931658 100644 --- a/src/components/uptimerobot.js +++ b/src/components/uptimerobot.js @@ -1,15 +1,14 @@ -import ReactTooltip from 'react-tooltip'; -import { useEffect, useState } from 'react'; -import { GetMonitors } from '../common/uptimerobot'; -import { formatDuration, formatNumber } from '../common/helper'; -import Link from './link'; +import ReactTooltip from "react-tooltip"; +import { useEffect, useState } from "react"; +import { GetMonitors } from "../common/uptimerobot"; +import { formatDuration, formatNumber } from "../common/helper"; +import Link from "./link"; function UptimeRobot({ apikey }) { - const status = { - ok: '正常', - down: '无法访问', - unknow: '未知' + ok: "正常", + down: "无法访问", + unknow: "未知", }; const { CountDays, ShowLink } = window.Config; @@ -20,50 +19,65 @@ function UptimeRobot({ apikey }) { GetMonitors(apikey, CountDays).then(setMonitors); }, [apikey, CountDays]); - if (monitors) return monitors.map((site) => ( -
-
- - {ShowLink && } - {status[site.status]} + if (monitors) + return monitors.map((site) => ( +
+
+ + {ShowLink && } + {status[site.status]} +
+
+ {site.daily.map((data, index) => { + let status = ""; + let text = data.date.format("YYYY-MM-DD "); + if (data.uptime >= 100) { + status = "ok"; + text += `可用率 ${formatNumber(data.uptime)}%`; + } else if (data.uptime <= 0 && data.down.times === 0) { + status = "none"; + text += "无数据"; + } else { + status = "down"; + text += `故障 ${data.down.times} 次,累计 ${formatDuration( + data.down.duration + )},可用率 ${formatNumber(data.uptime)}%`; + } + return ; + })} +
+
+ 今天 + + {site.total.times + ? `最近 ${CountDays} 天故障 ${ + site.total.times + } 次,累计 ${formatDuration(site.total.duration)},平均可用率 ${ + site.average + }%` + : `最近 ${CountDays} 天可用率 ${site.average}%`} + + + {site.daily[site.daily.length - 1].date.format("YYYY-MM-DD")} + +
+
-
- {site.daily.map((data, index) => { - let status = ''; - let text = data.date.format('YYYY-MM-DD '); - if (data.uptime >= 100) { - status = 'ok'; - text += `可用率 ${formatNumber(data.uptime)}%`; - } - else if (data.uptime <= 0 && data.down.times === 0) { - status = 'none'; - text += '无数据'; - } - else { - status = 'down'; - text += `故障 ${data.down.times} 次,累计 ${formatDuration(data.down.duration)},可用率 ${formatNumber(data.uptime)}%`; - } - return () - })} + )); + else + return ( +
+
-
- 今天 - - {site.total.times - ? `最近 ${CountDays} 天故障 ${site.total.times} 次,累计 ${formatDuration(site.total.duration)},平均可用率 ${site.average}%` - : `最近 ${CountDays} 天可用率 ${site.average}%`} - - {site.daily[site.daily.length - 1].date.format('YYYY-MM-DD')} -
- -
- )); - - else return ( -
-
-
- ); + ); } export default UptimeRobot;