dyno-bot/Dyno-web-member-dash/react/status/Cluster.jsx

78 lines
2.4 KiB
React
Raw Permalink Normal View History

2020-09-12 20:08:48 +02:00
import React from 'react';
import ReactTooltip from 'react-tooltip';
export default class Cluster extends React.Component {
number_format = (number) => number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
render() {
let data = this.props.data;
let serverInitial = this.props.server[0];
let shards;
let color = 'success';
let problems = [];
let extrainfo;
let fireduck;
if (data.error) {
if (data.error === 'IPC request timed out.') {
color = 'ipc-timeout';
problems.push(`${data.error} This is totally normal and expected.`);
} else {
color = 'error';
problems.push(`${data.error} Please try again later.`);
}
if (data.guessedShards) {
shards = `#${data.guessedShards[0]} - #${data.guessedShards[5]}`;
} else {
shards = `Error`;
}
if (data.error === 'Cluster offline.') {
fireduck = (<div className='fire'><img className='duck' src='https://carti.dyno.gg/assets/fireduck.gif' /></div>);
}
} else {
let first = data.result.shards[0], last = data.result.shards[5];
shards = `#${first} - #${last}`;
if (data.result.unavailableCount > 0) {
if (data.result.unavailableCount > 10) {
color = 'warning';
}
problems.push(this.number_format(data.result.unavailableCount) + ' guild(s) unavailable');
}
if (data.result.connectedCount < 6) {
if (data.result.connectedCount < 5) {
color = 'error';
} else {
color = 'warning';
}
problems.push(this.number_format((6 - data.result.connectedCount)) + ' shard(s) unavailable');
}
extrainfo = (<div>
<p>Uptime: {data.result.uptime}</p>
<p>{this.number_format(data.result.guildCount)} guilds</p>
<p>{this.number_format(data.result.voiceConnections)} voice connections</p>
</div>)
}
if (problems.length) {
problems = problems.join(', ');
} else {
problems = 'No issues';
}
let clusterId = serverInitial + data.id;
let highlight = this.props.highlight ? ' shadow-highlight' : '';
return (
<div>
<div onClick={(ev) => { ReactTooltip.show(ev.target) }} data-tip data-for={`clusterStatus${clusterId}`} className={`cluster bg-${color}${highlight}`}>
{clusterId}
</div>
<ReactTooltip id={`clusterStatus${clusterId}`} type={color === 'ipc-timeout' ? 'dark' : color} effect='solid'>
<h5 className={'title is-5'}>Cluster {clusterId}</h5>
<p>Shards: {shards}</p>
{fireduck}
<p><strong>{problems}</strong></p>
{extrainfo}
</ReactTooltip>
</div>);
}
}