From db4fe14316587e4190b76ee9890f0a9d5b458bde Mon Sep 17 00:00:00 2001 From: Xeltica Date: Mon, 18 Oct 2021 02:28:21 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=87=E3=83=90=E3=83=83=E3=82=B0=E6=A9=9F?= =?UTF-8?q?=E6=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/backend/controllers/admin.ts | 4 ++-- src/backend/services/worker.ts | 27 ++++++++++++++++++++++----- src/backend/store.ts | 4 ++-- src/frontend/components/AdminPage.tsx | 19 ++++++++++--------- 5 files changed, 37 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index ebcdf21..992b854 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "run-s build:backend build:frontend build:meta", "build:frontend": "webpack", - "build:backend": "run-p build:backend-source build:views build:styles", + "build:backend": "run-s build:backend-source build:views build:styles", "build:backend-source": "tsc", "build:views": "copyfiles -u 1 src/backend/views/*.pug ./built/", "build:meta": "node ./build-meta.js", diff --git a/src/backend/controllers/admin.ts b/src/backend/controllers/admin.ts index f9e63cc..2299bc4 100644 --- a/src/backend/controllers/admin.ts +++ b/src/backend/controllers/admin.ts @@ -19,12 +19,12 @@ export class AdminController { }; } - @Get('/misshai/error') getMisshaiError(@CurrentUser({ required: true }) user: IUser) { + @Get('/misshai/log') getMisshaiLog(@CurrentUser({ required: true }) user: IUser) { if (!user.isAdmin) { throw new BadRequestError('Not an Admin'); } - return Store.getState().misshaiWorkerRecentError; + return Store.getState().misshaiWorkerLog; } @OnUndefined(204) diff --git a/src/backend/services/worker.ts b/src/backend/services/worker.ts index 4718f9e..cd01667 100644 --- a/src/backend/services/worker.ts +++ b/src/backend/services/worker.ts @@ -19,24 +19,41 @@ export default (): void => { export const work = async () => { Store.dispatch({ nowCalculating: true }); + clearLog(); + + printLog('[Miss-hai Worker] Started.'); + try { const users = await Users.find({ alertMode: Not('nothing') }); for (const user of users) { await update(user).catch(e => handleError(user, e)); + printLog(`[Miss-hai Worker] processed for ${user.username}@${user.host}`); if (user.alertMode === 'note') { return delay(3000); } } - Store.dispatch({ misshaiWorkerRecentError: null }); + printLog('[Miss-hai Worker] finished successfully.'); } catch (e) { const msg = String(e instanceof Error ? e.stack : e); - Store.dispatch({ misshaiWorkerRecentError: msg }); + printLog(msg); + printLog('[Miss-hai Worker] stopped wrongly.'); } finally { Store.dispatch({ nowCalculating: false }); } }; +const clearLog = () => { + Store.dispatch({ misshaiWorkerLog: [] }); +}; + +const printLog = (log: any) => { + Store.dispatch({ misshaiWorkerLog: [ + ...Store.getState().misshaiWorkerLog, + String(log), + ] }); +}; + /** * アラートを送信します。 * @param user アラートの送信先ユーザー @@ -60,13 +77,13 @@ const handleError = async (user: User, e: any) => { if (e.code) { if (e.code === 'NO_SUCH_USER' || e.code === 'AUTHENTICATION_FAILED') { // ユーザーが削除されている場合、レコードからも消してとりやめ - console.info(`${user.username}@${user.host} is deleted, so delete this user from the system`); + printLog(`${user.username}@${user.host} is deleted, so delete this user from the system`); await deleteUser(user.username, user.host); } else { - console.error(`Misskey Error: ${JSON.stringify(e)}`); + printLog(`Misskey Error: ${JSON.stringify(e)}`); } } else { // おそらく通信エラー - console.error(`Unknown error: ${e.name} ${e.message}`); + printLog(`Unknown error: ${e.name} ${e.message}`); } }; diff --git a/src/backend/store.ts b/src/backend/store.ts index 7291067..0bfe19d 100644 --- a/src/backend/store.ts +++ b/src/backend/store.ts @@ -7,7 +7,7 @@ */ const defaultState: State = { nowCalculating: false, - misshaiWorkerRecentError: null, + misshaiWorkerLog: [], }; let _state: Readonly = defaultState; @@ -17,7 +17,7 @@ let _state: Readonly = defaultState; */ export type State = { nowCalculating: boolean, - misshaiWorkerRecentError: string | null, + misshaiWorkerLog: string[], }; /** diff --git a/src/frontend/components/AdminPage.tsx b/src/frontend/components/AdminPage.tsx index 5df8744..362dec3 100644 --- a/src/frontend/components/AdminPage.tsx +++ b/src/frontend/components/AdminPage.tsx @@ -7,11 +7,14 @@ import { IAnnouncement } from '../../common/types/announcement'; import { $delete, $get, $post, $put } from '../misc/api'; import { Card } from './Card'; import { showModal } from '../store/slices/screen'; +import { useDispatch } from 'react-redux'; export const AdminPage: React.VFC = () => { const { data, error } = useGetSessionQuery(undefined); + const dispatch = useDispatch(); + const [announcements, setAnnouncements] = useState([]); const [selectedAnnouncement, selectAnnouncement] = useState(null); const [isAnnouncementsLoaded, setAnnouncementsLoaded] = useState(false); @@ -20,7 +23,7 @@ export const AdminPage: React.VFC = () => { const [draftTitle, setDraftTitle] = useState(''); const [draftBody, setDraftBody] = useState(''); - const [misshaiError, setMisshaiError] = useState(null); + const [misshaiLog, setMisshaiLog] = useState(null); const submitAnnouncement = async () => { if (selectedAnnouncement) { @@ -55,7 +58,11 @@ export const AdminPage: React.VFC = () => { setAnnouncements(announcements ?? []); setAnnouncementsLoaded(true); }); - $get('admin/misshai/error').then(setMisshaiError); + fetchLog(); + }; + + const fetchLog = () => { + $get('admin/misshai/log').then(setMisshaiLog); }; const onClickStartMisshaiAlertWorkerButton = () => { @@ -192,7 +199,7 @@ export const AdminPage: React.VFC = () => { ミス廃アラートワーカーを強制起動する

直近のワーカーエラー

-
{misshaiError ?? 'なし'}
+
{misshaiLog?.join('\n') ?? 'なし'}
@@ -201,9 +208,3 @@ export const AdminPage: React.VFC = () => { ); }; - - -function dispatch(arg0: any) { - throw new Error('Function not implemented.'); -} -