Cache bad_files and optional hashfield in sites.json

This commit is contained in:
shortcutme 2016-09-04 17:43:30 +02:00
parent ecb5885dba
commit 1bd6e2f493
3 changed files with 32 additions and 4 deletions

View file

@ -31,6 +31,15 @@ class ContentManager(object):
self.loadContent(add_bad_files=False, delete_removed_files=False)
self.site.settings["size"] = self.getTotalSize()
# Load hashfield cache
if "hashfield" in self.site.settings.get("cache", {}):
self.hashfield.fromstring(self.site.settings["cache"]["hashfield"].decode("base64"))
del self.site.settings["cache"]["hashfield"]
self.has_optional_files = True
elif self.getOptionalSize() > 0:
self.site.storage.updateBadFiles() # No hashfield cache created yet
self.has_optional_files = True
# Load content.json to self.content
# Return: Changed files ["index.html", "data/messages.json"], Deleted files ["old.jpg"]
def loadContent(self, content_inner_path="content.json", add_bad_files=True, delete_removed_files=True, load_includes=True, force=False):

View file

@ -76,10 +76,18 @@ class Site(object):
return "<%s>" % self.__str__()
# Load site settings from data/sites.json
def loadSettings(self):
sites_settings = json.load(open("%s/sites.json" % config.data_dir))
if self.address in sites_settings:
self.settings = sites_settings[self.address]
def loadSettings(self, settings=None):
if not settings:
settings = json.load(open("%s/sites.json" % config.data_dir)).get(self.address)
if settings:
self.settings = settings
if "cache" not in settings:
settings["cache"] = {}
self.bad_files = settings["cache"].get("bad_files", {})
settings["cache"]["bad_files"] = {}
# Reset tries
for inner_path in self.bad_files:
self.bad_files[inner_path] = 1
else:
self.settings = {"own": False, "serving": True, "permissions": [], "added": int(time.time())} # Default

View file

@ -7,6 +7,7 @@ import time
import gevent
from Plugin import PluginManager
from Content import ContentDb
from Config import config
from util import helper
@ -50,9 +51,19 @@ class SiteManager(object):
self.log.error("Save error: No sites found")
s = time.time()
data = {}
# Generate data file
for address, site in self.list().iteritems():
site.settings["size"] = site.content_manager.getTotalSize() # Update site size
data[address] = site.settings
data[address]["cache"] = {}
data[address]["cache"]["bad_files"] = site.bad_files
data[address]["cache"]["hashfield"] = site.content_manager.hashfield.tostring().encode("base64")
helper.atomicWrite("%s/sites.json" % config.data_dir, json.dumps(data, indent=2, sort_keys=True))
# Remove cache from site settings
for address, site in self.list().iteritems():
site.settings["cache"] = {}
self.log.debug("Saved sites in %.2fs" % (time.time() - s))
def saveTimer(self):