If uptime is present in stats output, display it for the server; closes #3653

This commit is contained in:
Dane Everitt 2021-10-03 12:59:44 -07:00
parent 63e01f9aee
commit 81ba333270
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
2 changed files with 25 additions and 3 deletions

View file

@ -7,14 +7,16 @@ import TitledGreyBox from '@/components/elements/TitledGreyBox';
import { ServerContext } from '@/state/server'; import { ServerContext } from '@/state/server';
import CopyOnClick from '@/components/elements/CopyOnClick'; import CopyOnClick from '@/components/elements/CopyOnClick';
import { SocketEvent, SocketRequest } from '@/components/server/events'; import { SocketEvent, SocketRequest } from '@/components/server/events';
import UptimeDuration from '@/components/server/UptimeDuration';
interface Stats { interface Stats {
memory: number; memory: number;
cpu: number; cpu: number;
disk: number; disk: number;
uptime: number;
} }
function statusToColor (status: string|null, installing: boolean): TwStyle { function statusToColor (status: string | null, installing: boolean): TwStyle {
if (installing) { if (installing) {
status = ''; status = '';
} }
@ -30,7 +32,7 @@ function statusToColor (status: string|null, installing: boolean): TwStyle {
} }
const ServerDetailsBlock = () => { const ServerDetailsBlock = () => {
const [ stats, setStats ] = useState<Stats>({ memory: 0, cpu: 0, disk: 0 }); const [ stats, setStats ] = useState<Stats>({ memory: 0, cpu: 0, disk: 0, uptime: 0 });
const status = ServerContext.useStoreState(state => state.status.value); const status = ServerContext.useStoreState(state => state.status.value);
const connected = ServerContext.useStoreState(state => state.socket.connected); const connected = ServerContext.useStoreState(state => state.socket.connected);
@ -48,6 +50,7 @@ const ServerDetailsBlock = () => {
memory: stats.memory_bytes, memory: stats.memory_bytes,
cpu: stats.cpu_absolute, cpu: stats.cpu_absolute,
disk: stats.disk_bytes, disk: stats.disk_bytes,
uptime: stats.uptime || 0,
}); });
}; };
@ -69,7 +72,7 @@ const ServerDetailsBlock = () => {
const isTransferring = ServerContext.useStoreState(state => state.server.data!.isTransferring); const isTransferring = ServerContext.useStoreState(state => state.server.data!.isTransferring);
const limits = ServerContext.useStoreState(state => state.server.data!.limits); const limits = ServerContext.useStoreState(state => state.server.data!.limits);
const primaryAllocation = ServerContext.useStoreState(state => state.server.data!.allocations.filter(alloc => alloc.isDefault).map( const primaryAllocation = ServerContext.useStoreState(state => state.server.data!.allocations.filter(alloc => alloc.isDefault).map(
allocation => (allocation.alias || allocation.ip) + ':' + allocation.port allocation => (allocation.alias || allocation.ip) + ':' + allocation.port,
)).toString(); )).toString();
const diskLimit = limits.disk ? megabytesToHuman(limits.disk) : 'Unlimited'; const diskLimit = limits.disk ? megabytesToHuman(limits.disk) : 'Unlimited';
@ -88,6 +91,11 @@ const ServerDetailsBlock = () => {
]} ]}
/> />
&nbsp;{!status ? 'Connecting...' : (isInstalling ? 'Installing' : (isTransferring) ? 'Transferring' : status)} &nbsp;{!status ? 'Connecting...' : (isInstalling ? 'Installing' : (isTransferring) ? 'Transferring' : status)}
{stats.uptime > 0 &&
<span css={tw`ml-2`}>
(<UptimeDuration uptime={stats.uptime / 1000}/>)
</span>
}
</p> </p>
<CopyOnClick text={primaryAllocation}> <CopyOnClick text={primaryAllocation}>
<p css={tw`text-xs mt-2`}> <p css={tw`text-xs mt-2`}>

View file

@ -0,0 +1,14 @@
import React from 'react';
export default ({ uptime }: { uptime: number }) => {
const hours = Math.floor(Math.floor(uptime) / 60 / 60);
const remainder = Math.floor(uptime - (hours * 60 * 60));
const minutes = Math.floor(remainder / 60);
const seconds = remainder % 60;
return (
<>
{hours.toString().padStart(2, '0')}:{minutes.toString().padStart(2, '0')}:{seconds.toString().padStart(2, '0')}
</>
);
};