Skip to content

Commit

Permalink
feat: logs pause (#855)
Browse files Browse the repository at this point in the history
  • Loading branch information
Zephyruso authored Jul 24, 2024
1 parent d6ec561 commit 776d8f8
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 29 deletions.
40 changes: 11 additions & 29 deletions src/pages/Logs.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { makePersisted } from '@solid-primitives/storage'
import {
IconPlayerPause,
IconPlayerPlay,
IconSettings,
IconSortAscending,
IconSortDescending,
Expand All @@ -19,16 +21,9 @@ import { twMerge } from 'tailwind-merge'
import { Button, LogsSettingsModal } from '~/components'
import { LOG_LEVEL } from '~/constants'
import { useI18n } from '~/i18n'
import {
endpoint,
logsTableSize,
tableSizeClassName,
useWsRequest,
} from '~/signals'
import { logLevel, logMaxRows } from '~/signals/config'
import { Log } from '~/types'

type LogWithSeq = Log & { seq: number }
import { endpoint, logsTableSize, tableSizeClassName } from '~/signals'
import { useLogs } from '~/signals/logs'
import { LogWithSeq } from '~/types'

const fuzzyFilter: FilterFn<LogWithSeq> = (row, columnId, value, addMeta) => {
// Rank the item
Expand All @@ -53,27 +48,9 @@ export default () => {
}

let logsSettingsModalRef: HTMLDialogElement | undefined

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 { logs, paused, setPaused } = useLogs()

const [sorting, setSorting] = makePersisted(createSignal<SortingState>([]), {
name: 'logsTableSorting',
Expand Down Expand Up @@ -152,6 +129,11 @@ export default () => {
onInput={(e) => setGlobalFilter(e.target.value)}
/>

<Button
class="join-item btn-sm sm:btn-md"
onClick={() => setPaused((paused) => !paused)}
icon={paused() ? <IconPlayerPlay /> : <IconPlayerPause />}
/>
<Button
class="join-item btn-sm sm:btn-md"
onClick={() => logsSettingsModalRef?.showModal()}
Expand Down
28 changes: 28 additions & 0 deletions src/signals/logs.ts
Original file line number Diff line number Diff line change
@@ -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 changes: 2 additions & 0 deletions src/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ export type Log = {
payload: string
}

export type LogWithSeq = Log & { seq: number }

export type Config = {
mode: 'global' | 'rule' | 'direct'
port: number
Expand Down

0 comments on commit 776d8f8

Please sign in to comment.