import { h, Fragment } from 'preact'; import ActivityIndicator from '../components/ActivityIndicator'; import Button from '../components/Button'; import Heading from '../components/Heading'; import Link from '../components/Link'; import { useMqtt } from '../api/mqtt'; import useSWR from 'swr'; import axios from 'axios'; import { Table, Tbody, Thead, Tr, Th, Td } from '../components/Table'; import { useCallback } from 'preact/hooks'; const emptyObject = Object.freeze({}); export default function Debug() { const { data: config } = useSWR('config'); const { value: { payload: stats }, } = useMqtt('stats'); const { data: initialStats } = useSWR('stats'); const { cpu_usages, detectors, service = {}, detection_fps: _, ...cameras } = stats || initialStats || emptyObject; const detectorNames = Object.keys(detectors || emptyObject); const detectorDataKeys = Object.keys(detectors ? detectors[detectorNames[0]] : emptyObject); const cameraNames = Object.keys(cameras || emptyObject); const cameraDataKeys = Object.keys(cameras[cameraNames[0]] || emptyObject); const handleCopyConfig = useCallback(() => { async function copy() { await window.navigator.clipboard.writeText(JSON.stringify(config, null, 2)); } copy(); }, [config]); const onCopyFfprobe = async (camera, e) => { if (e) { e.stopPropagation(); } const response = await axios.get(`${camera}/ffprobe`); if (response.status === 200) { await window.navigator.clipboard.writeText(JSON.stringify(response.data, null, 2)); } }; return (
| detector | {detectorDataKeys.map((name) => ({name.replace('_', ' ')} | ))}
|---|---|
| {detector} | {detectorDataKeys.map((name) => ({detectors[detector][name]} | ))}
| Processes | Process ID | Cpu % | Memory % |
|---|---|---|---|
| Capture | {cameras[camera]['capture_pid']} | {cpu_usages[cameras[camera]['capture_pid']]['cpu']}% | {cpu_usages[cameras[camera]['capture_pid']]['mem']}% |
| Detect | {cameras[camera]['pid']} | {cpu_usages[cameras[camera]['pid']]['cpu']}% | {cpu_usages[cameras[camera]['pid']]['cpu']}% |
| ffmpeg | {cameras[camera]['ffmpeg_pid']} | {cpu_usages[cameras[camera]['ffmpeg_pid']]['cpu']}% | {cpu_usages[cameras[camera]['ffmpeg_pid']]['cpu']}% |
Debug stats update automatically every {config.mqtt.stats_interval} seconds.
{JSON.stringify(config, null, 2)}