Add some tolerance to stat calculation so it does not fail on a fresh DB

nfs-proxy-old
Vitaliy Filippov 2022-02-11 16:37:16 +03:00
parent 732e2804e9
commit 46d2bc100f
1 changed files with 18 additions and 9 deletions

View File

@ -1345,21 +1345,30 @@ class Mon
const tm = prev_stats ? BigInt(timestamp - prev_stats.timestamp) : 0; const tm = prev_stats ? BigInt(timestamp - prev_stats.timestamp) : 0;
for (const op in op_stats) for (const op in op_stats)
{ {
op_stats[op].bps = prev_stats ? (op_stats[op].bytes - prev_stats.op_stats[op].bytes) * 1000n / tm : 0; if (prev_stats && prev_stats.op_stats && prev_stats.op_stats[op])
op_stats[op].iops = prev_stats ? (op_stats[op].count - prev_stats.op_stats[op].count) * 1000n / tm : 0; {
op_stats[op].lat = prev_stats ? (op_stats[op].usec - prev_stats.op_stats[op].usec) op_stats[op].bps = (op_stats[op].bytes - prev_stats.op_stats[op].bytes) * 1000n / tm;
/ ((op_stats[op].count - prev_stats.op_stats[op].count) || 1n) : 0; op_stats[op].iops = (op_stats[op].count - prev_stats.op_stats[op].count) * 1000n / tm;
op_stats[op].lat = (op_stats[op].usec - prev_stats.op_stats[op].usec)
/ ((op_stats[op].count - prev_stats.op_stats[op].count) || 1n);
}
} }
for (const op in subop_stats) for (const op in subop_stats)
{ {
subop_stats[op].iops = prev_stats ? (subop_stats[op].count - prev_stats.subop_stats[op].count) * 1000n / tm : 0; if (prev_stats && prev_stats.subop_stats && prev_stats.subop_stats[op])
subop_stats[op].lat = prev_stats ? (subop_stats[op].usec - prev_stats.subop_stats[op].usec) {
/ ((subop_stats[op].count - prev_stats.subop_stats[op].count) || 1n) : 0; subop_stats[op].iops = (subop_stats[op].count - prev_stats.subop_stats[op].count) * 1000n / tm;
subop_stats[op].lat = (subop_stats[op].usec - prev_stats.subop_stats[op].usec)
/ ((subop_stats[op].count - prev_stats.subop_stats[op].count) || 1n);
}
} }
for (const op in recovery_stats) for (const op in recovery_stats)
{ {
recovery_stats[op].bps = prev_stats ? (recovery_stats[op].bytes - prev_stats.recovery_stats[op].bytes) * 1000n / tm : 0; if (prev_stats && prev_stats.recovery_stats && prev_stats.recovery_stats[op])
recovery_stats[op].iops = prev_stats ? (recovery_stats[op].count - prev_stats.recovery_stats[op].count) * 1000n / tm : 0; {
recovery_stats[op].bps = (recovery_stats[op].bytes - prev_stats.recovery_stats[op].bytes) * 1000n / tm;
recovery_stats[op].iops = (recovery_stats[op].count - prev_stats.recovery_stats[op].count) * 1000n / tm;
}
} }
return { op_stats, subop_stats, recovery_stats }; return { op_stats, subop_stats, recovery_stats };
} }