import os
import sys
import pickle
+import inspect
+import shutil
+import time
+from monitor import config
+
noserial=False
try:
from util.PHPSerialize import *
#print >>sys.stderr, "PHPSerial db type not allowed."
noserial=True
-import inspect
-import shutil
-import config
-import config as monitorconfig
-
DEBUG= 0
PICKLE_PATH=config.MONITOR_DATA_ROOT
+def lastModified(name, type=None):
+ # TODO: fix for 'debug' mode also.
+ t = SPickle().mtime("production.%s" % name, type)
+ return t
+
+def escapeName(name):
+ """
+ automatically escape names passed to the db to make sensible-filenames without
+ exposing this to users.
+ """
+ return name.replace("/", "_")
+
+def cachedRecently(name, length=int(config.cachetime), type=None):
+ """
+ return true or false based on whether the modified time of the cached
+ file is within 'length' minutes.
+ """
+ name = name.replace("/", "_")
+ if hasattr(config, 'cachecalls') and not config.cachecalls:
+ # don't use cached calls if cachecalls is false
+ return False
+
+ try:
+ t = lastModified(name, type)
+ except:
+ # file doesn't exist or we can't access it.
+ return False
+
+ current_time = time.time()
+ if current_time > t + length*60:
+ return False
+ else:
+ return True
def dbLoad(name, type=None):
+ name = escapeName(name)
return SPickle().load(name, type)
def dbExists(name, type=None):
- #if self.config.debug:
- # name = "debug.%s" % name
+ name = escapeName(name)
return SPickle().exists(name, type)
def dbDump(name, obj=None, type=None):
+ name = escapeName(name)
# depth of the dump is 2 now, since we're redirecting to '.dump'
return SPickle().dump(name, obj, type, 2)
raise Exception("No PHPSerializer module available")
return "%s/%s.phpserial" % (self.path, name)
+
+ def mtime(self, name, type=None):
+ f = os.stat(self.__file(name, type))
+ return f[-2]
def exists(self, name, type=None):
return os.path.exists(self.__file(name, type))
Otherwise, it's normal mode, if the file doesn't exist, raise error
Load the file
"""
- print "loading %s" % name
+ #print "loading %s" % name
if config.debug:
if self.exists("debug.%s" % name, type):