1# Monitor support
2#
3# This software may be distributed under the terms of the BSD license.
4# See README for more details.
5
6import remotehost
7import config
8import rutils
9import monitor
10import time
11import os
12
13import logging
14logger = logging.getLogger()
15
16def run_monitor(devices, setup_params, refs, duts, monitors, seconds=None):
17    try:
18        air_monitor = []
19        output = "\n\tPCAP files:\n"
20        # setup log dir
21        local_log_dir = setup_params['local_log_dir']
22
23        # add/run monitors if requested
24        air_monitors = monitor.create(devices, setup_params, refs, duts,
25                                      monitors)
26        for air_monitor in air_monitors:
27            monitor.setup(air_monitor)
28            monitor.run(air_monitor, setup_params)
29            logger.warning(air_monitor.name + " - monitor started ...")
30
31        if seconds != None:
32            time.sleep(int(seconds))
33        else:
34            input("\tPress Enter to end capturing...")
35
36        # destroy monitor / get pcap
37        monitor.destroy(devices, air_monitors)
38        for air_monitor in air_monitors:
39            for log in air_monitor.logs:
40                head, tail = os.path.split(log)
41                output = output + "\t" + local_log_dir + "/" + tail + "\n"
42            air_monitor.get_logs(local_log_dir)
43        return output
44    except:
45        for air_monitor in air_monitors:
46            monitor.destroy(devices, air_monitors)
47            air_monitor.get_logs(local_log_dir)
48        raise
49
50def test_run_monitor(devices, setup_params, refs, duts, monitors):
51    """TC run standalone monitor"""
52    return run_monitor(devices, setup_params, refs, duts, monitors)
53