UNPKG

sharding-stats

Version:

A cool Dashboard & Manager for showing Live Stats and managing your Discord Bot/Shards

116 lines (110 loc) 4.55 kB
const statuses = { "0": "Online", "1": "Connecting", "2": "Reconnecting", "3": "Idling", "4": "Nearly", "5": "Disconnected", "6": "Waiting for Guilds", "7": "Identifying", "8": "Resuming", "9": "System Disconnected", "10": "No Data", }; class FormData { constructor(data) { this.shard = new Map(); this.clusters = new Map(); } _patch(newdata) { const setData = { ...newdata, lastupdated: Date.now(), statusText: statuses[newdata.status], color: getStatusColor(newdata.status), }; this.shard.set(newdata.id, setData); if (newdata.cluster) { if (!this.clusters.has(newdata.cluster)) this.clusters.set(newdata.cluster, new Map()); const cData = this.clusters.get(newdata.cluster); cData.set(newdata.id, setData); this.clusters.set(newdata.cluster, cData); } return true; } checkShards(totalShards, totalClusters) { if (!isNaN(totalShards) && totalShards > 0) { for (let id = 0; id < totalShards; id++) { if (this.shard.has(id)) continue; this.shard.set(id, { id, status: 10 }) } } } shardData(shardId, options = {}) { if (options.all) return [...this.shard.values()] return this.shard.get(shardId) } totalData() { const rawdata = [...this.shard.values()]; const returnData = { status: 0, cpu: 0, ram: { rss: 0, heapUsed: 0 }, ping: 0, guildcount: 0, membercount: 0, upsince: 0, lastupdated: 0, guildids: [], } let addedForCluster = []; for (const data of rawdata) { returnData.status += Number(data.status); returnData.cpu += Number(data.cpu); if (!isNaN(data.cluster) && !addedForCluster.includes(String(data.cluster))) { returnData.ram.rss += Number(data.ram.rss); returnData.ram.heapUsed += Number(data.ram.heapUsed); addedForCluster.push(String(data.cluster)) } returnData.ping += Number(data.ping); returnData.ram.rss += Number(data.ram.rss); returnData.ram.heapUsed += Number(data.ram.heapUsed); returnData.guildcount += Number(data.guildcount); returnData.upsince += Number(data.upsince) returnData.lastupdated += Number(data.lastupdated); returnData.guildids.push(...(data.guildids || [])); returnData.membercount += Number(data.membercount); } return this.formatReturnRawData(returnData, rawdata), returnData; } formatReturnRawData(returnData, rawdata) { if (!rawdata.length) returnData.status = 5; if (returnData.status > 7) returnData.status = 9; returnData.ram.rss = Math.floor(returnData.ram.rss * 100) / 100; returnData.ram.heapUsed = Math.floor(returnData.ram.heapUsed * 100) / 100; returnData.ping = Math.floor(returnData.ping / rawdata.length * 100) / 100; returnData.cpu = Math.floor(returnData.cpu / rawdata.length * 100) / 100; returnData.upsince = Math.floor(returnData.upsince / rawdata.length); returnData.lastupdated = Math.floor(returnData.lastupdated / rawdata.length); return true; } humanize(rawdata) { //console.log(rawdata); if (Array.isArray(rawdata)) return rawdata.map(this.humanize); return { ...rawdata, status: statuses[rawdata.status], color: getStatusColor(rawdata.status), cpu: `${rawdata.cpu}%`, ram: { rss: `${rawdata?.ram?.rss || NaN} MB`, heapUsed: `${rawdata?.ram?.heapUsed || NaN} MB` }, ping: `${rawdata.ping} ms`, guildcount: `${rawdata.guildcount} Guilds`, membercount: `${rawdata.membercount} Members`, upsince: Number(rawdata.upsince), lastupdated: Number(rawdata.lastupdated), guildids: rawdata.guildids, id: rawdata.id, message: rawdata.message, } } } module.exports = FormData; function getStatusColor(status) { if (status === 0) return "green"; else if (0 < status && status < 5) return "yellow"; else if (status === 5) return "red"; else if (status > 5) return "grey"; else return "black"; }