mirror of
https://github.com/MetaCubeX/metacubexd.git
synced 2024-11-24 09:45:35 +08:00
feat: logs pause (#855)
This commit is contained in:
parent
d6ec561b81
commit
776d8f8daf
@ -1,5 +1,7 @@
|
|||||||
import { makePersisted } from '@solid-primitives/storage'
|
import { makePersisted } from '@solid-primitives/storage'
|
||||||
import {
|
import {
|
||||||
|
IconPlayerPause,
|
||||||
|
IconPlayerPlay,
|
||||||
IconSettings,
|
IconSettings,
|
||||||
IconSortAscending,
|
IconSortAscending,
|
||||||
IconSortDescending,
|
IconSortDescending,
|
||||||
@ -19,16 +21,9 @@ import { twMerge } from 'tailwind-merge'
|
|||||||
import { Button, LogsSettingsModal } from '~/components'
|
import { Button, LogsSettingsModal } from '~/components'
|
||||||
import { LOG_LEVEL } from '~/constants'
|
import { LOG_LEVEL } from '~/constants'
|
||||||
import { useI18n } from '~/i18n'
|
import { useI18n } from '~/i18n'
|
||||||
import {
|
import { endpoint, logsTableSize, tableSizeClassName } from '~/signals'
|
||||||
endpoint,
|
import { useLogs } from '~/signals/logs'
|
||||||
logsTableSize,
|
import { LogWithSeq } from '~/types'
|
||||||
tableSizeClassName,
|
|
||||||
useWsRequest,
|
|
||||||
} from '~/signals'
|
|
||||||
import { logLevel, logMaxRows } from '~/signals/config'
|
|
||||||
import { Log } from '~/types'
|
|
||||||
|
|
||||||
type LogWithSeq = Log & { seq: number }
|
|
||||||
|
|
||||||
const fuzzyFilter: FilterFn<LogWithSeq> = (row, columnId, value, addMeta) => {
|
const fuzzyFilter: FilterFn<LogWithSeq> = (row, columnId, value, addMeta) => {
|
||||||
// Rank the item
|
// Rank the item
|
||||||
@ -53,27 +48,9 @@ export default () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let logsSettingsModalRef: HTMLDialogElement | undefined
|
let logsSettingsModalRef: HTMLDialogElement | undefined
|
||||||
|
|
||||||
const [t] = useI18n()
|
const [t] = useI18n()
|
||||||
|
|
||||||
let seq = 1
|
|
||||||
const [logs, setLogs] = createSignal<LogWithSeq[]>([])
|
|
||||||
|
|
||||||
const logsData = useWsRequest<Log>('logs', { level: logLevel() })
|
|
||||||
|
|
||||||
createEffect(() => {
|
|
||||||
const data = logsData()
|
|
||||||
|
|
||||||
if (!data) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
setLogs((logs) => [{ ...data, seq }, ...logs].slice(0, logMaxRows()))
|
|
||||||
|
|
||||||
seq++
|
|
||||||
})
|
|
||||||
|
|
||||||
const [globalFilter, setGlobalFilter] = createSignal('')
|
const [globalFilter, setGlobalFilter] = createSignal('')
|
||||||
|
const { logs, paused, setPaused } = useLogs()
|
||||||
|
|
||||||
const [sorting, setSorting] = makePersisted(createSignal<SortingState>([]), {
|
const [sorting, setSorting] = makePersisted(createSignal<SortingState>([]), {
|
||||||
name: 'logsTableSorting',
|
name: 'logsTableSorting',
|
||||||
@ -152,6 +129,11 @@ export default () => {
|
|||||||
onInput={(e) => setGlobalFilter(e.target.value)}
|
onInput={(e) => setGlobalFilter(e.target.value)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
class="join-item btn-sm sm:btn-md"
|
||||||
|
onClick={() => setPaused((paused) => !paused)}
|
||||||
|
icon={paused() ? <IconPlayerPlay /> : <IconPlayerPause />}
|
||||||
|
/>
|
||||||
<Button
|
<Button
|
||||||
class="join-item btn-sm sm:btn-md"
|
class="join-item btn-sm sm:btn-md"
|
||||||
onClick={() => logsSettingsModalRef?.showModal()}
|
onClick={() => logsSettingsModalRef?.showModal()}
|
||||||
|
28
src/signals/logs.ts
Normal file
28
src/signals/logs.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import { useWsRequest } from '~/signals'
|
||||||
|
import { logLevel, logMaxRows } from '~/signals/config'
|
||||||
|
import { Log, LogWithSeq } from '~/types'
|
||||||
|
|
||||||
|
let seq = 1
|
||||||
|
const [logs, setLogs] = createSignal<LogWithSeq[]>([])
|
||||||
|
|
||||||
|
const logsData = useWsRequest<Log>('logs', { level: logLevel() })
|
||||||
|
const [paused, setPaused] = createSignal(false)
|
||||||
|
|
||||||
|
createEffect(() => {
|
||||||
|
const data = logsData()
|
||||||
|
|
||||||
|
if (!data || paused()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
setLogs((logs) => [{ ...data, seq }, ...logs].slice(0, logMaxRows()))
|
||||||
|
seq++
|
||||||
|
})
|
||||||
|
|
||||||
|
export function useLogs() {
|
||||||
|
return {
|
||||||
|
logs,
|
||||||
|
paused,
|
||||||
|
setPaused,
|
||||||
|
}
|
||||||
|
}
|
2
src/types/index.d.ts
vendored
2
src/types/index.d.ts
vendored
@ -113,6 +113,8 @@ export type Log = {
|
|||||||
payload: string
|
payload: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type LogWithSeq = Log & { seq: number }
|
||||||
|
|
||||||
export type Config = {
|
export type Config = {
|
||||||
mode: 'global' | 'rule' | 'direct'
|
mode: 'global' | 'rule' | 'direct'
|
||||||
port: number
|
port: number
|
||||||
|
Loading…
Reference in New Issue
Block a user