Support multiple IPs for agent to ping, use 0s instead of nulls for speedtest

Change-Id: I68290906d808f652b324bccc44f6935ea662b7e2
diff --git a/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py b/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py
index 9d808b5..472cca2 100755
--- a/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py
+++ b/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py
@@ -79,10 +79,10 @@
     'speedtest': {
         'ping': {
             'dns': {
-                'min': None,
-                'avg': None,
-                'max': None,
-                'stddev': None
+                'min': 0.0,
+                'avg': 0.0,
+                'max': 0.0,
+                'stddev': 0.0
             }
         }
     }
@@ -156,10 +156,10 @@
     Input: IP to ping, # times to ping
     Returns: dict of the min/avg/max/stddev numbers from the ping command result
     '''
-    result = {'min': None,
-              'avg': None,
-              'max': None,
-              'stddev': None}
+    result = {'min': 0.0,
+              'avg': 0.0,
+              'max': 0.0,
+              'stddev': 0.0}
     try:
         commandResult, commandOutput = _run_adb_shell(adb, ADB_GET_COMMANDS['ping_dns_result'])
         pingResult = commandOutput.split("/")
diff --git a/edge-monitoring/agent_modem/config.json b/edge-monitoring/agent_modem/config.json
index 00bb652..efd0139 100644
--- a/edge-monitoring/agent_modem/config.json
+++ b/edge-monitoring/agent_modem/config.json
@@ -5,7 +5,10 @@
         "baud": 115200,
         "ip_addr": "192.168.0.1"
     },
-    "ping_to": "1.1.1.1",
+    "ips": {
+      "user_plane_ping_test": "8.8.8.8",
+      "speedtest_ping_dns": "8.8.8.8"
+    },
     "report_url": "https://monitoring.aetherproject.org/edges",
     "report_interval": 180,
     "log_file": "/var/log/edge_monitoring_agent.log"
diff --git a/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py b/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py
index 0744304..757d622 100755
--- a/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py
+++ b/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py
@@ -26,7 +26,7 @@
 from collections import namedtuple
 
 '''
-Simple script that checks Aether network operational status periodically
+"Simple" script that checks Aether network operational status periodically
 by controlling the attached 4G/LTE modem with AT commands and
 report the result to the central monitoring server.
 '''
@@ -182,7 +182,7 @@
 
 
 def get_user_plane_state(modem):
-    resp = os.system("ping -c 3 " + CONF.ping_to + ">/dev/null 2>&1")
+    resp = os.system("ping -c 3 " + CONF.ips.user_plane_ping_test + ">/dev/null 2>&1")
     return State.connected if resp is 0 else State.disconnected, None
 
 
@@ -192,10 +192,10 @@
     Input: IP to ping, # times to ping
     Returns: dict of the min/avg/max/stddev numbers from the ping command result
     '''
-    result = {'min': None,
-              'avg': None,
-              'max': None,
-              'stddev': None}
+    result = {'min': 0.0,
+              'avg': 0.0,
+              'max': 0.0,
+              'stddev': 0.0}
     try:
         pingResult = subprocess.check_output(
                 "ping -c " + str(count) + " " + ip + \
@@ -217,7 +217,7 @@
     2) # TODO: Performs ping to device on network.
     '''
     speedtest_ping = {}
-    speedtest_ping['dns'] = run_ping_test("8.8.8.8", 10)
+    speedtest_ping['dns'] = run_ping_test(CONF.ips.speedtest_ping_dns, 10)
     return speedtest_ping
 
 
@@ -247,11 +247,12 @@
         logging.error("Failed to connect the modem for %s", e)
         sys.exit(1)
 
-    success = os.system("sudo ip route replace {}/32 via {}".format(
-        CONF.ping_to, CONF.modem.ip_addr))
-    if success is not 0:
-        logging.error("Failed to add test routing.")
-        sys.exit(1)
+    for ip in CONF.ips:
+        success = os.system("sudo ip route replace {}/32 via {}".format(
+            ip, CONF.modem.ip_addr))
+        if success is not 0:
+            logging.error("Failed to add test routing to " + ip)
+            sys.exit(1)
 
     while True:
         cp_state, cp_msg = get_control_plane_state(modem)
diff --git a/edge-monitoring/edge_monitoring_server.py b/edge-monitoring/edge_monitoring_server.py
index f7ec3db..20ddc94 100755
--- a/edge-monitoring/edge_monitoring_server.py
+++ b/edge-monitoring/edge_monitoring_server.py
@@ -44,10 +44,10 @@
         'speedtest': {
             'ping': {
                 'dns': {
-                    'min': None,
-                    'avg': None,
-                    'max': None,
-                    'stddev': None
+                    'min': 0.0,
+                    'avg': 0.0,
+                    'max': 0.0,
+                    'stddev': 0.0
                 }
             }
         },
@@ -141,10 +141,10 @@
         if time_elapsed > NO_RESULT_THRESHOLD:
             edge['status']['control_plane'] = "no result"
             edge['status']['user_plane'] = "no result"
-            edge['speedtest']['ping']['dns'] = {'min': None,
-                                                'avg': None,
-                                                'max': None,
-                                                'stddev': None}
+            edge['speedtest']['ping']['dns'] = {'min': 0.0,
+                                                'avg': 0.0,
+                                                'max': 0.0,
+                                                'stddev': 0.0}
 
 def remove_edge_from_metrics(name):
     try:
@@ -178,14 +178,14 @@
         connect_status = edge['status']['control_plane']
         ping_status = edge['status']['user_plane']
 
-        valid_speedtest_results = True
+        speedtest_results_exist = True
         if edge['speedtest']['ping']['dns']['avg']:
             ping_dns_min_result = edge['speedtest']['ping']['dns']['min']
             ping_dns_avg_result = edge['speedtest']['ping']['dns']['avg']
             ping_dns_max_result = edge['speedtest']['ping']['dns']['max']
             ping_dns_stddev_result = edge['speedtest']['ping']['dns']['stddev']
         else:
-            valid_speedtest_results = False
+            speedtest_results_exist = False
 
         cp_status.labels(edge['name']).set(status_codes[connect_status])
         up_status.labels(edge['name']).set(status_codes[ping_status])
@@ -209,7 +209,7 @@
             if connect_status == "connected" and ping_status == "connected":
                 e2e_tests_ok.labels(edge['name']).set(1)
 
-        if valid_speedtest_results:
+        if speedtest_results_exist:
             ping_dns_min.labels(edge['name']).set(ping_dns_min_result)
             ping_dns_avg.labels(edge['name']).set(ping_dns_avg_result)
             ping_dns_max.labels(edge['name']).set(ping_dns_max_result)
@@ -271,10 +271,10 @@
         'speedtest': {
             'ping': {
                 'dns': {
-                    'min': None,
-                    'avg': None,
-                    'max': None,
-                    'stddev': None
+                    'min': 0.0,
+                    'avg': 0.0,
+                    'max': 0.0,
+                    'stddev': 0.0
                 }
             }
         },