import { h, Fragment } from 'preact';
import ActivityIndicator from '../components/ActivityIndicator';
import Heading from '../components/Heading';
import { useWs } from '../api/ws';
import useSWR from 'swr';
import { Table, Tbody, Thead, Tr, Th, Td } from '../components/Table';
import Link from '../components/Link';
import Button from '../components/Button';
import { About } from '../icons/About';
const emptyObject = Object.freeze({});
export default function Storage() {
const { data: storage } = useSWR('recordings/storage');
const {
value: { payload: stats },
} = useWs('stats');
const { data: initialStats } = useSWR('stats');
const { service } = stats || initialStats || emptyObject;
if (!service || !storage) {
return ;
}
const getUnitSize = (MB) => {
if (isNaN(MB) || MB < 0) return 'Invalid number';
if (MB < 1024) return `${MB} MiB`;
return `${(MB / 1024).toFixed(2)} GiB`;
};
let storage_usage;
if (
service &&
service['storage']['/media/frigate/recordings']['total'] != service['storage']['/media/frigate/clips']['total']
) {
storage_usage = (
| Recordings |
{getUnitSize(service['storage']['/media/frigate/recordings']['used'])} |
{getUnitSize(service['storage']['/media/frigate/recordings']['total'])} |
| Snapshots |
{getUnitSize(service['storage']['/media/frigate/clips']['used'])} |
{getUnitSize(service['storage']['/media/frigate/clips']['total'])} |
);
} else {
storage_usage = (
| Recordings & Snapshots |
{getUnitSize(service['storage']['/media/frigate/recordings']['used'])} |
{getUnitSize(service['storage']['/media/frigate/recordings']['total'])} |
);
}
return (
Storage
Overview
| Location |
Used |
Total |
{storage_usage}
| Location |
Used |
Total |
| /dev/shm |
{getUnitSize(service['storage']['/dev/shm']['used'])} |
{getUnitSize(service['storage']['/dev/shm']['total'])} |
| /tmp/cache |
{getUnitSize(service['storage']['/tmp/cache']['used'])} |
{getUnitSize(service['storage']['/tmp/cache']['total'])} |
{Object.entries(storage).map(([name, camera]) => (
{name.replaceAll('_', ' ')}
| Usage |
Stream Bandwidth |
| {Math.round(camera['usage_percent'] ?? 0)}% |
{camera['bandwidth'] ? `${getUnitSize(camera['bandwidth'])}/hr` : 'Calculating...'} |
))}
);
}