feat(explorer): show ping server metrics unavailable (#23914)
* feat: show ping server metrics unavailable * fix: formatting
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import {
|
import {
|
||||||
|
PingInfo,
|
||||||
PingRollupInfo,
|
PingRollupInfo,
|
||||||
PingStatus,
|
PingStatus,
|
||||||
useSolanaPingInfo,
|
useSolanaPingInfo,
|
||||||
@ -107,12 +108,10 @@ const CUSTOM_TOOLTIP = function (this: any, tooltipModel: ChartTooltipModel) {
|
|||||||
|
|
||||||
// Set Text
|
// Set Text
|
||||||
if (tooltipModel.body) {
|
if (tooltipModel.body) {
|
||||||
const { label, value } = tooltipModel.dataPoints[0];
|
const { label } = tooltipModel.dataPoints[0];
|
||||||
const tooltipContent = tooltipEl.querySelector("div");
|
const tooltipContent = tooltipEl.querySelector("div");
|
||||||
if (tooltipContent) {
|
if (tooltipContent) {
|
||||||
let innerHtml = `<div class="value">${value} ms</div>`;
|
tooltipContent.innerHTML = `${label}`;
|
||||||
innerHtml += `<div class="label">${label}</div>`;
|
|
||||||
tooltipContent.innerHTML = innerHtml;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,11 +172,30 @@ const CHART_OPTION: ChartOptions = {
|
|||||||
function PingBarChart({ pingInfo }: { pingInfo: PingRollupInfo }) {
|
function PingBarChart({ pingInfo }: { pingInfo: PingRollupInfo }) {
|
||||||
const [series, setSeries] = React.useState<Series>("short");
|
const [series, setSeries] = React.useState<Series>("short");
|
||||||
const seriesData = pingInfo[series] || [];
|
const seriesData = pingInfo[series] || [];
|
||||||
|
const maxMean = seriesData.reduce((a, b) => {
|
||||||
|
return Math.max(a, b.mean);
|
||||||
|
}, 0);
|
||||||
const seriesLength = seriesData.length;
|
const seriesLength = seriesData.length;
|
||||||
|
const backgroundColor = (val: PingInfo) => {
|
||||||
|
if (val.submitted === 0) {
|
||||||
|
return "#08a274";
|
||||||
|
}
|
||||||
|
return val.loss > 0.5 ? "#f00" : "#00D192";
|
||||||
|
};
|
||||||
const chartData: Chart.ChartData = {
|
const chartData: Chart.ChartData = {
|
||||||
labels: seriesData.map((val, i) => {
|
labels: seriesData.map((val, i) => {
|
||||||
|
if (val.submitted === 0) {
|
||||||
return `
|
return `
|
||||||
|
<div class="label">
|
||||||
|
<p class="mb-0">Ping statistics unavailable</p>
|
||||||
|
${SERIES_INFO[series].label(seriesLength - i)}min ago
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return `
|
||||||
|
<div class="value">${val.mean} ms</div>
|
||||||
|
<div class="label">
|
||||||
<p class="mb-0">${val.confirmed} of ${val.submitted} confirmed</p>
|
<p class="mb-0">${val.confirmed} of ${val.submitted} confirmed</p>
|
||||||
${
|
${
|
||||||
val.loss
|
val.loss
|
||||||
@ -188,19 +206,22 @@ function PingBarChart({ pingInfo }: { pingInfo: PingRollupInfo }) {
|
|||||||
: ""
|
: ""
|
||||||
}
|
}
|
||||||
${SERIES_INFO[series].label(seriesLength - i)}min ago
|
${SERIES_INFO[series].label(seriesLength - i)}min ago
|
||||||
|
</div>
|
||||||
`;
|
`;
|
||||||
}),
|
}),
|
||||||
datasets: [
|
datasets: [
|
||||||
{
|
{
|
||||||
minBarLength: 2,
|
minBarLength: 2,
|
||||||
backgroundColor: seriesData.map((val) =>
|
backgroundColor: seriesData.map(backgroundColor),
|
||||||
val.loss > 0.5 ? "#f00" : "#00D192"
|
hoverBackgroundColor: seriesData.map(backgroundColor),
|
||||||
),
|
|
||||||
hoverBackgroundColor: seriesData.map((val) =>
|
|
||||||
val.loss > 0.5 ? "#f00" : "#00D192"
|
|
||||||
),
|
|
||||||
borderWidth: 0,
|
borderWidth: 0,
|
||||||
data: seriesData.map((val) => val.mean || 0),
|
data: seriesData.map((val) => {
|
||||||
|
if (val.submitted === 0) {
|
||||||
|
return maxMean * 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val.mean || 0;
|
||||||
|
}),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user