Commit b1d3757c authored by Kevin Deldycke's avatar Kevin Deldycke

First Klaus' patch to make zope start nicer

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@11927 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 47eea1f9
...@@ -53,15 +53,16 @@ class TimerService(SimpleItem): ...@@ -53,15 +53,16 @@ class TimerService(SimpleItem):
for path in self._subscribers] for path in self._subscribers]
tick = time.time() tick = time.time()
prev_tick = tick - interval # prev_tick = tick - interval
next_tick = tick + interval # next_tick = tick + interval
LOG('TimerService', INFO, 'Ttimer tick at %s\n'%time.ctime(tick)) # LOG('TimerService', INFO, 'Ttimer tick at %s\n'%time.ctime(tick))
for subscriber in subscriptions: for subscriber in subscriptions:
try: try:
subscriber.process_timer( # subscriber.process_timer(
interval, DateTime(tick), DateTime(prev_tick), DateTime(next_tick)) # interval, DateTime(tick), DateTime(prev_tick), DateTime(next_tick))
subscriber.process_timer(tick, interval)
except: except:
LOG('TimerService', ERROR, 'Process timer error', error = sys.exc_info()) LOG('TimerService', ERROR, 'Process timer error', error = sys.exc_info())
...@@ -77,6 +78,12 @@ class TimerService(SimpleItem): ...@@ -77,6 +78,12 @@ class TimerService(SimpleItem):
subscribers.append(path) subscribers.append(path)
self._subscribers = subscribers self._subscribers = subscribers
def unsubscribeByPath(self, path):
subscribers = self._subscribers
if path in subscribers:
subscribers.remove(path)
self._subscribers = subscribers
def unsubscribe(self, ob): def unsubscribe(self, ob):
""" """ """ """
path = '/'.join(ob.getPhysicalPath()) path = '/'.join(ob.getPhysicalPath())
...@@ -94,12 +101,14 @@ class TimerService(SimpleItem): ...@@ -94,12 +101,14 @@ class TimerService(SimpleItem):
def manage_removeSubscriptions(self, no, REQUEST=None): def manage_removeSubscriptions(self, no, REQUEST=None):
""" """ """ """
subs = self.listAllSubscriptions() subs = self.lisSubscriptions()
#LOG('asdd',INFO,subs)
remove_list = [subs[n] for n in [int(n) for n in no]] remove_list = [subs[n] for n in [int(n) for n in no]]
for subs, event, fl in remove_list: for sub in remove_list:
self.unsubscribe( subs, event_type=event ) self.unsubscribeByPath(sub)
if REQUEST is not None: if REQUEST is not None:
REQUEST.RESPONSE.redirect('manage_viewSubscriptions') REQUEST.RESPONSE.redirect('manage_viewSubscriptions')
......
...@@ -6,7 +6,10 @@ __version__ = 'TimerServer for Zope 0.1' ...@@ -6,7 +6,10 @@ __version__ = 'TimerServer for Zope 0.1'
import traceback import traceback
import thread import thread
import sys, os, errno, time
import sys, os, errno, time, socket
import ZPublisher.Client
from StringIO import StringIO from StringIO import StringIO
from zLOG import LOG, INFO from zLOG import LOG, INFO
...@@ -14,9 +17,10 @@ from ZServer.PubCore import handle ...@@ -14,9 +17,10 @@ from ZServer.PubCore import handle
from ZPublisher.BaseRequest import BaseRequest from ZPublisher.BaseRequest import BaseRequest
from ZPublisher.BaseResponse import BaseResponse from ZPublisher.BaseResponse import BaseResponse
from ZPublisher.HTTPRequest import HTTPRequest from ZPublisher.HTTPRequest import HTTPRequest
from ZPublisher import Client
class TimerServer: class TimerServer:
def __init__(self, module, interval=600): def __init__(self, module, interval=5):
self.module = module self.module = module
self.interval = interval self.interval = interval
...@@ -35,6 +39,34 @@ class TimerServer: ...@@ -35,6 +39,34 @@ class TimerServer:
'\tInterval: %s seconds.\n'%(time.ctime(time.time()), interval)) '\tInterval: %s seconds.\n'%(time.ctime(time.time()), interval))
def run(self): def run(self):
# wait until the zhttp_server exist in socket_map
# because TimerService has to be started after the Zope HTTPServer
from asyncore import socket_map
while 1:
time.sleep(5)
for k, v in socket_map.items():
if hasattr(v, 'port'):
# see Zope/lib/python/App/ApplicationManager.py: def getServers(self)
type = str(getattr(v, '__class__', 'unknown'))
if type == 'ZServer.HTTPServer.zhttp_server':
port = v.port
break
if port:
break
ip = socket.gethostbyname(socket.gethostname())
# To be very sure, try to connect to the HTTPServer
# and only start after we are able to connect
while 1:
time.sleep(5)
try:
Client.call('http://%s:%s' %(ip, port))
except ValueError:
continue
break
module = self.module module = self.module
interval = self.interval interval = self.interval
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment