Source code for opennode.oms.zodb.packer
import time
from twisted.internet import defer
from zope.component import provideSubscriptionAdapter
from zope.interface import implements
from opennode.oms.config import get_config
from opennode.oms.model.model.proc import IProcess, Proc, DaemonProcess
from opennode.oms.util import subscription_factory, async_sleep
from opennode.oms.zodb import db
[docs]class PackDaemonProcess(DaemonProcess):
implements(IProcess)
__name__ = "db_pack"
def __init__(self):
super(PackDaemonProcess, self).__init__()
config = get_config()
self.interval = config.getint('db', 'pack_interval')
@defer.inlineCallbacks
[docs] def run(self):
while True:
try:
if not self.paused:
yield self.pack()
except Exception:
import traceback
traceback.print_exc()
pass
yield async_sleep(self.interval)
@db.ro_transact
[docs] def pack(self):
storage_type = get_config().get('db', 'storage_type')
if storage_type == 'zeo':
print "[db_pack] zeo pack not implemented yet, please setup cron to run bin/zeopack -u db/socket"
elif storage_type == 'embedded':
d = db.get_db()
d.pack(time.time())
provideSubscriptionAdapter(subscription_factory(PackDaemonProcess), adapts=(Proc,))