[AETHER-3268] - Continue reporting upon dry ping failure
Change-Id: I854892e61dd530f93e3a87536b77e052841b47af
diff --git a/VERSION b/VERSION
index 972ef76..5b209ea 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.7.9
+0.7.10
diff --git a/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py b/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py
index 6a32cb0..bcd8b06 100755
--- a/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py
+++ b/edge-monitoring/agent_modem/edge_monitoring_agent_modem.py
@@ -24,6 +24,8 @@
report the result to the central monitoring server.
'''
+USE_MODEM_CMDS = False
+
# Parse config with backwards compatibility with config.json pre 0.6.6
config_file_contents = open(os.getenv('CONFIG_FILE', "./config.json")).read()
config_file_contents = config_file_contents.replace("user_plane_ping_test", "dns")
@@ -121,8 +123,11 @@
def get_control_plane_state(modem, dongle_stats=None):
- if dongle_stats and dongle_stats['Connection'] == 'Connected':
- return State.connected
+ if not modem and dongle_stats:
+ if dongle_stats and dongle_stats['Connection'] == 'Connected':
+ return State.connected
+ else:
+ return State.disconnected
# Disable radio fuction
# "echo" works more stable than serial for this action
@@ -174,7 +179,7 @@
return state
-def get_user_plane_state(modem):
+def get_user_plane_state():
if "dry_run" in CONF.ips._fields and CONF.ips.dry_run: # run dry_run latency test as user plane test
dry_run_latency, dry_run_passed = run_ping_test(CONF.ips.dry_run, 10)
if dry_run_passed:
@@ -320,10 +325,15 @@
def get_signal_quality(modem, dongle_stats=None):
- if dongle_stats and dongle_stats['RSRQ'] != '' and dongle_stats['RSRP'] != '':
- rsrq = int((float(dongle_stats['RSRQ']) + 19.5) * 2)
- rsrp = int(float(dongle_stats['RSRP']) + 140)
- return {'rsrq': rsrq, 'rsrp': rsrp}
+ if not modem and dongle_stats:
+ if dongle_stats['RSRQ'] != '' and dongle_stats['RSRP'] != '':
+ rsrq = int((float(dongle_stats['RSRQ']) + 19.5) * 2)
+ rsrp = int(float(dongle_stats['RSRP']) + 140)
+ return {'rsrq': rsrq, 'rsrp': rsrp}
+ else:
+ return {'rsrq': 0, 'rsrp': 0}
+
+ # Fall back to modem cmds
success, result = modem.write('AT+CESQ')
logging.debug("get_signal_quality success %i result %s",success,result)
@@ -479,8 +489,6 @@
logging.error("Failed to send report: " + str(e))
c.close()
- time.sleep(CONF.report_interval)
-
def reset_usb():
try:
# Attempt to run uhubctl
@@ -533,46 +541,51 @@
time.sleep(10) # Sleep for 10 seconds before retry
sys.exit(1)
- modem = Modem(CONF.modem.port, CONF.modem.baud)
- try:
- modem.connect()
- except serial.serialutil.SerialException as e:
- logging.error("Failed to connect the modem for %s", e)
- sys.exit(1)
-
- while True:
- dongle_stats = get_dongle_stats()
- cp_state = get_control_plane_state(modem, dongle_stats)
- if cp_state != State.connected:
- logging.error("Control plane not connected")
- continue
- signal_quality = get_signal_quality(modem, dongle_stats)
- if cp_state is State.error:
- logging.error("Modem is in error state.")
- reset_usb()
+ if USE_MODEM_CMDS:
+ modem = Modem(CONF.modem.port, CONF.modem.baud)
+ try:
+ modem.connect()
+ except serial.serialutil.SerialException as e:
+ logging.error("Failed to connect the modem for %s", e)
sys.exit(1)
- if cp_state is State.disconnected:
- # Failed to attach, don't need to run other tests
- logging.error("Check control plane - fail")
- report_status(signal_quality, dongle_stats)
- continue
+ else:
+ modem = None
- up_state, dry_run_latency = get_user_plane_state(modem)
+ connect_retries = 0
+ while True:
+ dongle_retries = 0
+ dongle_stats = get_dongle_stats()
+ while not dongle_stats['SuccessfulFetch']:
+ log.error("Dongle error")
+ dongle_retries += 1
+ if dongle_retries > 10:
+ logging.warn("Rebooting Pi")
+ os.system("shutdown /r /t 0")
+ sys.exit(1)
+ dongle_stats = get_dongle_stats()
+
+ cp_state = get_control_plane_state(modem, dongle_stats)
+
+ if cp_state != State.connected:
+ logging.error("Dongle not connected")
+ connect_retries += 1
+ if connect_retries > 10:
+ os.system("shutdown /r /t 0")
+ sys.exit(1)
+
+ signal_quality = get_signal_quality(modem, dongle_stats)
+ up_state, dry_run_latency = get_user_plane_state()
if up_state is State.disconnected:
- logging.error("Check user plane - fail")
- # Basic user plane test failed, don't need to run the rest of tests
- report_status(signal_quality, dongle_stats, cp_state)
- continue
+ logging.error("Dry run ping failed")
speedtest_ping, speedtest_status = get_ping_test(modem, dry_run_latency)
- if speedtest_status:
- speedtest_iperf = get_iperf_test(modem)
- else:
- logging.error("Check iperf check - fail")
- report_status(signal_quality, dongle_stats, cp_state, up_state, speedtest_ping)
- continue
+ if not speedtest_status:
+ logging.error("Ping tests failed")
+
+ speedtest_iperf = get_iperf_test(modem)
report_status(signal_quality, dongle_stats, cp_state, up_state, speedtest_ping, speedtest_iperf)
+ time.sleep(CONF.report_interval)
modem.close()