From 0832c43d7619c2534ede69d527395d6b57c4a616 Mon Sep 17 00:00:00 2001 From: Borislav Pantaleev Date: Fri, 11 Apr 2025 12:41:47 +0300 Subject: [PATCH] (etke.cc-exclusive) Server Actions page (#457) * WIP: add scheduler commands * refactor scheduler commands page * WIP on CRUD for ScheduledCommands * more refactoring, finish CRUD On scheduled pages * Add info text about Scheduler service * Finish recurring commands add/edit * add more texts * fix server status behavior on not-loaded-yet state; adjust texts; lint fixes * add link to the help pages in the commands palette * Move Commands Panel to ServerSchedulesPage * Rename Server Schedules to Server Actions * more texts, a bit changed visual of the actions page, lint fix * add docs * fix tests * Add UTC label to scheduled command create/edit --- README.md | 1 + screenshots/etke.cc/server-actions/page.webp | Bin 0 -> 89950 bytes src/App.tsx | 10 + src/components/AdminLayout.tsx | 17 +- .../etke.cc/CurrentlyRunningCommand.tsx | 37 +++ src/components/etke.cc/README.md | 17 +- src/components/etke.cc/ServerActionsPage.tsx | 51 ++++ .../etke.cc/ServerCommandsPanel.tsx | 61 ++--- src/components/etke.cc/ServerStatusBadge.tsx | 15 +- src/components/etke.cc/ServerStatusPage.tsx | 41 ++-- .../etke.cc/hooks/useServerCommands.ts | 29 +++ .../components/ScheduledCommandCreate.tsx | 21 ++ .../components/ScheduledCommandEdit.tsx | 0 .../recurring/RecurringCommandEdit.tsx | 182 ++++++++++++++ .../recurring/RecurringCommandsList.tsx | 62 +++++ .../recurring/RecurringDeleteButton.tsx | 65 +++++ .../scheduled/ScheduledCommandEdit.tsx | 141 +++++++++++ .../scheduled/ScheduledCommandShow.tsx | 89 +++++++ .../scheduled/ScheduledCommandsList.tsx | 72 ++++++ .../scheduled/ScheduledDeleteButton.tsx | 65 +++++ .../schedules/hooks/useRecurringCommands.tsx | 15 ++ .../schedules/hooks/useScheduledCommands.tsx | 15 ++ src/i18n/en.ts | 18 ++ src/i18n/index.d.ts | 18 ++ src/pages/LoginPage.test.tsx | 10 +- src/synapse/authProvider.test.ts | 1 + src/synapse/authProvider.ts | 12 +- src/synapse/dataProvider.ts | 232 +++++++++++++++++- 28 files changed, 1235 insertions(+), 62 deletions(-) create mode 100644 screenshots/etke.cc/server-actions/page.webp create mode 100644 src/components/etke.cc/CurrentlyRunningCommand.tsx create mode 100644 src/components/etke.cc/ServerActionsPage.tsx create mode 100644 src/components/etke.cc/hooks/useServerCommands.ts create mode 100644 src/components/etke.cc/schedules/components/ScheduledCommandCreate.tsx create mode 100644 src/components/etke.cc/schedules/components/ScheduledCommandEdit.tsx create mode 100644 src/components/etke.cc/schedules/components/recurring/RecurringCommandEdit.tsx create mode 100644 src/components/etke.cc/schedules/components/recurring/RecurringCommandsList.tsx create mode 100644 src/components/etke.cc/schedules/components/recurring/RecurringDeleteButton.tsx create mode 100644 src/components/etke.cc/schedules/components/scheduled/ScheduledCommandEdit.tsx create mode 100644 src/components/etke.cc/schedules/components/scheduled/ScheduledCommandShow.tsx create mode 100644 src/components/etke.cc/schedules/components/scheduled/ScheduledCommandsList.tsx create mode 100644 src/components/etke.cc/schedules/components/scheduled/ScheduledDeleteButton.tsx create mode 100644 src/components/etke.cc/schedules/hooks/useRecurringCommands.tsx create mode 100644 src/components/etke.cc/schedules/hooks/useScheduledCommands.tsx diff --git a/README.md b/README.md index 590d978..f4a1a0a 100644 --- a/README.md +++ b/README.md @@ -122,6 +122,7 @@ The following list contains such features - they are only available for [etke.cc * 📊 [Server Status indicator and page](https://github.com/etkecc/synapse-admin/pull/182) * 📬 [Server Notifications indicator and page](https://github.com/etkecc/synapse-admin/pull/240) * 🛠️ [Server Commands panel](https://github.com/etkecc/synapse-admin/pull/365) +* 🚀 [Server Actions page](https://github.com/etkecc/synapse-admin/pull/457) ### Development diff --git a/screenshots/etke.cc/server-actions/page.webp b/screenshots/etke.cc/server-actions/page.webp new file mode 100644 index 0000000000000000000000000000000000000000..0b8f3359a2a90e99f246bac54bedada1b475dd46 GIT binary patch literal 89950 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

9!w(ro0q-5gt`VUi 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 DU;t(b literal 0 HcmV?d00001 diff --git a/src/App.tsx b/src/App.tsx index 2b5ed3b..65709d8 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -5,8 +5,12 @@ import { Admin, CustomRoutes, Resource, resolveBrowserLocale } from "react-admin import { Route } from "react-router-dom"; import AdminLayout from "./components/AdminLayout"; +import ServerActionsPage from "./components/etke.cc/ServerActionsPage"; import ServerNotificationsPage from "./components/etke.cc/ServerNotificationsPage"; import ServerStatusPage from "./components/etke.cc/ServerStatusPage"; +import RecurringCommandEdit from "./components/etke.cc/schedules/components/recurring/RecurringCommandEdit"; +import ScheduledCommandEdit from "./components/etke.cc/schedules/components/scheduled/ScheduledCommandEdit"; +import ScheduledCommandShow from "./components/etke.cc/schedules/components/scheduled/ScheduledCommandShow"; import UserImport from "./components/user-import/UserImport"; import germanMessages from "./i18n/de"; import englishMessages from "./i18n/en"; @@ -64,6 +68,12 @@ export const App = () => ( } /> } /> + } /> + } /> + } /> + } /> + } /> + } /> } /> diff --git a/src/components/AdminLayout.tsx b/src/components/AdminLayout.tsx index e199198..0446f7f 100644 --- a/src/components/AdminLayout.tsx +++ b/src/components/AdminLayout.tsx @@ -1,3 +1,4 @@ +import ManageHistoryIcon from "@mui/icons-material/ManageHistory"; import { useEffect, useState, Suspense } from "react"; import { CheckForApplicationUpdate, @@ -75,11 +76,11 @@ const AdminAppBar = () => { const AdminMenu = props => { const [menu, setMenu] = useState([] as MenuItem[]); - const [serverStatusEnabled, setServerStatusEnabled] = useState(false); + const [etkeRoutesEnabled, setEtkeRoutesEnabled] = useState(false); useEffect(() => { setMenu(GetConfig().menu); if (GetConfig().etkeccAdmin) { - setServerStatusEnabled(true); + setEtkeRoutesEnabled(true); } }, []); const [serverProcess, setServerProcess] = useStore("serverProcess", { @@ -95,8 +96,9 @@ const AdminMenu = props => { return (

- {serverStatusEnabled && ( + {etkeRoutesEnabled && ( { command={serverProcess.command} locked_at={serverProcess.locked_at} isOkay={serverStatus.ok} + isLoaded={serverStatus.success} /> } primaryText="Server Status" /> )} + {etkeRoutesEnabled && ( + } + primaryText="Server Actions" + /> + )} {menu && menu.map((item, index) => { diff --git a/src/components/etke.cc/CurrentlyRunningCommand.tsx b/src/components/etke.cc/CurrentlyRunningCommand.tsx new file mode 100644 index 0000000..44b4d98 --- /dev/null +++ b/src/components/etke.cc/CurrentlyRunningCommand.tsx @@ -0,0 +1,37 @@ +import { Stack, Tooltip, Typography, Box, Link } from "@mui/material"; +import { useStore } from "react-admin"; + +import { ServerProcessResponse } from "../../synapse/dataProvider"; +import { getTimeSince } from "../../utils/date"; + +const CurrentlyRunningCommand = () => { + const [serverProcess, setServerProcess] = useStore("serverProcess", { + command: "", + locked_at: "", + }); + const { command, locked_at } = serverProcess; + + if (!command || !locked_at) { + return null; + } + + return ( + + + Currently running: + + + {command} + + + + (started {getTimeSince(locked_at)} ago) + + + + + + ); +}; + +export default CurrentlyRunningCommand; diff --git a/src/components/etke.cc/README.md b/src/components/etke.cc/README.md index 5965915..88bc0b7 100644 --- a/src/components/etke.cc/README.md +++ b/src/components/etke.cc/README.md @@ -47,10 +47,21 @@ In the application bar the new notifications icon is displayed that shows the nu When you click on a notification from the [Server Notifications icon](#server-notifications-icon)'s list in the application bar, you will be redirected to the Server Notifications page. This page contains the full text of all the notifications you have about your server. +### Server Actions Page + +![Server Actions Page](../../../screenshots/etke.cc/server-actions/page.webp) + +When you click on the `Server Actions` sidebar menu item, you will be redirected to the Server Actions page. +On this page you can do the following: + +* [Run a command](#server-commands-panel) on your server immediately +* [Schedule a command](https://etke.cc/help/extras/scheduler/#schedule) to run at a specific date and time +* [Configure a recurring schedule](https://etke.cc/help/extras/scheduler/#recurring) for a command to run at a specific time every week + ### Server Commands Panel ![Server Commands Panel](../../../screenshots/etke.cc/server-commands/panel.webp) -When you open [Server Status page](#server-status-page), you will see the Server Commands panel. This panel contains all -[the commands](https://etke.cc/help/extras/scheduler/#commands) you can run on your server in 1 click. Once command is finished, you will get a notification about the -result. +When you open [Server Actions page](#server-status-page), you will see the Server Commands panel. +This panel contains all [the commands](https://etke.cc/help/extras/scheduler/#commands) you can run on your server in 1 click. +Once command is finished, you will get a notification about the result. diff --git a/src/components/etke.cc/ServerActionsPage.tsx b/src/components/etke.cc/ServerActionsPage.tsx new file mode 100644 index 0000000..b74af6f --- /dev/null +++ b/src/components/etke.cc/ServerActionsPage.tsx @@ -0,0 +1,51 @@ +import RestoreIcon from "@mui/icons-material/Restore"; +import ScheduleIcon from "@mui/icons-material/Schedule"; +import { Box, Typography, Link, Divider } from "@mui/material"; +import { Stack } from "@mui/material"; + +import CurrentlyRunningCommand from "./CurrentlyRunningCommand"; +import ServerCommandsPanel from "./ServerCommandsPanel"; +import RecurringCommandsList from "./schedules/components/recurring/RecurringCommandsList"; +import ScheduledCommandsList from "./schedules/components/scheduled/ScheduledCommandsList"; +const ServerActionsPage = () => { + return ( + + + + + + + + + Scheduled commands + + + The following commands are scheduled to run at specific times. You can view their details and modify them as + needed. More details about the mode can be found{" "} + + here + + . + + + + + + + Recurring commands + + + The following commands are set to run at specific weekday and time (weekly). You can view their details and + modify them as needed. More details about the mode can be found{" "} + + here + + . + + + + + ); +}; + +export default ServerActionsPage; diff --git a/src/components/etke.cc/ServerCommandsPanel.tsx b/src/components/etke.cc/ServerCommandsPanel.tsx index 02e9835..dd940b2 100644 --- a/src/components/etke.cc/ServerCommandsPanel.tsx +++ b/src/components/etke.cc/ServerCommandsPanel.tsx @@ -1,4 +1,4 @@ -import { PlayArrow, CheckCircle } from "@mui/icons-material"; +import { PlayArrow, CheckCircle, HelpCenter, Construction } from "@mui/icons-material"; import { Table, TableBody, @@ -10,12 +10,15 @@ import { Alert, TextField, Box, + Link, + Typography, } from "@mui/material"; import { useEffect, useState } from "react"; import { Button, Loading, useDataProvider, useCreatePath, useStore } from "react-admin"; -import { Link } from "react-router-dom"; +import { Link as RouterLink } from "react-router-dom"; import { useAppContext } from "../../Context"; +import { useServerCommands } from "./hooks/useServerCommands"; import { ServerCommand, ServerProcessResponse } from "../../synapse/dataProvider"; import { Icons } from "../../utils/icons"; @@ -26,34 +29,20 @@ const renderIcon = (icon: string) => { const ServerCommandsPanel = () => { const { etkeccAdmin } = useAppContext(); - const createPath = useCreatePath(); + if (!etkeccAdmin) { + return null; + } - const [isLoading, setLoading] = useState(true); - const [serverCommands, setServerCommands] = useState>({}); + const createPath = useCreatePath(); + const { isLoading, serverCommands, setServerCommands } = useServerCommands(); const [serverProcess, setServerProcess] = useStore("serverProcess", { command: "", locked_at: "", }); const [commandIsRunning, setCommandIsRunning] = useState(serverProcess.command !== ""); - const [commandResult, setCommandResult] = useState([]); - + const [commandResult, setCommandResult] = useState([]); const dataProvider = useDataProvider(); - useEffect(() => { - const fetchIsAdmin = async () => { - const serverCommandsResponse = await dataProvider.getServerCommands(etkeccAdmin); - if (serverCommandsResponse) { - const serverCommands = serverCommandsResponse; - Object.keys(serverCommandsResponse).forEach((command: string) => { - serverCommands[command].additionalArgs = ""; - }); - setServerCommands(serverCommands); - } - setLoading(false); - }; - fetchIsAdmin(); - }, []); - useEffect(() => { if (serverProcess.command === "") { setCommandIsRunning(false); @@ -103,11 +92,12 @@ const ServerCommandsPanel = () => { commandScheduledText += `, with additional args: ${additionalArgs}`; } - results.push({commandScheduledText}); + results.push({commandScheduledText}); results.push( - + Expect your result in the{" "} - Notifications page soon. + Notifications page + soon. ); @@ -138,25 +128,40 @@ const ServerCommandsPanel = () => { return ( <> -

Server Commands

- + + Available Commands + + + The following commands are available to run. More details about each of them can be found{" "} + + here + + . + + Command + Description {Object.entries(serverCommands).map(([command, { icon, args, description, additionalArgs }]) => ( - + {renderIcon(icon)} {command} + + +