summaryrefslogtreecommitdiffstats
path: root/linux/Platform.c
diff options
context:
space:
mode:
authorChristian Göttsche <cgzones@googlemail.com>2020-10-08 16:34:54 +0200
committercgzones <cgzones@googlemail.com>2020-10-16 20:00:14 +0200
commit7cd093ce95c1f59cfc1ee2786578457ea6fa1559 (patch)
tree6f86c845bed7b5ce58e222e8000e53d80756578c /linux/Platform.c
parenta8029612862e6ef6ab55b2f7adc2c8b4ac554cee (diff)
Add NetworkIOMeter
Diffstat (limited to 'linux/Platform.c')
-rw-r--r--linux/Platform.c45
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;
+}

© 2014-2024 Faster IT GmbH | imprint | privacy policy