class TickerThread(object): SECONDS_IN_24_HOURS = 86400 TICKS_BETWEEN_FOOTPRINTS = 10 def __init__(self, logger): self.logger = logger self.trackers = dict() self.interval = settings['perf_ticker_interval'] self.mark_24_hours = time.time() self.mark_footprint = time.time() self.footprint = FootprintCalculator() self.timer = RepeatTimer(self.interval, self._run_tick_thread, daemonic=True) def add_tracker(self, tracker): self.trackers[tracker.name] = tracker def get_tracker(self, name): return self.trackers[name] def start(self): self.timer.start() def cancel(self): self.timer.cancel() def is_alive(self): return self.timer.is_alive() def _print_footprint(self): if time.time( ) - self.mark_footprint > self.TICKS_BETWEEN_FOOTPRINTS * self.interval: self.logger.info(self.footprint.get_snapshot()) self.mark_footprint = time.time() def _run_tick_thread(self): self._print_footprint() current_time = time.time() do_24h_reset = current_time - self.mark_24_hours > self.SECONDS_IN_24_HOURS if do_24h_reset: self.mark_24_hours = current_time tracker_outputs = [] for tracker_name, tracker in self.trackers.items(): tracker_outputs.append(tracker.to_string(self.interval)) tracker.reset_tick() if do_24h_reset: tracker.reset_24h() self.logger.info('\n'.join(tracker_outputs))
class WorkerPerformanceTicker(object): SECONDS_IN_24_HOURS = 86400 TICKS_BETWEEN_FOOTPRINTS = 10 def __init__(self, logger): self.logger = logger self.posts_per_24_hours = 0 self.posts_per_tick = 0 self.interval = settings['perf_ticker_interval'] self.mark_24_hours = time.time() self.mark_footprint = time.time() self.footprint = FootprintCalculator() def start(self): self.timer = RepeatTimer(self.interval, self._run_tick_thread) self.timer.start() def cancel(self): self.timer.cancel() def _print_footprint(self): if time.time() - self.mark_footprint > self.TICKS_BETWEEN_FOOTPRINTS * self.interval: self.logger.info(self.footprint.get_snapshot()) self.mark_footprint = time.time() def _run_tick_thread(self): self._print_footprint() self.logger.info('Processed: %d in last %d seconds; %d in last 24 hours;' \ % (self.posts_per_tick, self.interval, self.posts_per_24_hours)) self.posts_per_tick = 0 if time.time() - self.mark_24_hours > self.SECONDS_IN_24_HOURS: self.mark_24_hours = time.time() self.posts_per_24_hours = 0 def increment(self): self.posts_per_tick += 1 self.posts_per_24_hours += 1