class EchoWebSocket(MySocketHandler): users = dict() def check_origin(self, origin): return True def open(self): logger.info("WebSocket opened") # current_user = self.current_user # from code import interact # interact(local=locals()) # EchoWebSocket.users.update({current_user.id: self}) @classmethod def send_message(cls, chat): waiter = cls.users.get(str(chat["user_id"])) if waiter: waiter.write_message(simplejson.dumps(chat)) @classmethod def send_all(cls, chat): for waiter in cls.users.values(): waiter.write_message(simplejson.dumps(chat)) def on_message(self, message): logger.error("====[status onmessage]====") self.svc = DataBaseService() self.svc.__enter__() logger.error("\t WebSocket message: %s" % message) json_message = simplejson.loads(message) if json_message["action"] == "init_status": # svc = ProResourceApplyService(self, {"res_id": json_message["res_id"]}) # resource_res = svc.get_resource() # user_id = resource_res.data.user_id user_id = json_message["user_id"] svc = PtUserService(self, {"user_id": user_id}) pt_user_res = svc.get_info() if pt_user_res.return_code == 0: current_perms = pt_user_res.data.get_current_perms() if "pro_resource_apply.view" in current_perms: imchecker = False else: imchecker = True svc = ActHistoryService(self, {"user_id": user_id}) tasks_res = svc.get_res_tasks() data = { "tasks_res": tasks_res, "imchecker": imchecker, "STATUS_RESOURCE": STATUS_RESOURCE } chat = { "user_id": user_id, "task_html": self.render_to_string("admin/notice/tasks.html", **data) } chat.update(json_message) logger.error(chat) self.write_message(chat) # self.on_finish() # chat.update(json_message) # EchoWebSocket.send_message(chat) # self.write_message(u"You said: " + message) elif json_message["action"] == "offline": EchoWebSocket.users.pop(str(json_message["user_id"])) else: self.write_message(u"You said: " + message) self.svc.db.commit() self.svc.db.close() logger.error("====[status finish]====") def on_close(self): logger.info("WebSocket closed")
class Handler(BaseHandler, HandlersMixin): __metaclass__ = HandlerMeta def __str__(self): return self.__doc__ or self.__class__.__name__ def initialize(self, **kwargs): super(Handler, self).initialize(**kwargs) self.svc = DataBaseService() self.svc.__enter__() self.db = self.svc.db logger.warning("<" + "=" * 25 + " [initialize] " + "=" * 25 + ">") self.handler_return_url() def init_messages(self): if "messages" not in self.session: self.session["messages"] = [] self.messages = self.session.get("messages", []) self.save_session() def add_message(self, content, level="info", post_action=False, url=""): if post_action: self.post_action(content=content, level=level) self.session["messages"].append({"level": level, "content": content, "url": url}) self.session["messages_request"] = len(self.session["messages"]) self.save_session() # logger.info(self.session) def post_action(self, content="", level="info"): current_user = self.session.get("current_user") if current_user: user_id = current_user.id else: user_id = 0 task_post_action.delay(act_type=1, content=content, user_id=user_id) def get_messages(self): self.messages = self.session["messages"] logger.info(self.messages) self.session["messages"] = [] self.save_session() return self.messages def on_finish(self): # logger.info("\t" + "====[EXIT]====") # self.svc.__exit__(None, None, None) # try: # # transaction = session_dict.get("transaction") # # logger.error("transaction: %s" % transaction) # #if transaction: # # dispatch = session_dict.get("dispatch") # self.db.commit() # # self.db.flush() # logger.info("\t" + "====[COMMIT]====") # except Exception: # logThrown() # self.db.rollback() # logger.info("\t" + "====[ROLLBACK]====") # self.db.remove() self.db.close() logger.info("\t" + "====[CLOSE]====") # logger.info(self.db.is_active) # logger.info("====================== [http method (%s)] ======================" % self.request.method) # self.db.is_active # self.db.remove() # self.db.close() # logger.info(self.db) # logger.info(self.db.is_active) logger.critical("<" + "="*25 + " [finish] " + "="*25 + ">") def prepare(self): logger.warning("<" + "="*25 + " [prepare] " + "="*25 + ">") # self.svc._db_init() # self.svc.db.begin_nested() # self.svc.db.begin() # self.db = self.svc.db logger.info("\t" + "====================== [http method] ======================") logger.info("\t" + self.request.method) logger.info("\t" + "====================== [args] ======================") logger.info("\t %s" % self.args) self.init_messages() self.pjax = self.request.headers.get("X-PJAX") headers = self.request.headers x_requested_with = headers.get("X-Requested-With", "") self.ajax = x_requested_with == "XMLHttpRequest" if self.pjax: self.ajax = False def success(self, data): return self.failure(data=data) def failure(self, return_code=0, return_message="", data=None): result = ObjectDict() result.return_code = return_code result.return_message = return_message result.data = data return result def render_to_string(self, template, **kwargs): logger.info("\t [messages]:%s" % self.session["messages"]) if self.pjax: title = self.__doc__ or self.__class__.__name__ title = title.encode("utf-8") self.set_header("title", urllib.quote(title)) self.set_header("active", self.kwargs.get("active", "")) template = "%s_pjax.html" % template.split(".html")[0] tmpl = env.get_template(template) s = "&".join( ["%s=%s" % (k, v) for k, v in self.args.items() \ if k not in ["page", "_pjax", "_xsrf"]] ) logger.info(s) kwargs.update({ "CONF": CONF, "getattr": getattr, "dir": dir, "rand_time": time.time(), "handler": self, "request": self.request, "reverse_url": self.application.reverse_url, "ERR": ERR, "env_colors": env_colors, "STATUS_RESOURCE": STATUS_RESOURCE, "RESOURCE_BANDWIDTH": RESOURCE_BANDWIDTH, "STATUS_PRO_TABLES": STATUS_PRO_TABLES, "STATUS_PRIORITY": STATUS_PRIORITY, "STATUS_YESNO": STATUS_YESNO, "PRO_USER_TYPES": PRO_USER_TYPES, "PLOT_LOADBALANCE": PLOT_LOADBALANCE, "LOADBALANCE_HEALTH": LOADBALANCE_HEALTH, "GROUP": GROUP, "OP": OP, "s": s + "&" if s else "" }) # logger.info("\t [render_to_string kwargs]: %s" % kwargs) template_string = tmpl.render(**kwargs) return template_string def render(self, template, **kwargs): template_string = self.render_to_string(template, **kwargs) self.write(template_string.strip()) def getPage(self, objects, numsPerpage=8, total_count=0, page_name='page'): try: page_num = int(self.args.get(page_name, '1')) except ValueError: page_num = 1 logger.info("[page_name]: %s" % page_name) logger.info("[page_name %s]: [page_num]: %s" % (page_name, self.args.get(page_name, '1'))) logger.info("[page_num]: %s" % page_num) try: _total_count = total_count or objects.count() except Exception as e: _total_count = total_count or len(objects) paginator = Paginator(objects, numsPerpage, total_count=_total_count) try: page = paginator.page(page_num) except InvalidPage: raise HTTPError(404) if not page: raise HTTPError(404) return page # # @gen.coroutine def get_error_html(self, status_code, **kwargs): return ""
class EchoWebSocket(MySocketHandler): users = dict() def check_origin(self, origin): return True def open(self): logger.info("WebSocket opened") # current_user = self.current_user # from code import interact # interact(local=locals()) # EchoWebSocket.users.update({current_user.id: self}) @classmethod def send_message(cls, chat): waiter = cls.users.get(str(chat["user_id"])) if waiter: waiter.write_message(simplejson.dumps(chat)) @classmethod def send_all(cls, chat): for waiter in cls.users.values(): waiter.write_message(simplejson.dumps(chat)) def on_message(self, message): logger.error("====[index onmessage]====") self.svc = DataBaseService() self.svc.__enter__() logger.error("\t WebSocket message: %s" % message) json_message = simplejson.loads(message) if json_message["action"] == "pro_resource_apply": self.do_notice_user(json_message) elif json_message["action"] == "notice_checker": self.do_notice_checker(json_message) elif json_message["action"] == "join": self.do_online(json_message) elif json_message["action"] == "offline": EchoWebSocket.users.pop(str(json_message["user_id"])) else: self.write_message(u"You said: " + message) self.svc.db.commit() self.svc.db.close() logger.error("====[index finish]====") def on_close(self): logger.info("WebSocket closed") def do_online(self, json_message): user_id = json_message["user_id"] svc = PtUserService(self, {"user_id": user_id}) pt_user_res = svc.get_info() pt_user = pt_user_res.data logger.info("pt_user: %s"% pt_user) data = { "level": "info", "content": u"%s已经上线!" % (pt_user.username or pt_user.email or pt_user.mobile), } try: html = self.render_to_string("admin/notice/online.html", **data) except Exception as e: logThrown() html = "" chat = { "user_id": pt_user.id, "html": html } chat.update(json_message) EchoWebSocket.users.update({user_id: self}) EchoWebSocket.send_all(chat) logger.info("**users: %s" % EchoWebSocket.users) # self.on_finish() def do_notice_user(self, json_message): svc = ProResourceApplyService(self, {"res_id": json_message["res_id"]}) resource_res = svc.get_resource() user_id = resource_res.data.user_id svc = ActHistoryService(self, {"user_id": user_id}) tasks_res = svc.get_res_tasks() logger.info(resource_res.data.user_id) logger.info(resource_res.data.checker_id) data = { "tasks_res": tasks_res, "imchecker": False, "STATUS_RESOURCE": STATUS_RESOURCE } chat = { "user_id": user_id, "data": resource_res.data.as_dict(), "html": self.render_to_string("admin/notice/tasks.html", **data) } logger.error(chat) chat.update(json_message) EchoWebSocket.send_message(chat) # self.on_finish() # self.write_message(u"You said: " + message) def do_notice_checker(self, json_message): logger.info("-----------------------------NOTICE CHECKER-----------------------------") svc = PtUserService(self) pt_users_res = svc.get_list() user_ids = [u.id for u in pt_users_res.data if "pro_resource_apply.check" in u.get_current_perms()] for user_id in user_ids: svc = ActHistoryService(self, {"user_id": user_id}) tasks_res = svc.get_res_tasks() data = { "tasks_res": tasks_res, "imchecker": True, "STATUS_RESOURCE": STATUS_RESOURCE } chat = { "user_id": user_id, "html": self.render_to_string("admin/notice/tasks.html", **data) } chat.update(json_message) logger.error(chat) EchoWebSocket.send_message(chat)
class EchoWebSocket(MySocketHandler): users = dict() def check_origin(self, origin): return True def open(self): logger.info("WebSocket opened") # current_user = self.current_user # from code import interact # interact(local=locals()) # EchoWebSocket.users.update({current_user.id: self}) @classmethod def send_message(cls, chat): waiter = cls.users.get(str(chat["user_id"])) if waiter: waiter.write_message(simplejson.dumps(chat)) @classmethod def send_all(cls, chat): for waiter in cls.users.values(): waiter.write_message(simplejson.dumps(chat)) def on_message(self, message): logger.error("====[index onmessage]====") self.svc = DataBaseService() self.svc.__enter__() logger.error("\t WebSocket message: %s" % message) json_message = simplejson.loads(message) if json_message["action"] == "pro_resource_apply": self.do_notice_user(json_message) elif json_message["action"] == "notice_checker": self.do_notice_checker(json_message) elif json_message["action"] == "join": self.do_online(json_message) elif json_message["action"] == "offline": EchoWebSocket.users.pop(str(json_message["user_id"])) else: self.write_message(u"You said: " + message) self.svc.db.commit() self.svc.db.close() logger.error("====[index finish]====") def on_close(self): logger.info("WebSocket closed") def do_online(self, json_message): user_id = json_message["user_id"] svc = PtUserService(self, {"user_id": user_id}) pt_user_res = svc.get_info() pt_user = pt_user_res.data logger.info("pt_user: %s" % pt_user) data = { "level": "info", "content": u"%s已经上线!" % (pt_user.username or pt_user.email or pt_user.mobile), } try: html = self.render_to_string("admin/notice/online.html", **data) except Exception as e: logThrown() html = "" chat = {"user_id": pt_user.id, "html": html} chat.update(json_message) EchoWebSocket.users.update({user_id: self}) EchoWebSocket.send_all(chat) logger.info("**users: %s" % EchoWebSocket.users) # self.on_finish() def do_notice_user(self, json_message): svc = ProResourceApplyService(self, {"res_id": json_message["res_id"]}) resource_res = svc.get_resource() user_id = resource_res.data.user_id svc = ActHistoryService(self, {"user_id": user_id}) tasks_res = svc.get_res_tasks() logger.info(resource_res.data.user_id) logger.info(resource_res.data.checker_id) data = { "tasks_res": tasks_res, "imchecker": False, "STATUS_RESOURCE": STATUS_RESOURCE } chat = { "user_id": user_id, "data": resource_res.data.as_dict(), "html": self.render_to_string("admin/notice/tasks.html", **data) } logger.error(chat) chat.update(json_message) EchoWebSocket.send_message(chat) # self.on_finish() # self.write_message(u"You said: " + message) def do_notice_checker(self, json_message): logger.info( "-----------------------------NOTICE CHECKER-----------------------------" ) svc = PtUserService(self) pt_users_res = svc.get_list() user_ids = [ u.id for u in pt_users_res.data if "pro_resource_apply.check" in u.get_current_perms() ] for user_id in user_ids: svc = ActHistoryService(self, {"user_id": user_id}) tasks_res = svc.get_res_tasks() data = { "tasks_res": tasks_res, "imchecker": True, "STATUS_RESOURCE": STATUS_RESOURCE } chat = { "user_id": user_id, "html": self.render_to_string("admin/notice/tasks.html", **data) } chat.update(json_message) logger.error(chat) EchoWebSocket.send_message(chat)
class Handler(BaseHandler, HandlersMixin): __metaclass__ = HandlerMeta def __str__(self): return self.__doc__ or self.__class__.__name__ def initialize(self, **kwargs): super(Handler, self).initialize(**kwargs) self.svc = DataBaseService() self.svc.__enter__() self.db = self.svc.db logger.warning("<" + "=" * 25 + " [initialize] " + "=" * 25 + ">") self.handler_return_url() def init_messages(self): if "messages" not in self.session: self.session["messages"] = [] self.messages = self.session.get("messages", []) self.save_session() def add_message(self, content, level="info", post_action=False, url=""): if post_action: self.post_action(content=content, level=level) self.session["messages"].append({ "level": level, "content": content, "url": url }) self.session["messages_request"] = len(self.session["messages"]) self.save_session() # logger.info(self.session) def post_action(self, content="", level="info"): current_user = self.session.get("current_user") if current_user: user_id = current_user.id else: user_id = 0 task_post_action.delay(act_type=1, content=content, user_id=user_id) def get_messages(self): self.messages = self.session["messages"] logger.info(self.messages) self.session["messages"] = [] self.save_session() return self.messages def on_finish(self): # logger.info("\t" + "====[EXIT]====") # self.svc.__exit__(None, None, None) # try: # # transaction = session_dict.get("transaction") # # logger.error("transaction: %s" % transaction) # #if transaction: # # dispatch = session_dict.get("dispatch") # self.db.commit() # # self.db.flush() # logger.info("\t" + "====[COMMIT]====") # except Exception: # logThrown() # self.db.rollback() # logger.info("\t" + "====[ROLLBACK]====") # self.db.remove() self.db.close() logger.info("\t" + "====[CLOSE]====") # logger.info(self.db.is_active) # logger.info("====================== [http method (%s)] ======================" % self.request.method) # self.db.is_active # self.db.remove() # self.db.close() # logger.info(self.db) # logger.info(self.db.is_active) logger.critical("<" + "=" * 25 + " [finish] " + "=" * 25 + ">") def prepare(self): logger.warning("<" + "=" * 25 + " [prepare] " + "=" * 25 + ">") # self.svc._db_init() # self.svc.db.begin_nested() # self.svc.db.begin() # self.db = self.svc.db logger.info( "\t" + "====================== [http method] ======================") logger.info("\t" + self.request.method) logger.info("\t" + "====================== [args] ======================") logger.info("\t %s" % self.args) self.init_messages() self.pjax = self.request.headers.get("X-PJAX") headers = self.request.headers x_requested_with = headers.get("X-Requested-With", "") self.ajax = x_requested_with == "XMLHttpRequest" if self.pjax: self.ajax = False def success(self, data): return self.failure(data=data) def failure(self, return_code=0, return_message="", data=None): result = ObjectDict() result.return_code = return_code result.return_message = return_message result.data = data return result def render_to_string(self, template, **kwargs): logger.info("\t [messages]:%s" % self.session["messages"]) if self.pjax: title = self.__doc__ or self.__class__.__name__ title = title.encode("utf-8") self.set_header("title", urllib.quote(title)) self.set_header("active", self.kwargs.get("active", "")) template = "%s_pjax.html" % template.split(".html")[0] tmpl = env.get_template(template) s = "&".join( ["%s=%s" % (k, v) for k, v in self.args.items() \ if k not in ["page", "_pjax", "_xsrf"]] ) logger.info(s) kwargs.update({ "CONF": CONF, "getattr": getattr, "dir": dir, "rand_time": time.time(), "handler": self, "request": self.request, "reverse_url": self.application.reverse_url, "ERR": ERR, "env_colors": env_colors, "STATUS_RESOURCE": STATUS_RESOURCE, "RESOURCE_BANDWIDTH": RESOURCE_BANDWIDTH, "STATUS_PRO_TABLES": STATUS_PRO_TABLES, "STATUS_PRIORITY": STATUS_PRIORITY, "STATUS_YESNO": STATUS_YESNO, "PRO_USER_TYPES": PRO_USER_TYPES, "PLOT_LOADBALANCE": PLOT_LOADBALANCE, "LOADBALANCE_HEALTH": LOADBALANCE_HEALTH, "GROUP": GROUP, "OP": OP, "s": s + "&" if s else "" }) # logger.info("\t [render_to_string kwargs]: %s" % kwargs) template_string = tmpl.render(**kwargs) return template_string def render(self, template, **kwargs): template_string = self.render_to_string(template, **kwargs) self.write(template_string.strip()) def getPage(self, objects, numsPerpage=8, total_count=0, page_name='page'): try: page_num = int(self.args.get(page_name, '1')) except ValueError: page_num = 1 logger.info("[page_name]: %s" % page_name) logger.info("[page_name %s]: [page_num]: %s" % (page_name, self.args.get(page_name, '1'))) logger.info("[page_num]: %s" % page_num) try: _total_count = total_count or objects.count() except Exception as e: _total_count = total_count or len(objects) paginator = Paginator(objects, numsPerpage, total_count=_total_count) try: page = paginator.page(page_num) except InvalidPage: raise HTTPError(404) if not page: raise HTTPError(404) return page # # @gen.coroutine def get_error_html(self, status_code, **kwargs): return ""