mirror of
https://github.com/RoboSats/robosats.git
synced 2025-01-18 20:21:35 +00:00
Fix federation summary (#1180)
* Fix federation summary * Fix federation summary * Make it dynamic * Make it dynamic
This commit is contained in:
parent
b8fd2e21cd
commit
0e049eec43
@ -1,4 +1,4 @@
|
|||||||
import React, { useContext, useMemo } from 'react';
|
import React, { useContext, useEffect, useMemo, useState } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@ -34,11 +34,14 @@ interface Props {
|
|||||||
|
|
||||||
const ExchangeDialog = ({ open = false, onClose }: Props): JSX.Element => {
|
const ExchangeDialog = ({ open = false, onClose }: Props): JSX.Element => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { federation } = useContext(FederationContext);
|
const { federation, coordinatorUpdatedAt, federationUpdatedAt } = useContext(FederationContext);
|
||||||
|
const [loadingProgress, setLoadingProgress] = useState<number>(0);
|
||||||
|
|
||||||
const loadingProgress = useMemo(() => {
|
useEffect(() => {
|
||||||
return (federation.exchange.onlineCoordinators / federation.exchange.totalCoordinators) * 100;
|
const loadedCoordinators =
|
||||||
}, [federation.exchange.onlineCoordinators, federation.exchange.totalCoordinators]);
|
federation.exchange.enabledCoordinators - federation.exchange.loadingCoordinators;
|
||||||
|
setLoadingProgress((loadedCoordinators / federation.exchange.enabledCoordinators) * 100);
|
||||||
|
}, [open, coordinatorUpdatedAt, federationUpdatedAt]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Dialog open={open} onClose={onClose}>
|
<Dialog open={open} onClose={onClose}>
|
||||||
@ -69,7 +72,7 @@ const ExchangeDialog = ({ open = false, onClose }: Props): JSX.Element => {
|
|||||||
</ListItemIcon>
|
</ListItemIcon>
|
||||||
|
|
||||||
<ListItemText
|
<ListItemText
|
||||||
primary={federation.exchange.totalCoordinators}
|
primary={federation.exchange.enabledCoordinators}
|
||||||
secondary={t('Enabled RoboSats coordinators')}
|
secondary={t('Enabled RoboSats coordinators')}
|
||||||
/>
|
/>
|
||||||
</ListItem>
|
</ListItem>
|
||||||
|
@ -12,19 +12,17 @@ interface ExchangeInfo {
|
|||||||
version: Version;
|
version: Version;
|
||||||
}
|
}
|
||||||
|
|
||||||
const defaultExchangeInfo: ExchangeInfo = {
|
|
||||||
num_public_buy_orders: 0,
|
|
||||||
num_public_sell_orders: 0,
|
|
||||||
book_liquidity: 0,
|
|
||||||
active_robots_today: 0,
|
|
||||||
last_day_nonkyc_btc_premium: 0,
|
|
||||||
last_day_volume: 0,
|
|
||||||
lifetime_volume: 0,
|
|
||||||
version: { major: 0, minor: 0, patch: 0 },
|
|
||||||
};
|
|
||||||
|
|
||||||
export const updateExchangeInfo = (federation: Federation): ExchangeInfo => {
|
export const updateExchangeInfo = (federation: Federation): ExchangeInfo => {
|
||||||
const info: ExchangeInfo = defaultExchangeInfo;
|
const info: ExchangeInfo = {
|
||||||
|
num_public_buy_orders: 0,
|
||||||
|
num_public_sell_orders: 0,
|
||||||
|
book_liquidity: 0,
|
||||||
|
active_robots_today: 0,
|
||||||
|
last_day_nonkyc_btc_premium: 0,
|
||||||
|
last_day_volume: 0,
|
||||||
|
lifetime_volume: 0,
|
||||||
|
version: { major: 0, minor: 0, patch: 0 },
|
||||||
|
};
|
||||||
const premiums: number[] = [];
|
const premiums: number[] = [];
|
||||||
const volumes: number[] = [];
|
const volumes: number[] = [];
|
||||||
let highestVersion: Version = { major: 0, minor: 0, patch: 0 };
|
let highestVersion: Version = { major: 0, minor: 0, patch: 0 };
|
||||||
@ -38,19 +36,20 @@ export const updateExchangeInfo = (federation: Federation): ExchangeInfo => {
|
|||||||
'lifetime_volume',
|
'lifetime_volume',
|
||||||
];
|
];
|
||||||
|
|
||||||
Object.values(federation.coordinators).forEach((coordinator, index) => {
|
Object.values(federation.coordinators)
|
||||||
if (coordinator.info !== undefined && coordinator.enabled === true) {
|
.filter((coor) => coor.isUpdated())
|
||||||
premiums[index] = coordinator.info.last_day_nonkyc_btc_premium;
|
.forEach((coordinator, index) => {
|
||||||
volumes[index] = coordinator.info.last_day_volume;
|
if (coordinator.info !== undefined) {
|
||||||
highestVersion = getHigherVer(highestVersion, coordinator.info.version);
|
premiums[index] = coordinator.info.last_day_nonkyc_btc_premium;
|
||||||
active_robots_today = Math.max(active_robots_today, coordinator.info.active_robots_today);
|
volumes[index] = coordinator.info.last_day_volume;
|
||||||
|
highestVersion = getHigherVer(highestVersion, coordinator.info.version);
|
||||||
|
active_robots_today = Math.max(active_robots_today, coordinator.info.active_robots_today);
|
||||||
|
|
||||||
aggregations.forEach((key: any) => {
|
aggregations.forEach((key: any) => {
|
||||||
info[key] = Number(info[key]) + Number(coordinator.info[key]);
|
info[key] = Number(info[key]) + Number(coordinator.info[key]);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return null;
|
});
|
||||||
});
|
|
||||||
|
|
||||||
info.last_day_nonkyc_btc_premium = weightedMean(premiums, volumes);
|
info.last_day_nonkyc_btc_premium = weightedMean(premiums, volumes);
|
||||||
info.version = highestVersion;
|
info.version = highestVersion;
|
||||||
@ -68,7 +67,16 @@ export interface Exchange {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const defaultExchange: Exchange = {
|
export const defaultExchange: Exchange = {
|
||||||
info: defaultExchangeInfo,
|
info: {
|
||||||
|
num_public_buy_orders: 0,
|
||||||
|
num_public_sell_orders: 0,
|
||||||
|
book_liquidity: 0,
|
||||||
|
active_robots_today: 0,
|
||||||
|
last_day_nonkyc_btc_premium: 0,
|
||||||
|
last_day_volume: 0,
|
||||||
|
lifetime_volume: 0,
|
||||||
|
version: { major: 0, minor: 0, patch: 0 },
|
||||||
|
},
|
||||||
enabledCoordinators: 0,
|
enabledCoordinators: 0,
|
||||||
onlineCoordinators: 0,
|
onlineCoordinators: 0,
|
||||||
loadingCoordinators: 0,
|
loadingCoordinators: 0,
|
||||||
|
@ -65,10 +65,8 @@ export class Federation {
|
|||||||
this.exchange.loadingCoordinators =
|
this.exchange.loadingCoordinators =
|
||||||
this.exchange.loadingCoordinators < 1 ? 0 : this.exchange.loadingCoordinators - 1;
|
this.exchange.loadingCoordinators < 1 ? 0 : this.exchange.loadingCoordinators - 1;
|
||||||
this.loading = this.exchange.loadingCoordinators > 0;
|
this.loading = this.exchange.loadingCoordinators > 0;
|
||||||
if (Object.values(this.coordinators).every((coor) => coor.isUpdated())) {
|
this.updateExchange();
|
||||||
this.updateExchange();
|
this.triggerHook('onFederationUpdate');
|
||||||
this.triggerHook('onFederationUpdate');
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Setup
|
// Setup
|
||||||
@ -98,6 +96,16 @@ export class Federation {
|
|||||||
|
|
||||||
update = async (): Promise<void> => {
|
update = async (): Promise<void> => {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
|
this.exchange.info = {
|
||||||
|
num_public_buy_orders: 0,
|
||||||
|
num_public_sell_orders: 0,
|
||||||
|
book_liquidity: 0,
|
||||||
|
active_robots_today: 0,
|
||||||
|
last_day_nonkyc_btc_premium: 0,
|
||||||
|
last_day_volume: 0,
|
||||||
|
lifetime_volume: 0,
|
||||||
|
version: { major: 0, minor: 0, patch: 0 },
|
||||||
|
};
|
||||||
this.exchange.loadingCoordinators = Object.keys(this.coordinators).length;
|
this.exchange.loadingCoordinators = Object.keys(this.coordinators).length;
|
||||||
for (const coor of Object.values(this.coordinators)) {
|
for (const coor of Object.values(this.coordinators)) {
|
||||||
await coor.update(() => {
|
await coor.update(() => {
|
||||||
@ -151,6 +159,7 @@ export class Federation {
|
|||||||
this.exchange.enabledCoordinators = Object.values(this.coordinators).filter(
|
this.exchange.enabledCoordinators = Object.values(this.coordinators).filter(
|
||||||
(c) => c.enabled,
|
(c) => c.enabled,
|
||||||
).length;
|
).length;
|
||||||
|
this.triggerHook('onFederationUpdate');
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import { type Coordinator } from '../models';
|
|
||||||
|
|
||||||
interface Version {
|
interface Version {
|
||||||
major: number | null;
|
major: number | null;
|
||||||
minor: number | null;
|
minor: number | null;
|
||||||
@ -61,58 +59,4 @@ const getHigherVer = (ver0: Version, ver1: Version): Version => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const aggregateInfo = (federation: Coordinator[]): AggregatedInfo => {
|
export default getHigherVer;
|
||||||
const info = {
|
|
||||||
onlineCoordinators: 0,
|
|
||||||
totalCoordinators: 0,
|
|
||||||
num_public_buy_orders: 0,
|
|
||||||
num_public_sell_orders: 0,
|
|
||||||
book_liquidity: 0,
|
|
||||||
active_robots_today: 0,
|
|
||||||
last_day_nonkyc_btc_premium: 0,
|
|
||||||
last_day_volume: 0,
|
|
||||||
lifetime_volume: 0,
|
|
||||||
version: { major: 0, minor: 0, patch: 0 },
|
|
||||||
};
|
|
||||||
info.totalCoordinators = federation.length;
|
|
||||||
const addUp: toAdd[] = [
|
|
||||||
'num_public_buy_orders',
|
|
||||||
'num_public_sell_orders',
|
|
||||||
'book_liquidity',
|
|
||||||
'active_robots_today',
|
|
||||||
'last_day_volume',
|
|
||||||
'lifetime_volume',
|
|
||||||
];
|
|
||||||
|
|
||||||
addUp.map((key) => {
|
|
||||||
let value = 0;
|
|
||||||
federation.map((coordinator) => {
|
|
||||||
if (coordinator.info != null) {
|
|
||||||
value = value + coordinator.info[key];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
info[key] = value;
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
const premiums: number[] = [];
|
|
||||||
const volumes: number[] = [];
|
|
||||||
let highestVersion = { major: 0, minor: 0, patch: 0 };
|
|
||||||
federation.map((coordinator, index) => {
|
|
||||||
if (coordinator.info != null) {
|
|
||||||
info.onlineCoordinators = info.onlineCoordinators + 1;
|
|
||||||
premiums[index] = coordinator.info.last_day_nonkyc_btc_premium;
|
|
||||||
volumes[index] = coordinator.info.last_day_volume;
|
|
||||||
highestVersion = getHigherVer(highestVersion, coordinator.info.version);
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
});
|
|
||||||
|
|
||||||
info.last_day_nonkyc_btc_premium = weightedMean(premiums, volumes);
|
|
||||||
info.version = highestVersion;
|
|
||||||
|
|
||||||
return info;
|
|
||||||
};
|
|
||||||
|
|
||||||
export default aggregateInfo;
|
|
||||||
|
Loading…
Reference in New Issue
Block a user