Improve ADB based monitoring agent
- Ensure "Mobile Data" option is enabled before starting the test
- Enable logging
- Run as systemd service instead of daemon
Change-Id: Id446071961692afe5bda41e827068ffe11dd2350
diff --git a/edge-monitoring/agent_adb/config.json b/edge-monitoring/agent_adb/config.json
index 8c91c94..094cb5f 100644
--- a/edge-monitoring/agent_adb/config.json
+++ b/edge-monitoring/agent_adb/config.json
@@ -1,5 +1,5 @@
{
- "edge_name": "production-edge-example",
+ "edge_name": "ace-example",
"adb": {
"path": "/usr/local/bin/adb",
"apn_mode_toggle_location": {
@@ -8,5 +8,6 @@
}
},
"report_url": "https://aether.onlab.us/edges",
- "report_interval": 180
+ "report_interval": 180,
+ "log_file": "/var/log/edge_monitoring_agent.log"
}
diff --git a/edge-monitoring/agent_adb/edge-mon-agent.service b/edge-monitoring/agent_adb/edge-mon-agent.service
new file mode 100644
index 0000000..3ee8057
--- /dev/null
+++ b/edge-monitoring/agent_adb/edge-mon-agent.service
@@ -0,0 +1,13 @@
+[Unit]
+Description=Aether Edge Monitoring Agent
+After=multi-user.target
+
+[Service]
+Type=simple
+Environment=CONFIG_FILE=/etc/aether-edge-mon/config.json
+ExecStart=/etc/aether-edge-mon/edge_monitoring_agent_adb.py
+ExecStartPre=/bin/sleep 60
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py b/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py
old mode 100644
new mode 100755
index f26f5d1..86c05d5
--- a/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py
+++ b/edge-monitoring/agent_adb/edge_monitoring_agent_adb.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
# Copyright 2020-present Open Networking Foundation
#
@@ -14,12 +14,13 @@
# See the License for the specific language governing permissions and
# limitations under the License
+import sys
import os
import time
import requests
import json
import enum
-import daemon
+import logging
from collections import namedtuple
from pyadb import ADB
@@ -36,6 +37,12 @@
object_hook=lambda d: namedtuple('X', d.keys())(*d.values())
)
+logging.basicConfig(
+ filename=CONF.log_file,
+ format='%(asctime)s [%(levelname)s] %(message)s',
+ level=logging.WARN
+)
+
ADB_GET_COMMANDS = {
"apn_mode": "settings get global airplane_mode_on",
"lte_state": "dumpsys telephony.registry | grep -m1 mDataConnectionState",
@@ -72,9 +79,10 @@
def _run_adb_shell(adb, command):
result, error = adb.shell_command(command)
- if error is not None:
- err = "[ERROR]: " + command + " failed"
- return False, err
+ # error is returned even when succeeded
+ # so ignore error value here
+ if result:
+ logging.debug(result)
time.sleep(2)
result = result[0] if result is not None else None
return True, result
@@ -132,22 +140,35 @@
'''
report the aether network state to the monitoring server
'''
+ logging.info("Sending report %s", edge_status)
try:
result = requests.post(CONF.report_url, json=edge_status)
except requests.exceptions.ConnectionError:
+ logging.error("Failed to report for %s", e)
+ pass
+ try:
+ result.raise_for_status()
+ except requests.exceptions.HTTPError as e:
+ logging.error("Failed to report for %s", e)
pass
-def run():
+def main():
adb = ADB()
if adb.set_adb_path(CONF.adb.path) is False:
- err = "[ERROR]: " + CONF.adb.path + " not found"
- return State.error, err
+ logging.error(CONF.adb.path + " not found")
+ sys.exit(1)
dev = adb.get_devices()
if len(dev) == 0:
- return State.error, "Device not found"
+ logging.error("No device found")
+ sys.exit(1)
+
adb.set_target_device(dev[0])
+ success, result = _run_adb_shell(adb, "svc data enable")
+ if not success:
+ logging.error("Failed to turn data on")
+ sys.exit(1)
while True:
cp_state, err = get_control_plane_state(adb)
@@ -160,10 +181,5 @@
time.sleep(CONF.report_interval)
-def main():
- with daemon.DaemonContext():
- run()
-
-
if __name__ == "__main__":
main()
diff --git a/edge-monitoring/agent_adb/requirements.txt b/edge-monitoring/agent_adb/requirements.txt
index bee016d..a8d3333 100644
--- a/edge-monitoring/agent_adb/requirements.txt
+++ b/edge-monitoring/agent_adb/requirements.txt
@@ -1,3 +1,2 @@
requests
git+git://github.com/sch3m4/pyadb@master#egg=pyadb
-python-daemon