Skip to content

Commit

Permalink
Implement automatic cleanup of old sessions (disabled by default in e…
Browse files Browse the repository at this point in the history
…nvironment.yml)
  • Loading branch information
Philipp v. K committed Mar 9, 2022
1 parent 374c657 commit d4064c9
Show file tree
Hide file tree
Showing 9 changed files with 52 additions and 7 deletions.
22 changes: 15 additions & 7 deletions mlonmcu/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,10 @@ def __init__(self, name: str = None, path: str = None, lock: bool = False):
self.lock = lock
self.lockfile = filelock.FileLock(os.path.join(self.environment.home, ".lock"))
self.sessions = load_recent_sessions(self.environment)
if self.environment.defaults.cleanup_auto:
logger.debug("Cleaning up old sessions automaticaly")
self.cleanup_sessions(keep=self.environment.defaults.cleanup_keep, interactive=False)
self.sessions = load_recent_sessions(self.environment)
self.session_idx = self.sessions[-1].idx if len(self.sessions) > 0 else -1
logger.debug(f"Restored {len(self.sessions)} recent sessions")
self.cache = TaskCache()
Expand Down Expand Up @@ -361,15 +365,17 @@ def cleanup_sessions(self, keep=10, interactive=True):
"""Utility to cleanup old sessions from the disk."""
assert self.is_clean
all_sessions = self.sessions
# print("all_sessions", all_sessions)
to_keep = all_sessions[-keep:] if keep > 0 else []
to_remove = self.sessions[:-keep] if keep > 0 else self.sessions
count = len(to_remove)
if count > 0:
temp_dir = self.environment.lookup_path("temp").path
sessions_dir = temp_dir / "sessions"
print(f"The following {count} sessions will be removed from the environments temp directory ({temp_dir}):")
print(" ".join([str(session.idx) for session in to_remove]))
if interactive:
print(
f"The following {count} sessions will be removed from the environments temp directory ({temp_dir}):"
)
print(" ".join([str(session.idx) for session in to_remove]))

if ask_user("Are your sure?", default=not interactive, interactive=interactive):
for session in to_remove:
Expand All @@ -380,11 +386,14 @@ def cleanup_sessions(self, keep=10, interactive=True):
shutil.rmtree(session_dir)
self.sessions = to_keep
self.session_idx = self.sessions[-1].idx if len(self.sessions) > 0 else -1
print("Done")
if interactive:
print("Done")
else:
print("Aborted")
if interactive:
print("Aborted")
else:
print("No sessions selected for removal")
if interactive:
print("No sessions selected for removal")
# We currently do not support rewirting the indices to start from scratch again as this would lead to inconsitencies with the path in the report/cmake build dirtectory

def get_sessions_runs_idx(self):
Expand All @@ -410,7 +419,6 @@ def print_sessions(sessions_runs, with_runs=False, with_labels=True):
sessions_runs = self.get_sessions_runs_idx()
print_sessions(sessions_runs, with_runs=runs, with_labels=labels)


def export(self, dest, session_ids=None, run_ids=None, interactive=True):
dest = Path(dest)
if (dest.is_file() and dest.exists()) or (dest.is_dir() and utils.is_populated(dest)):
Expand Down
4 changes: 4 additions & 0 deletions mlonmcu/environment/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,13 +86,17 @@ def __init__(
default_framework=None,
default_backends={},
default_target=None,
cleanup_auto=False,
cleanup_keep=100,
):
self.log_level = log_level
self.log_to_file = log_to_file
self.log_rotate = log_rotate
self.default_framework = default_framework
self.default_backends = default_backends
self.default_target = default_target
self.cleanup_auto = cleanup_auto
self.cleanup_keep = cleanup_keep


class PathConfig(BaseConfig):
Expand Down
2 changes: 2 additions & 0 deletions mlonmcu/environment/environment.py
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,8 @@ def __init__(self):
default_framework=None,
default_backends={},
default_target=None,
cleanup_auto=False,
cleanup_keep=100,
)
self.paths = {
"deps": PathConfig("./deps"),
Expand Down
14 changes: 14 additions & 0 deletions mlonmcu/environment/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,18 @@ def load_environment_from_file(filename, base):
log_level = None
log_to_file = False
log_rotate = False
if "cleanup" in loaded:
if "auto" in loaded["cleanup"]:
cleanup_auto = bool(loaded["cleanup"]["auto"])
else:
cleanup_auto = False
if "auto" in loaded["cleanup"]:
cleanup_keep = int(loaded["cleanup"]["keep"])
else:
cleanup_keep = 100
else:
cleanup_auto = False
cleanup_keep = 100
if "paths" in loaded:
paths = {}
for key in loaded["paths"]:
Expand Down Expand Up @@ -198,6 +210,8 @@ def load_environment_from_file(filename, base):
default_framework=default_framework,
default_backends=default_backends,
default_target=default_target,
cleanup_auto=cleanup_auto,
cleanup_keep=cleanup_keep,
)
env = base(
home,
Expand Down
5 changes: 5 additions & 0 deletions mlonmcu/environment/writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ def create_environment_dict(environment):
data["logging"] = {
"level": environment.defaults.log_level.name,
"to_file": environment.defaults.log_to_file,
"rotate": environment.defaults.log_rotate,
}
data["cleanup"] = {
"auto": environment.defaults.cleanup_auto,
"keep": environment.defaults.cleanup_keep,
}
data["paths"] = {
path: str(path_config.path)
Expand Down
3 changes: 3 additions & 0 deletions templates/default.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ logging:
level: DEBUG
to_file: false
rotate: false
cleanup:
auto: false
keep: 50
# Default locations for certain directoriescan be changed here
# Non-absolute paths will always be threated relative to the MLONMCU_HOME
paths:
Expand Down
3 changes: 3 additions & 0 deletions templates/dev.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ logging:
level: DEBUG
to_file: false
rotate: false
cleanup:
auto: false
keep: 50
# Default locations for certain directoriescan be changed here
# Non-absolute paths will always be threated relative to the MLONMCU_HOME
paths:
Expand Down
3 changes: 3 additions & 0 deletions templates/minimal.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ logging:
level: DEBUG
to_file: false
rotate: false
cleanup:
auto: false
keep: 50
# Default locations for certain directoriescan be changed here
# Non-absolute paths will always be threated relative to the MLONMCU_HOME
paths:
Expand Down
3 changes: 3 additions & 0 deletions templates/tumeda.yml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ logging:
level: DEBUG
to_file: false
rotate: false
cleanup:
auto: false
keep: 50
# Default locations for certain directoriescan be changed here
# Non-absolute paths will always be threated relative to the MLONMCU_HOME
paths:
Expand Down

0 comments on commit d4064c9

Please sign in to comment.