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';
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 (MB < 1024) return `${MB} MB`;
return `${(MB / 1024).toFixed(2)} GB`;
};
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
Data
| Location |
Used |
Total |
{storage_usage}
Memory
| 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'])} |
Cameras
{Object.entries(storage).map(([name, camera]) => (
{name.replaceAll('_', ' ')}
| Usage |
Stream Bandwidth |
| {Math.round(camera['usage_percent'] ?? 0)}% |
{camera['bandwidth'] ? getUnitSize(camera['bandwidth']) : 'Calculating...'}/hr |
))}
);
}