def mkdir_p(dir_path): """ :param dir_path: :raise "Something wrong": """ try: os.makedirs(dir_path) app_log.info("Dir created {}".format(dir_path)) except OSError as exc: if exc.errno == errno.EEXIST and os.path.isdir(dir_path): pass else: app_log.error('Dir path have OSError: {}'.format(dir_path))
def get_post(self, post_id, topic_id): post = self.cache.posts.get(post_id, None) self.cache.post_last_usage[post_id] = now() if post: raise tornado.gen.Return(post) else: app_log.info("Not in cache post: {}".format(post_id)) key = build_key(topic_id, post_id) exist = yield Task(self.redis.exists, key) if exist: post = yield Task(self.redis.hgetall, key) app_log.debug("Key exist") raise tornado.gen.Return(post) else: raise tornado.gen.Return(None)
def get_topic(self, topic_id): topic = self.cache.topics.get(topic_id, False) self.cache.topic_last_usage[topic_id] = now() if topic: result = yield [self.get_post(x, topic_id) for x in set(topic)] raise tornado.gen.Return(result) else: app_log.info("Not in cache topic: {}".format(topic_id)) key = build_topcic_key(topic_id) exist = yield Task(self.redis.exists, key) if exist: result = [] for x in set(topic): x = yield self.get_post(int(x)) result.append(x) raise tornado.gen.Return(result) else: raise HTTPError(404)
def save_to_redis(self): global delta app_log.info('Start cleanup') old = now() - delta for topic_id, date in self.cache.topic_last_usage.iteritems(): if date < old: for post_id in self.cache.topics[topic_id]: post = self.cache.posts[post_id] key = build_key(topic_id, post_id) yield Task(self.redis.hmset, key, post) app_log.debug("Remove post {}".format( self.cache.posts[post_id])) del self.cache.posts[post_id] yield Task(self.redis.sadd, build_topcic_key(topic_id), *self.cache.topics[topic_id]) app_log.debug("Remove topic {}".format( self.cache.topics[topic_id])) del self.cache.topics[topic_id] global last_cleanup last_cleanup = now() raise gen.Return(None)
def main(): port = 8888 app = make_app() app.listen(port) app_log.info('Application started on port {}'.format(port)) IOLoop.current().start()
def __init__(self, *args, **kwargs): super(ThreadHandler, self).__init__(*args, **kwargs) if last_cleanup < (now() - delta): # self.save_to_redis() app_log.info('Not wait clean up')