Skip to content

Commit

Permalink
Merge pull request #581 from NodeFactoryIo/beroburny/bn-version
Browse files Browse the repository at this point in the history
Beacon Node Version
  • Loading branch information
BeroBurny authored Aug 11, 2021
2 parents fa8f903 + b15aae6 commit af0248b
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 8 deletions.
4 changes: 4 additions & 0 deletions src/renderer/containers/BeaconNode/BeaconNode.scss
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@
}
}

.beacon-version {
margin-top: 5px;
}

.beacon-node-charts-container {
display: flex;
flex-wrap: nowrap;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@ interface IBeaconNodeProps {
beacon: Beacon;
}

export const BeaconNodeDashboard: React.FC<IBeaconNodeProps> = ({beacon: {url, network, slot, status, docker}}) => {
export const BeaconNodeDashboard: React.FC<IBeaconNodeProps> = ({
beacon: {url, network, slot, status, version, docker},
}) => {
const [avgLatency, setAvgLatency] = useState<SimpleLineChartRecord[]>([]);
const [avgLatencyTicks, setAvgLatencyTicks] = useState<string[]>([]);
const [pieData, setPieData] = useState<ResponseErrorPieData>([
Expand Down Expand Up @@ -49,7 +51,7 @@ export const BeaconNodeDashboard: React.FC<IBeaconNodeProps> = ({beacon: {url, n
</div>

<div className='row space-between'>
<h2>{capitalize(network)}</h2>
<h3>{version}</h3>
<div className='row slot-container'>
<h3>slot</h3>
<h2>
Expand All @@ -72,6 +74,10 @@ export const BeaconNodeDashboard: React.FC<IBeaconNodeProps> = ({beacon: {url, n
/>
</>
) : null}
<div className='row slot-container'>
<h3 style={{marginLeft: "10px"}}>on</h3>
<h2>{capitalize(network)}</h2>
</div>
</div>
</div>

Expand Down
2 changes: 1 addition & 1 deletion src/renderer/ducks/beacon/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import {StartBeaconChain} from "../network/types";
import {DockerPort} from "../../services/docker/type";
import {IConfigureBNSubmitOptions} from "../../components/ConfigureBeaconNode/ConfigureBeaconNode";

export const {addBeacons, addBeacon, removeBeacon, updateSlot, updateStatus} = beaconSlice.actions;
export const {addBeacons, addBeacon, removeBeacon, updateSlot, updateStatus, updateVersion} = beaconSlice.actions;

export const startLocalBeacon = createAction<ActionWithCallback<IConfigureBNSubmitOptions>>(
"beacon/startLocalBeacon",
Expand Down
27 changes: 24 additions & 3 deletions src/renderer/ducks/beacon/sagas.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,16 @@ import {
checkDockerDemonIsOnline,
setDockerDemonIsOffline,
} from "../network/actions";
import {startLocalBeacon, removeBeacon, addBeacon, addBeacons, updateSlot, updateStatus, updateEpoch} from "./actions";
import {
startLocalBeacon,
removeBeacon,
addBeacon,
addBeacons,
updateSlot,
updateStatus,
updateEpoch,
updateVersion,
} from "./actions";
import {BeaconChain} from "../../services/docker/chain";
import {SupportedNetworks} from "../../services/eth2/supportedNetworks";
import database from "../../services/db/api/database";
Expand All @@ -47,7 +56,12 @@ import {ValidatorStatus} from "../../constants/validatorStatus";
import {cgLogger, createLogger, getBeaconLogfileFromURL, mainLogger} from "../../../main/logger";
import {setInitialBeacons} from "../settings/actions";
import {DockerRegistry} from "../../services/docker/docker-registry";
import {CgEth2ApiClient, getBeaconNodeEth2ApiClient, readBeaconChainNetwork} from "../../services/eth2/client/module";
import {
CgEth2ApiClient,
getBeaconNodeEth2ApiClient,
getBeaconNodeVersion,
readBeaconChainNetwork,
} from "../../services/eth2/client/module";
import {getClientParams} from "../../services/docker/getClientParams";

export function* pullDockerImage(
Expand Down Expand Up @@ -175,7 +189,7 @@ function* initializeBeaconsFromStore(): Generator<
| AllEffect<INetworkConfig>
| TakeEffect,
void,
Beacons & ({syncing: boolean; slot: number} | null)[] & boolean & INetworkConfig[]
Beacons & ({syncing: boolean; slot: number} | null)[] & boolean & INetworkConfig[] & string[]
> {
const store = yield database.beacons.get();
if (store !== null) {
Expand All @@ -200,6 +214,7 @@ function* initializeBeaconsFromStore(): Generator<

const stats = yield all(beacons.map(({url}) => call(getBeaconStatus, url)));
const networks = yield all(beacons.map(({url}) => call(readBeaconChainNetwork, url)));
const versions = yield all(beacons.map(({url}) => call(getBeaconNodeVersion, url)));

yield all(beacons.map(({url}) => spawn(watchOnHead, url)));

Expand All @@ -210,6 +225,7 @@ function* initializeBeaconsFromStore(): Generator<
network: networks[index]?.networkName || "Unknown",
docker: docker.id !== "" ? docker : undefined,
slot: stats[index]?.slot || 0,
version: versions[index],
status:
stats[index] !== null
? stats[index].syncing
Expand Down Expand Up @@ -259,6 +275,11 @@ export function* watchOnHead(
isStarting = false;
}, 30 * 1000);

if (!beacon.version) {
const version = ((yield call(getBeaconNodeVersion, beacon.url)) as unknown) as string;
yield put(updateVersion(version, beacon.url));
}

cgLogger.info("Watching beacon on URL", url);
const beaconLogger = createLogger(url, getBeaconLogfileFromURL(url));
while (true) {
Expand Down
10 changes: 10 additions & 0 deletions src/renderer/ducks/beacon/slice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ export type Beacon = {
url: string;
status: BeaconStatus;
network: string;
version?: string;
slot: number;
docker?: DockerConfig;
};
Expand Down Expand Up @@ -71,6 +72,15 @@ export const beaconSlice = createSlice({
meta: url,
}),
},
updateVersion: {
reducer: (state, action: PayloadAction<string, string, string>): void => {
state.beacons[action.meta].version = action.payload;
},
prepare: (version: string, url: string): {payload: string; meta: string} => ({
payload: version,
meta: url,
}),
},
removeBeacon: (state, action: PayloadAction<string>): void => {
delete state.beacons[action.payload];
const index = state.keys.findIndex((key) => key === action.payload);
Expand Down
8 changes: 6 additions & 2 deletions src/renderer/services/eth2/client/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,13 @@ export async function readBeaconChainNetwork(url: string, throwOnEmpty = false):
}
}

export async function getBeaconNodeEth2ApiClient(beaconNodeUrl: string): Promise<typeof CgEth2ApiClient> {
export async function getBeaconNodeVersion(beaconNodeUrl: string): Promise<string> {
const response = await new HttpClient(beaconNodeUrl).get<{data: {version: string}}>(`/eth/v1/node/version`);
const version = response.data.version.toLowerCase();
return response.data.version;
}

export async function getBeaconNodeEth2ApiClient(beaconNodeUrl: string): Promise<typeof CgEth2ApiClient> {
const version = (await getBeaconNodeVersion(beaconNodeUrl)).toLowerCase();

switch (true) {
case version.includes("nimbus"):
Expand Down

0 comments on commit af0248b

Please sign in to comment.