commit 71cd8e9580e36ce5ade0bccfc695459413fa3e81
Author: Radek Pazdera <rpazdera(a)redhat.com>
Date: Thu Nov 29 16:18:37 2012 +0100
PacketCapture: Making pcap dump files temporary
Due to problems with SELinux and a general reconsideration of packet
capture, this patch makes all the dumps saved temporary.
They will be transfered to the controller as soon as the recipe finishes
and removed imediately to avoid disk usage issues on slave side.
Signed-off-by: Radek Pazdera <rpazdera(a)redhat.com>
lnst/Controller/NetTestController.py | 11 +++++++----
lnst/Slave/NetTestSlave.py | 18 +++++++++++++-----
2 files changed, 20 insertions(+), 9 deletions(-)
---
diff --git a/lnst/Controller/NetTestController.py b/lnst/Controller/NetTestController.py
index 5e899be..1fcc496 100644
--- a/lnst/Controller/NetTestController.py
+++ b/lnst/Controller/NetTestController.py
@@ -507,7 +507,7 @@ class NetTestController:
for machine_id in self._recipe["machines"]:
hostname =
self._recipe["machines"][machine_id]['info']['hostname']
- slave_logging_dir = os.path.join(logging_root, hostname)
+ slave_logging_dir = os.path.join(logging_root, hostname + "/")
try:
os.mkdir(slave_logging_dir)
except OSError as err:
@@ -517,11 +517,14 @@ class NetTestController:
raise NetTestError(msg)
capture_files = self._remote_capture_files[machine_id]
- for remote_path in capture_files:
- filename = os.path.basename(remote_path)
+ for dev_id, remote_path in capture_files.iteritems():
+ filename = "%s.pcap" % dev_id
local_path = os.path.join(slave_logging_dir, filename)
self._copy_from_slave(machine_id, remote_path, local_path)
+ logging.info("pcap files from machine %s stored at %s",
+ machine_id, slave_logging_dir)
+
def _update_system_config(self, machine_id, res_data, persistent=False):
info = self._get_machineinfo(machine_id)
system_config = info["system_config"]
@@ -595,7 +598,7 @@ class NetTestController:
status = self._rpc_call(machine_id, "start_copy_from", remote_path)
if not status:
raise NetTestError("The requested file cannot be transfered." \
- "It file does not exist on machine %d" % machine_id)
+ "It does not exist on machine %s" % machine_id)
local_file = open(local_path, "wb")
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index 9d3a9d8..63f1f10 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -66,6 +66,7 @@ class NetTestSlaveXMLRPC:
self.clear_resource_table()
self._cache.del_old_entries()
self.reset_file_transfers()
+ self._remove_capture_files()
return "bye"
def get_new_logs(self):
@@ -117,14 +118,15 @@ class NetTestSlaveXMLRPC:
return self._netconfig.dump_config().items()
def start_packet_capture(self, filt):
- logging_dir = Logs.get_logging_root_path()
- logging_dir = os.path.abspath(logging_dir)
netconfig = self._netconfig.dump_config()
- files = []
+ files = {}
for dev_id, dev_spec in netconfig.iteritems():
- dump_file = os.path.join(logging_dir, "%s.pcap" % dev_id)
- files.append(dump_file)
+ df_handle = NamedTemporaryFile(delete=False)
+ dump_file = df_handle.name
+ df_handle.close()
+
+ files[dev_id] = dump_file
pcap = PacketCapture()
pcap.set_interface(dev_spec["name"])
@@ -134,6 +136,7 @@ class NetTestSlaveXMLRPC:
self._packet_captures[dev_id] = pcap
+ self._capture_files = files
return files
def stop_packet_capture(self):
@@ -144,6 +147,11 @@ class NetTestSlaveXMLRPC:
return True
+ def _remove_capture_files(self):
+ for name in self._capture_files.itervalues():
+ logging.debug("Removing temporary packet capture file %s", name)
+ os.unlink(name)
+
def run_command(self, command):
try:
cmd_cls = NetTestCommand(self._command_context, command,
Show replies by date