class RealtimePerformanceContainer(object): def __init__(self): super(RealtimePerformanceContainer,self).__init__() self.instance_performance = dict() self.location_performance = dict() self.event_signaler = EventSignaler('realtime_performance') def onTweet(self, tweet): assert isinstance(tweet, Tweet) instancePerformance = self.instance_performance.setdefault(tweet.instance_key, {'success' : RealtimePerformance(), 'geocode_fail' : RealtimePerformance()}) if tweet.has_user and tweet.user.is_geocoded: for location in tweet.user.location_geocode.all_geocode_results: locationPerformance = self.location_performance.setdefault(tweet.instance_key, dict()).setdefault(location, {'success': RealtimePerformance()}) locationPerformance['success'].onTweet(tweet) instancePerformance['success'].onTweet(tweet) else: instancePerformance['geocode_fail'].onTweet(tweet) def signalUpdate(self): self.event_signaler.signalEvent({'instance_tweets' : self.instance_performance, 'location_tweets' : self.location_performance})
class DataSignaler(object): def __init__(self, name, pruneFunc, data): super(DataSignaler, self).__init__() assert isinstance(data,TreeFunctioned) self.data = data self.event_signaler = EventSignaler(key=name) if pruneFunc is not None: assert callable(pruneFunc) self.prune_func = pruneFunc self._lock = RLock() def add(self, value): self._lock.acquire() try: self.data.addToTreeByFunction(value) finally: self._lock.release() data = {self.event_signaler.key : {'data': self.data}} self.event_signaler.signalEvent(data) def prune(self): if self.prune_func is not None: return criticalSection(self._lock, lambda: self.prune_func(dataStructure=self.data)) def inByFunction(self, value, hashFuncList=None, depth=0): return criticalSection(self._lock, lambda: self.data.inByFunction(value, hashFuncList, depth)) def getOriginalByFunction(self, value, hashFuncList=None, depth=0): return criticalSection(self._lock, lambda: self.data.getOriginalByFunction(value, hashFuncList, depth))
class DataSignalerStateless(object): def __init__(self, name): super(DataSignalerStateless,self).__init__() self.event_signaler = EventSignaler(key=name) def add(self, value): self.event_signaler.signalEvent({self.event_signaler.key : {'data' : value}})
class DataSignalerStateless(object): def __init__(self, name): super(DataSignalerStateless, self).__init__() self.event_signaler = EventSignaler(key=name) def add(self, value): self.event_signaler.signalEvent( {self.event_signaler.key: { 'data': value }})
class DataSignaler(object): def __init__(self, name, pruneFunc, data): super(DataSignaler, self).__init__() assert isinstance(data, TreeFunctioned) self.data = data self.event_signaler = EventSignaler(key=name) if pruneFunc is not None: assert callable(pruneFunc) self.prune_func = pruneFunc self._lock = RLock() def add(self, value): self._lock.acquire() try: self.data.addToTreeByFunction(value) finally: self._lock.release() data = {self.event_signaler.key: {'data': self.data}} self.event_signaler.signalEvent(data) def prune(self): if self.prune_func is not None: return criticalSection( self._lock, lambda: self.prune_func(dataStructure=self.data)) def inByFunction(self, value, hashFuncList=None, depth=0): return criticalSection( self._lock, lambda: self.data.inByFunction(value, hashFuncList, depth)) def getOriginalByFunction(self, value, hashFuncList=None, depth=0): return criticalSection( self._lock, lambda: self.data.getOriginalByFunction( value, hashFuncList, depth))
class RealtimePerformanceContainer(object): def __init__(self): super(RealtimePerformanceContainer, self).__init__() self.instance_performance = dict() self.location_performance = dict() self.event_signaler = EventSignaler('realtime_performance') def onTweet(self, tweet): assert isinstance(tweet, Tweet) instancePerformance = self.instance_performance.setdefault( tweet.instance_key, { 'success': RealtimePerformance(), 'geocode_fail': RealtimePerformance() }) if tweet.has_user and tweet.user.is_geocoded: for location in tweet.user.location_geocode.all_geocode_results: locationPerformance = self.location_performance.setdefault( tweet.instance_key, dict()).setdefault(location, {'success': RealtimePerformance()}) locationPerformance['success'].onTweet(tweet) instancePerformance['success'].onTweet(tweet) else: instancePerformance['geocode_fail'].onTweet(tweet) def signalUpdate(self): self.event_signaler.signalEvent({ 'instance_tweets': self.instance_performance, 'location_tweets': self.location_performance })