diff --git a/web-console/src/dialogs/supervisor-table-action-dialog/supervisor-statistics-table/supervisor-statistics-table.tsx b/web-console/src/dialogs/supervisor-table-action-dialog/supervisor-statistics-table/supervisor-statistics-table.tsx
index d0c9ee8756ce..96d4f05333ad 100644
--- a/web-console/src/dialogs/supervisor-table-action-dialog/supervisor-statistics-table/supervisor-statistics-table.tsx
+++ b/web-console/src/dialogs/supervisor-table-action-dialog/supervisor-statistics-table/supervisor-statistics-table.tsx
@@ -76,16 +76,18 @@ export const SupervisorStatisticsTable = React.memo(function SupervisorStatistic
const formatNumber = isRate ? formatRate : formatInteger;
const formatData = isRate ? formatByteRate : formatBytes;
- const bytes = c.processedBytes ? ` (${formatData(c.processedBytes)})` : '';
- return (
+ return c.processedBytes ? (
-
{`Processed: ${formatNumber(c.processed)}${bytes}`}
+
{`Input: ${formatData(c.processedBytes)}`}
+ {Boolean(c.processed) &&
{`Processed: ${formatNumber(c.processed)}`}
}
{Boolean(c.processedWithError) && (
-
Processed with error: {formatNumber(c.processedWithError)}
+
{`Processed with error: ${formatNumber(c.processedWithError)}`}
)}
- {Boolean(c.thrownAway) &&
Thrown away: {formatNumber(c.thrownAway)}
}
- {Boolean(c.unparseable) &&
Unparseable: {formatNumber(c.unparseable)}
}
+ {Boolean(c.thrownAway) &&
{`Thrown away: ${formatNumber(c.thrownAway)}`}
}
+ {Boolean(c.unparseable) &&
{`Unparseable: ${formatNumber(c.unparseable)}`}
}
+ ) : (
+ No activity
);
}
diff --git a/web-console/src/views/supervisors-view/supervisors-view.tsx b/web-console/src/views/supervisors-view/supervisors-view.tsx
index 75a0e9482f57..0b1bd9a19d29 100644
--- a/web-console/src/views/supervisors-view/supervisors-view.tsx
+++ b/web-console/src/views/supervisors-view/supervisors-view.tsx
@@ -875,19 +875,25 @@ export class SupervisorsView extends React.PureComponent<
const c = getTotalSupervisorStats(value, statsKey, activeTaskIds);
const seconds = getRowStatsKeySeconds(statsKey);
+ const issues =
+ (c.processedWithError || 0) + (c.thrownAway || 0) + (c.unparseable || 0);
const totalLabel = `Total (past ${statsKey}): `;
- const bytes = c.processedBytes ? ` (${formatByteRate(c.processedBytes)})` : '';
- return (
+ return issues ? (
{`Processed: ${formatRate(c.processed)}${bytes}`}
+ data-tooltip={`${totalLabel}${formatBytes(c.processedBytes * seconds)}`}
+ >{`Input: ${formatByteRate(c.processedBytes)}`}
+ {Boolean(c.processed) && (
+ {`Processed: ${formatRate(c.processed)}`}
+ )}
{Boolean(c.processedWithError) && (
Processed with error: {formatRate(c.processedWithError)}
@@ -895,7 +901,7 @@ export class SupervisorsView extends React.PureComponent<
{Boolean(c.thrownAway) && (
Thrown away: {formatRate(c.thrownAway)}
@@ -903,12 +909,22 @@ export class SupervisorsView extends React.PureComponent<
{Boolean(c.unparseable) && (
Unparseable: {formatRate(c.unparseable)}
)}
+ ) : c.processedBytes ? (
+ {`Processed: ${formatRate(c.processed)} (${formatByteRate(
+ c.processedBytes,
+ )})`}
+ ) : (
+ No activity
);
},
show: visibleColumns.shown('Stats'),