ArduinoStreamUtils
ArduinoStreamUtils copied to clipboard
Feature request: Calculate statistics on a (wrapped) stream
Could be interesting to be able to grab some stats of the stream usage:
- Total TX/RX bytes count
- Total TX/RX packets count (writes)
- Min/Max/Average read/write size
The only difficulty I see here: Some functions (i.e. readBytes
) could be implemented via read()
on some streams, but it can also be implemented directly by other implementations. Not sure if there's a clean way to handle it.
Hi @vshymanskyy,
Thank you for this suggestion; I think this is a good idea.
We could name the new classes:
-
CountingPrint
-
CountingStream
-
WriteCountingStream
-
ReadCountingStream
- etc.
The members could be:
-
readBytes()
-
readCount()
-
minReadSize()
-
maxReadSize()
-
avgReadSize()
-
writtenBytes()
-
writeCount()
-
minWriteSize()
-
maxWriteSize()
-
avgWriteSize()
How does that sound?
Best regards, Benoit
Sounds cool. But some names may be ambiguous esp. readBytes()
. Maybe prefix all of them with total
, min
, max
, avg
?
You're right! Maybe something like this, then:
read | write |
---|---|
readCount() |
writeCount() |
avgReadSize() |
avgWriteSize() |
maxReadSize() |
maxWriteSize() |
minReadSize() |
minWriteSize() |
totalReadSize() |
totalWriteSize() |
I'm not sure how to handle error cases: should we count them, or ignore them?
For example, if upstream's write()
function returns 0
, should I increment writeCount
? should I set minWriteSize
to 0
?
Maybe readErrors() and writeErrors()?
for such jobs I like the header-only stats classes by https://www.johndcook.com/blog/skewness_kurtosis/
he has several such classes on his website, real collectors items - I collect them here plus my adaptations: https://github.com/mhaberler/Stats