bug fix : getNetworkBandwidth change logic 71/203171/3 openSourceComment
authorjaehoon.hyun <jaehoon.hyun@samsung.com>
Wed, 10 Apr 2019 09:11:21 +0000 (18:11 +0900)
committerjaehoon.hyun <jaehoon.hyun@samsung.com>
Wed, 10 Apr 2019 09:18:13 +0000 (18:18 +0900)
Change-Id: I595bbcc0ce6dc80d4b71a3600ce63400e5db170d

src/scoringmgr/resourceservice/resourceservice.c

index 9a9db0c6c186e1871a43ea521004ddfb922f03be..1804123f09afdeb6f1ff9c3a3a92c71bcfe50623 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/sockios.h>\r
 #include <linux/ethtool.h>\r
 #include <net/if.h>\r
+#include <ifaddrs.h>\r
 \r
 //cpu\r
 #include <sys/sysinfo.h>\r
@@ -23,7 +24,7 @@ typedef double (*tGetResource)(const char *);
 typedef struct\r
 {\r
     pthread_t t;\r
-    int done;\r
+    volatile int done;\r
 } tThread;\r
 \r
 tThread cpuUsageThread;\r
@@ -176,7 +177,7 @@ static void *daemonCpuUsage(void *obj)
     {\r
         gCpuUsage = goCpuUsage();\r
     }\r
-    printf("daemonNetworkUsage done\n");\r
+    printf("daemonCpuUsage done\n");\r
 \r
     return NULL;\r
 }\r
@@ -195,52 +196,59 @@ static double getNetworkMbps()
 \r
 static double getNetworkBandwidth()\r
 {\r
-    int sock;\r
+#ifdef __linux__\r
+    struct ifaddrs *ifap, *ifa;\r
     struct ifreq ifr;\r
     struct ethtool_cmd edata;\r
-    int rc;\r
-\r
-    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);\r
-    if (sock < 0)\r
-    {\r
-        perror("socket");\r
-        exit(1);\r
-    }\r
+    int sock, rc;\r
+    double max_speed = 0;\r
 \r
-    strncpy(ifr.ifr_name, "enp4s0", sizeof(ifr.ifr_name));\r
-    ifr.ifr_data = (caddr_t)&edata;\r
+    getifaddrs(&ifap);\r
 \r
-    edata.cmd = ETHTOOL_GSET;\r
+    double total = 0;\r
+    int count = 0;\r
 \r
-    rc = ioctl(sock, SIOCETHTOOL, &ifr);\r
-    if (rc < 0)\r
+    for (ifa = ifap; ifa; ifa = ifa->ifa_next)\r
     {\r
-        perror("ioctl");\r
-        exit(1);\r
+\r
+        if (ifa->ifa_addr->sa_family == AF_INET)\r
+        {\r
+\r
+            sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_IP);\r
+            if (sock < 0)\r
+            {\r
+                perror("socket");\r
+                exit(1);\r
+            }\r
+\r
+            if (!SSTRNCMP(ifa->ifa_name, "eth") ||\r
+                !SSTRNCMP(ifa->ifa_name, "enp") ||\r
+                !SSTRNCMP(ifa->ifa_name, "wl"))\r
+            {\r
+                strncpy(ifr.ifr_name, ifa->ifa_name, sizeof(ifr.ifr_name));\r
+                ifr.ifr_data = (caddr_t)&edata;\r
+\r
+                edata.cmd = ETHTOOL_GSET;\r
+\r
+                rc = ioctl(sock, SIOCETHTOOL, &ifr);\r
+                if (rc < 0)\r
+                {\r
+                    perror("ioctl");\r
+                    exit(1);\r
+                }\r
+\r
+                total += (double)ethtool_cmd_speed(&edata);\r
+                count++;\r
+\r
+            }\r
+        }\r
     }\r
 \r
-    // switch (ethtool_cmd_speed(&edata))\r
-    // {\r
-    // case SPEED_10:\r
-    //     printf("10Mbps\n");\r
-    //     break;\r
-    // case SPEED_100:\r
-    //     printf("100Mbps\n");\r
-    //     break;\r
-    // case SPEED_1000:\r
-    //     printf("1Gbps\n");\r
-    //     break;\r
-    // case SPEED_2500:\r
-    //     printf("2.5Gbps\n");\r
-    //     break;\r
-    // case SPEED_10000:\r
-    //     printf("10Gbps\n");\r
-    //     break;\r
-    // default:\r
-    //     printf("Speed returned is %d\n", edata.speed);\r
-    // }\r
-\r
-    return (double)ethtool_cmd_speed(&edata);\r
+    return total / count;\r
+#else\r
+#error "Not Support this architecture"\r
+    return 0.0;\r
+#endif\r
 }\r
 \r
 unsigned long networkPackets(char *ifNamePath)\r
@@ -384,6 +392,7 @@ static void *daemonDiskUsage(void *obj)
     while (!diskUsageThread.done)\r
     {\r
     }\r
+\r
     printf("daemonDiskUsage done\n");\r
 \r
     return NULL;\r
@@ -457,6 +466,7 @@ double getResource(const char *resourceName)
 void startResourceService()\r
 {\r
     printf("startResourceService\n");\r
+\r
     pthread_create(&cpuUsageThread.t, NULL, daemonCpuUsage, NULL);\r
     pthread_create(&networkUsageThread.t, NULL, daemonNetworkUsage, NULL);\r
     pthread_create(&diskUsageThread.t, NULL, daemonDiskUsage, NULL);\r
@@ -464,10 +474,22 @@ void startResourceService()
 \r
 void stopResourceService()\r
 {\r
-    printf("stopResourceService\n");\r
     cpuUsageThread.done = 1;\r
     networkUsageThread.done = 1;\r
     diskUsageThread.done = 1;\r
+\r
+    int status;\r
+\r
+    //TODO : pthread_join using\r
+    // pthread_join(cpuUsageThread.t,NULL);\r
+    // pthread_join(networkUsageThread.t,NULL);\r
+    // pthread_join(diskUsageThread.t,NULL);\r
+\r
+    pthread_detach(cpuUsageThread.t);\r
+    pthread_detach(networkUsageThread.t);\r
+    pthread_detach(diskUsageThread.t);\r
+\r
+    printf("stopResourceService end\n");\r
 }\r
 \r
 double\r