Added cache cleaning

This commit is contained in:
Mark Qvist 2022-07-02 13:12:54 +02:00
parent 4a725de935
commit 532f9ee665
2 changed files with 84 additions and 1 deletions

View File

@ -40,7 +40,7 @@ import threading
import atexit
import struct
import array
import os.path
import time
import os
import RNS
@ -126,6 +126,8 @@ class Reticulum:
MDU = MTU - HEADER_MAXSIZE - IFAC_MIN_SIZE
CACHE_TIME = 24*60*60
router = None
config = None
@ -143,6 +145,12 @@ class Reticulum:
# classes, saving necessary information to disk and carrying
# out cleanup operations.
if RNS.Transport.owner.share_instance:
if RNS.Transport.owner.is_shared_instance:
RNS.Transport.owner.__clean_caches()
else:
RNS.Transport.owner.__clean_caches()
RNS.Transport.exit_handler()
RNS.Identity.exit_handler()
@ -261,6 +269,8 @@ class Reticulum:
self.is_shared_instance = True
RNS.log("Started shared instance interface: "+str(interface), RNS.LOG_DEBUG)
self.__clean_caches()
except Exception as e:
try:
interface = LocalInterface.LocalClientInterface(
@ -285,6 +295,7 @@ class Reticulum:
self.is_shared_instance = False
self.is_standalone_instance = True
self.is_connected_to_shared_instance = False
self.__clean_caches()
def __apply_config(self):
if "logging" in self.config:
@ -862,6 +873,36 @@ class Reticulum:
def __clean_caches(self):
RNS.log("Cleaning resource and packet caches...", RNS.LOG_DEBUG)
now = time.time()
# Clean resource caches
for filename in os.listdir(self.resourcepath):
try:
if len(filename) == (RNS.Identity.HASHLENGTH//8)*2:
filepath = self.resourcepath + "/" + filename
mtime = os.path.getmtime(filepath)
age = now - mtime
if age > Reticulum.CACHE_TIME:
os.unlink(filepath)
except Exception as e:
RNS.log("Error while cleaning resources cache, the contained exception was: "+str(e), RNS.LOG_ERROR)
# Clean packet caches
for filename in os.listdir(self.cachepath):
try:
if len(filename) == (RNS.Identity.HASHLENGTH//8)*2:
filepath = self.cachepath + "/" + filename
mtime = os.path.getmtime(filepath)
age = now - mtime
if age > Reticulum.CACHE_TIME:
os.unlink(filepath)
except Exception as e:
RNS.log("Error while cleaning resources cache, the contained exception was: "+str(e), RNS.LOG_ERROR)
def __create_default_config(self):
self.config = ConfigObj(__default_rns_config__)
self.config.filename = Reticulum.configpath

View File

@ -172,6 +172,48 @@ def prettysize(num, suffix='B'):
return "%.2f%s%s" % (num, last_unit, suffix)
def prettytime(time, verbose=False):
days = int(time // (24 * 3600))
time = time % (24 * 3600)
hours = int(time // 3600)
time %= 3600
minutes = int(time // 60)
time %= 60
seconds = round(time, 2)
ss = "" if seconds == 1 else "s"
sm = "" if minutes == 1 else "s"
sh = "" if hours == 1 else "s"
sd = "" if days == 1 else "s"
components = []
if days > 0:
components.append(str(days)+" day"+sd if verbose else str(days)+"d")
if hours > 0:
components.append(str(hours)+" hour"+sh if verbose else str(hours)+"h")
if minutes > 0:
components.append(str(minutes)+" minute"+sm if verbose else str(minutes)+"m")
if seconds > 0:
components.append(str(seconds)+" second"+ss if verbose else str(seconds)+"s")
i = 0
tstr = ""
for c in components:
i += 1
if i == 1:
pass
elif i < len(components):
tstr += ", "
elif i == len(components):
tstr += " and "
tstr += c
return tstr
def phyparams():
print("Required Physical Layer MTU : "+str(Reticulum.MTU)+" bytes")
print("Plaintext Packet MDU : "+str(Packet.PLAIN_MDU)+" bytes")