summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Peres <martin.peres@linux.intel.com>2017-06-13 10:53:48 +0300
committerMartin Peres <martin.peres@linux.intel.com>2017-10-04 17:48:28 +0300
commitaa1f1e063a79a04ad77dafe0228f826d2eda78a5 (patch)
tree2c90897f7a7cf6f688fe0f83e7f48458c4d583ee
parent285d44c71a4ef38f722281326ca60c44b8703cfd (diff)
smartezbench: allow deleting a report
-rw-r--r--python-modules/ezbench/smartezbench.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/python-modules/ezbench/smartezbench.py b/python-modules/ezbench/smartezbench.py
index 198880f..3a9a115 100644
--- a/python-modules/ezbench/smartezbench.py
+++ b/python-modules/ezbench/smartezbench.py
@@ -33,6 +33,7 @@ import multiprocessing
import statistics
import subprocess
import threading
+import shutil
import pprint
import fcntl
import time
@@ -224,6 +225,7 @@ class SmartEzbench:
self.smart_ezbench_lock = self.log_folder + "/smartezbench.lock"
self.smart_ezbench_log = self.log_folder + "/smartezbench.log"
self._report_cached = None
+ self._deleted = False
self.state = dict()
self.state['commits'] = dict()
@@ -254,6 +256,19 @@ class SmartEzbench:
"Created report '{report_name}' in {log_folder}".format(report_name=report_name,
log_folder=self.log_folder))
+ def delete(self):
+ self.__grab_lock()
+
+ if not shutil.rmtree.avoids_symlink_attacks:
+ self.__log(Criticality.WW, "Deleting the report unsafely (symlink attack)")
+ else:
+ self.__log(Criticality.II, "Deleting the report({}) safely".format(self.log_folder))
+ shutil.rmtree(self.log_folder)
+
+ self._deleted = True
+
+ self.__release_lock()
+
def __log(self, error, msg):
time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_msg = "{time}: ({error}) {msg}\n".format(time=time, error=error.name, msg=msg)
@@ -950,7 +965,7 @@ class SmartEzbench:
return False
# Start generating runner calls
- while len(self._task_list) > 0:
+ while len(self._task_list) > 0 and not self._deleted:
running_mode = self.running_mode(check_running = False)
if running_mode != RunningMode.RUN:
self.__log(Criticality.II,
@@ -978,6 +993,10 @@ class SmartEzbench:
# Start the task
self._task_current.started()
for r in range(0, e.rounds):
+ # Early exit if the report has been deleted
+ if self._deleted:
+ break
+
self.__call_hook__('start_running_test', { "task": self._task_current })
self._task_lock.release()