69 lines
2.4 KiB
JavaScript
69 lines
2.4 KiB
JavaScript
import { useEffect, useState } from "react";
|
|
import axios from "axios";
|
|
|
|
export const AVAILABLE_STATS = {
|
|
ONLINE_HOSTS_COUNT: "onlineHostsCount",
|
|
STORAGE_USED_TB: "storageUsedTB",
|
|
NETWORK_CAPACITY_TB: "networkCapacityTB",
|
|
STORAGE_COST_USD: "storageCostUSD",
|
|
BANDWIDTH_DOWN_COST_USD: "bandwidthDownCostUSD",
|
|
};
|
|
|
|
export default function useStats() {
|
|
const [stats, setStats] = useState({
|
|
[AVAILABLE_STATS.ONLINE_HOSTS_COUNT]: null,
|
|
[AVAILABLE_STATS.STORAGE_USED_TB]: null,
|
|
[AVAILABLE_STATS.NETWORK_CAPACITY_TB]: null,
|
|
[AVAILABLE_STATS.STORAGE_COST_USD]: null,
|
|
[AVAILABLE_STATS.BANDWIDTH_DOWN_COST_USD]: null,
|
|
});
|
|
|
|
useEffect(() => {
|
|
async function fetchData() {
|
|
const [bandwidth, storage, price] = await Promise.all([getBandwidthStats(), getStorageStats(), getPriceStats()]);
|
|
|
|
setStats({ ...bandwidth, ...storage, ...price });
|
|
}
|
|
|
|
fetchData();
|
|
}, [setStats]);
|
|
|
|
return stats;
|
|
}
|
|
|
|
async function getBandwidthStats() {
|
|
// { up: 76.09, down: 102.66, upusd: 0.23, downusd: 0.32 }
|
|
const { data } = await axios.get("https://siastats.info/dbs/bandwidthpricesdb.json");
|
|
// some entries do not contain the required property so make sure to get one that does
|
|
const current = data.reverse().find((entry) => "downusd" in entry);
|
|
|
|
return {
|
|
[AVAILABLE_STATS.BANDWIDTH_DOWN_COST_USD]: current.downusd,
|
|
};
|
|
}
|
|
|
|
async function getPriceStats() {
|
|
// { price: 504.59, newcontractformation: 30.79, usd: 1.55, sfperfees: 8.98 }
|
|
const { data } = await axios.get("https://siastats.info/dbs/storagepricesdb.json");
|
|
// some entries do not contain the required property so make sure to get one that does
|
|
const current = data.reverse().find((entry) => "usd" in entry);
|
|
|
|
return {
|
|
[AVAILABLE_STATS.STORAGE_COST_USD]: current.usd,
|
|
};
|
|
}
|
|
|
|
async function getStorageStats() {
|
|
// { block_height: 247816, block_timestamp: 1582285828, hashrate: 6212581269715416,
|
|
// difficulty: 3501953420754597000, coin_supply: 43638591164, coin_price_USD: 0.003,
|
|
// market_cap_USD: 130915773, used_storage_TB: 725.26, network_capacity_TB: 2270.96,
|
|
// online_hosts: 360, active_contracts: 62997 }
|
|
const { data } = await axios.get("https://siastats.info/dbs/network_status.json");
|
|
|
|
return {
|
|
[AVAILABLE_STATS.ONLINE_HOSTS_COUNT]: data.online_hosts,
|
|
[AVAILABLE_STATS.STORAGE_USED_TB]: data.used_storage_TB,
|
|
[AVAILABLE_STATS.NETWORK_CAPACITY_TB]: data.network_capacity_TB,
|
|
};
|
|
}
|