コード例 #1
0
ファイル: status.py プロジェクト: cash2one/cloud-check
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")
コード例 #2
0
ファイル: handlers.py プロジェクト: finalbattle/cloud-check
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 ""
コード例 #3
0
ファイル: index.py プロジェクト: finalbattle/cloud-check
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)
コード例 #4
0
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)
コード例 #5
0
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 ""