diff options
author | Christian Göttsche <cgzones@googlemail.com> | 2020-10-08 16:34:54 +0200 |
---|---|---|
committer | cgzones <cgzones@googlemail.com> | 2020-10-16 20:00:14 +0200 |
commit | 7cd093ce95c1f59cfc1ee2786578457ea6fa1559 (patch) | |
tree | 6f86c845bed7b5ce58e222e8000e53d80756578c /linux/Platform.c | |
parent | a8029612862e6ef6ab55b2f7adc2c8b4ac554cee (diff) |
Add NetworkIOMeter
Diffstat (limited to 'linux/Platform.c')
-rw-r--r-- | linux/Platform.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/linux/Platform.c b/linux/Platform.c index c7826418..6a3ffab2 100644 --- a/linux/Platform.c +++ b/linux/Platform.c @@ -25,6 +25,7 @@ in the source distribution for its full text. #include "DateMeter.h" #include "DateTimeMeter.h" #include "HostnameMeter.h" +#include "NetworkIOMeter.h" #include "zfs/ZfsArcMeter.h" #include "zfs/ZfsCompressedArcMeter.h" #include "LinuxProcess.h" @@ -140,6 +141,7 @@ const MeterClass* const Platform_meterTypes[] = { &ZfsArcMeter_class, &ZfsCompressedArcMeter_class, &DiskIOMeter_class, + &NetworkIOMeter_class, &SELinuxMeter_class, NULL }; @@ -338,3 +340,46 @@ void Platform_getDiskIO(unsigned long int *bytesRead, unsigned long int *bytesWr *bytesWrite = 512 * write_sum; *msTimeSpend = timeSpend_sum; } + +void Platform_getNetworkIO(unsigned long int *bytesReceived, + unsigned long int *packetsReceived, + unsigned long int *bytesTransmitted, + unsigned long int *packetsTransmitted) { + FILE *fd = fopen(PROCDIR "/net/dev", "r"); + if (!fd) { + *bytesReceived = 0; + *packetsReceived = 0; + *bytesTransmitted = 0; + *packetsTransmitted = 0; + return; + } + + unsigned long int bytesReceivedSum = 0, packetsReceivedSum = 0, bytesTransmittedSum = 0, packetsTransmittedSum = 0; + char lineBuffer[512]; + while (fgets(lineBuffer, sizeof(lineBuffer), fd)) { + char interfaceName[32]; + unsigned long int bytesReceivedParsed, packetsReceivedParsed, bytesTransmittedParsed, packetsTransmittedParsed; + if (fscanf(fd, "%31s %lu %lu %*u %*u %*u %*u %*u %*u %lu %lu %*u %*u %*u %*u %*u %*u", + interfaceName, + &bytesReceivedParsed, + &packetsReceivedParsed, + &bytesTransmittedParsed, + &packetsTransmittedParsed) != 5) + continue; + + if (0 == strcmp(interfaceName, "lo:")) + continue; + + bytesReceivedSum += bytesReceivedParsed; + packetsReceivedSum += packetsReceivedParsed; + bytesTransmittedSum += bytesTransmittedParsed; + packetsTransmittedSum += packetsTransmittedParsed; + } + + fclose(fd); + + *bytesReceived = bytesReceivedSum; + *packetsReceived = packetsReceivedSum; + *bytesTransmitted = bytesTransmittedSum; + *packetsTransmitted = packetsTransmittedSum; +} |