Beispiel #1
0
 def post(self):
     svc = ApplyLoadBalance(self)
     pro_loadbalance_res = svc.do_loadbalance()
     pro_id = self.args.get("pro_id")
     data = self.get_pro_data(pro_id=pro_id)
     # svc = ApplyLoadBalance(self)
     # loadbalance_res = svc.get_loadbalance()
     # svc = ApplyBackups(self)
     # backups_res = svc.get_backups()
     data.update(pro_loadbalance_res=pro_loadbalance_res)
     logger.info(pro_loadbalance_res)
     if pro_loadbalance_res.return_code == 0:
         self.add_message(u"负载均衡信息添加成功!%s" % STATUS_PRO_TABLES.get(pro_loadbalance_res.data.status).todo_value, level="success")
         tmpl = self.render_to_string("admin/guide/_step_3_balance_detail.html", **data)
         publish_notice_checker.delay(self.current_user.id)
         mail_title = u"%s申请的负载均衡信息添加成功!待受理" % (
             self.current_user.username or self.current_user.email,
         )
         mail_html = self.render_to_string("admin/mail/pro_balance.html", mail_title=mail_title, **data)
         sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
     else:
         tmpl = self.render_to_string("admin/guide/_step_3_balance.html", **data)
         self.add_message(u"负载均衡信息添加失败!(%s)(%s)" % (pro_loadbalance_res.return_code, pro_loadbalance_res.return_message), level="warning")
     messages_tmpl = self.render_to_string("admin/base/base_messages.html")
     return simplejson.dumps(self.success(data={"tmpl": tmpl, "messages_tmpl": messages_tmpl}))
 def do_revoke(self):
     res_id = self.params.get("res_id", 0)
     # user_id = self.params.get("user_id", 0)
     user_id = self.handler.current_user.id
     resource = self.db.query(Pro_Resource_Apply).filter(
         Pro_Resource_Apply.id == res_id).first()
     if not resource:
         return self.failure(ERROR.not_found_err)
     # 状态不为0(即:不是提交状态),不允许撤销
     if resource.status != 0:
         return self.failure(ERROR.res_revoke_err)
     resource.status = STATUS_RESOURCE.REVOKED
     self.db.add(resource)
     self.db.flush()
     mail_html = self.render_to_string(
         "admin/mail/pro_resource_apply_to_admin.html",
         resource_apply=resource,
         STATUS_RESOURCE=STATUS_RESOURCE)
     mail_title = mail_title_format % {
         "user_name": resource.user.email or resource.user.mobile,
         "pro_name": resource.project.name,
         "res_desc": resource.desc,
         "action": u"申请的",
         "todo_action": u"资源,已撤销",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title,
                    mail_html)
     task_post_pro_res_apply_history.delay(status=resource.status,
                                           content=mail_title,
                                           pro_id=resource.project.id,
                                           res_apply_id=resource.id,
                                           user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=resource)
Beispiel #3
0
 def do_return(self, check_res):
     pro_table = self.args.get("pro_table")
     doc = GROUP.get(pro_table).name
     # logger.info(doc)
     if check_res.return_code == 0:
         self.add_message(u"所选申请%s已处理完毕" % doc, level="success")
         pro_users = check_res.data
         users = {str(u.user_id): u for u in pro_users}
         logger.info(users)
         action = self.args.get("action")
         action_value = "%s, %s" % (STATUS_PRO_TABLES.get(action.lower()).value, STATUS_PRO_TABLES.get(action.lower()).todo_value)
         mail_title = u"%s%s" % (doc, action_value)
         mail_content = u"%s已处理完毕, 当前状态:%s。处理结果:%s" % (doc, action_value, self.args.get("reason"))
         for user_id in users.keys():
             publish_notice_user.delay(user_id)
             user_email = users.get(str(user_id)).user.email
             mail_html = self.render_to_string("admin/mail/pro_table_check_result.html",
                 mail_content=mail_content,
                 user_email=user_email,
                 pro_table=pro_table,
                 pro_table_obj = users.get(str(user_id))
             )
             logger.info("[mail to %s]" % [user_email])
             sendMail.delay("*****@*****.**", [user_email], mail_title, mail_html)
             # sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
     if pro_table == "pro_event":
         ids = self.args.get("ids")
         id_list = [int(i) for i in ids.split(",") if i.strip().isdigit()]
         for id in id_list:
             svc = EventService(self, {"id": id, "reply_content": STATUS_PRO_TABLES.checked.value, "status": STATUS_PRO_TABLES.CHECKED})
             svc.do_reply()
     data = self.get_index_page(pro_table)
     tmpl = self.render_to_string("admin/check/event_list_pjax.html", **data)
     return simplejson.dumps(self.success(data=tmpl))
 def do_pay(self):
     logger.info("\t [ DO PAY ]")
     res_id = self.params.get("res_id", 0)
     user_id = self.params.get("user_id", 0)
     user_id = self.handler.current_user.id
     resource_query = self.db.query(Pro_Resource_Apply).filter(Pro_Resource_Apply.id == res_id)
     logger.info("\t [QUERY] : %s" % resource_query)
     resource = resource_query.first()
     if not resource:
         # return self.failure(ERROR.not_found_err)
         return NotFoundError()
     # 状态不为0(即:不是提交状态),不允许撤销
     logger.info("\t [resource.status]: %s" % resource.status)
     logger.info("\t [STATUS_RESOURCE.CHECKED]: %s" % STATUS_RESOURCE.CHECKED)
     logger.info("\t change to [STATUS_RESOURCE.PAYED]: %s" % STATUS_RESOURCE.PAYED)
     if resource.status != STATUS_RESOURCE.CHECKED:
         return self.failure(ERROR.res_pay_err)
     resource.status = STATUS_RESOURCE.PAYED
     self.db.add(resource)
     self.db.flush()
     mail_html = self.render_to_string("admin/mail/pro_resource_apply_to_admin.html", resource_apply=resource, STATUS_RESOURCE=STATUS_RESOURCE)
     mail_title = mail_title_format % {
         "user_name": resource.user.email or resource.user.mobile,
         "pro_name": resource.project.name,
         "res_desc": resource.desc,
         "action": u"申请的",
         "todo_action": u"资源,已完成支付,请确认收款",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
     task_post_pro_res_apply_history.delay(status=resource.status, content=mail_title, pro_id=resource.project.id, res_apply_id=resource.id, user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=resource)
 def do_revoke(self):
     res_id = self.params.get("res_id", 0)
     # user_id = self.params.get("user_id", 0)
     user_id = self.handler.current_user.id
     resource = self.db.query(Pro_Resource_Apply).filter(Pro_Resource_Apply.id == res_id).first()
     if not resource:
         return self.failure(ERROR.not_found_err)
     # 状态不为0(即:不是提交状态),不允许撤销
     if resource.status != 0:
         return self.failure(ERROR.res_revoke_err)
     resource.status = STATUS_RESOURCE.REVOKED
     self.db.add(resource)
     self.db.flush()
     mail_html = self.render_to_string("admin/mail/pro_resource_apply_to_admin.html", resource_apply=resource, STATUS_RESOURCE=STATUS_RESOURCE)
     mail_title = mail_title_format % {
         "user_name": resource.user.email or resource.user.mobile,
         "pro_name": resource.project.name,
         "res_desc": resource.desc,
         "action": u"申请的",
         "todo_action": u"资源,已撤销",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
     task_post_pro_res_apply_history.delay(status=resource.status, content=mail_title, pro_id=resource.project.id, res_apply_id=resource.id, user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=resource)
Beispiel #6
0
    def post(self):
        svc = ProUserService(self)
        pro_user_res = svc.do_pro_user()
        user_id = self.args.get("user_id")
        if user_id:
            message = u"修改"
        else:
            message = u"添加"
        data = {"pro_user_res": pro_user_res}
        if pro_user_res.return_code == 0:
            self.add_message(u"权限用户信息%s成功!" % message, level="success", post_action=True)
            tmpl = self.render_to_string("admin/guide/_step_3_user_detail.html", **data)
            publish_notice_checker.delay(self.current_user.id)
            mail_title = u"%s申请的权限用户信息%s成功!待受理" % (
                self.current_user.username or self.current_user.email,
                message
            )
            mail_html = self.render_to_string("admin/mail/pro_user.html", mail_title=mail_title, **data)
            sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
        else:
            pro_data = self.get_pro_data()
            data.update(pro_data)
            self.add_message(u"权限用户信息%s失败!(%s)(%s)" % (message, pro_user_res.return_code, pro_user_res.return_message), level="warning")
            tmpl = self.render_to_string("admin/guide/_step_3_user.html", **data)

        messages_tmpl = self.render_to_string("admin/base/base_messages.html")
        return simplejson.dumps(self.success(data={"tmpl": tmpl, "messages_tmpl": messages_tmpl}))
 def do_pay(self):
     logger.info("\t [ DO PAY ]")
     res_id = self.params.get("res_id", 0)
     user_id = self.params.get("user_id", 0)
     user_id = self.handler.current_user.id
     resource_query = self.db.query(Pro_Resource_Apply).filter(
         Pro_Resource_Apply.id == res_id)
     logger.info("\t [QUERY] : %s" % resource_query)
     resource = resource_query.first()
     if not resource:
         # return self.failure(ERROR.not_found_err)
         return NotFoundError()
     # 状态不为0(即:不是提交状态),不允许撤销
     logger.info("\t [resource.status]: %s" % resource.status)
     logger.info("\t [STATUS_RESOURCE.CHECKED]: %s" %
                 STATUS_RESOURCE.CHECKED)
     logger.info("\t change to [STATUS_RESOURCE.PAYED]: %s" %
                 STATUS_RESOURCE.PAYED)
     if resource.status != STATUS_RESOURCE.CHECKED:
         return self.failure(ERROR.res_pay_err)
     resource.status = STATUS_RESOURCE.PAYED
     self.db.add(resource)
     self.db.flush()
     mail_html = self.render_to_string(
         "admin/mail/pro_resource_apply_to_admin.html",
         resource_apply=resource,
         STATUS_RESOURCE=STATUS_RESOURCE)
     mail_title = mail_title_format % {
         "user_name": resource.user.email or resource.user.mobile,
         "pro_name": resource.project.name,
         "res_desc": resource.desc,
         "action": u"申请的",
         "todo_action": u"资源,已完成支付,请确认收款",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title,
                    mail_html)
     task_post_pro_res_apply_history.delay(status=resource.status,
                                           content=mail_title,
                                           pro_id=resource.project.id,
                                           res_apply_id=resource.id,
                                           user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=resource)
Beispiel #8
0
 def do_return(self, check_res):
     pro_table = self.args.get("pro_table")
     doc = GROUP.get(pro_table).name
     # logger.info(doc)
     if check_res.return_code == 0:
         self.add_message(u"所选申请%s已处理完毕" % doc, level="success")
         pro_users = check_res.data
         users = {str(u.user_id): u for u in pro_users}
         logger.info(users)
         action = self.args.get("action")
         action_value = "%s, %s" % (STATUS_PRO_TABLES.get(
             action.lower()).value, STATUS_PRO_TABLES.get(
                 action.lower()).todo_value)
         mail_title = u"%s%s" % (doc, action_value)
         mail_content = u"%s已处理完毕, 当前状态:%s。处理结果:%s" % (
             doc, action_value, self.args.get("reason"))
         for user_id in users.keys():
             publish_notice_user.delay(user_id)
             user_email = users.get(str(user_id)).user.email
             mail_html = self.render_to_string(
                 "admin/mail/pro_table_check_result.html",
                 mail_content=mail_content,
                 user_email=user_email,
                 pro_table=pro_table,
                 pro_table_obj=users.get(str(user_id)))
             logger.info("[mail to %s]" % [user_email])
             sendMail.delay("*****@*****.**", [user_email],
                            mail_title, mail_html)
             # sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
     if pro_table == "pro_event":
         ids = self.args.get("ids")
         id_list = [int(i) for i in ids.split(",") if i.strip().isdigit()]
         for id in id_list:
             svc = EventService(
                 self, {
                     "id": id,
                     "reply_content": STATUS_PRO_TABLES.checked.value,
                     "status": STATUS_PRO_TABLES.CHECKED
                 })
             svc.do_reply()
     data = self.get_index_page(pro_table)
     tmpl = self.render_to_string("admin/check/event_list_pjax.html",
                                  **data)
     return simplejson.dumps(self.success(data=tmpl))
Beispiel #9
0
 def post(self):
     svc = ApplyLoadBalance(self)
     pro_loadbalance_res = svc.do_loadbalance()
     pro_id = self.args.get("pro_id")
     data = self.get_pro_data(pro_id=pro_id)
     # svc = ApplyLoadBalance(self)
     # loadbalance_res = svc.get_loadbalance()
     # svc = ApplyBackups(self)
     # backups_res = svc.get_backups()
     data.update(pro_loadbalance_res=pro_loadbalance_res)
     logger.info(pro_loadbalance_res)
     if pro_loadbalance_res.return_code == 0:
         self.add_message(u"负载均衡信息添加成功!%s" % STATUS_PRO_TABLES.get(
             pro_loadbalance_res.data.status).todo_value,
                          level="success")
         tmpl = self.render_to_string(
             "admin/guide/_step_3_balance_detail.html", **data)
         publish_notice_checker.delay(self.current_user.id)
         mail_title = u"%s申请的负载均衡信息添加成功!待受理" % (
             self.current_user.username or self.current_user.email, )
         mail_html = self.render_to_string("admin/mail/pro_balance.html",
                                           mail_title=mail_title,
                                           **data)
         sendMail.delay("*****@*****.**", admin_emails, mail_title,
                        mail_html)
     else:
         tmpl = self.render_to_string("admin/guide/_step_3_balance.html",
                                      **data)
         self.add_message(u"负载均衡信息添加失败!(%s)(%s)" %
                          (pro_loadbalance_res.return_code,
                           pro_loadbalance_res.return_message),
                          level="warning")
     messages_tmpl = self.render_to_string("admin/base/base_messages.html")
     return simplejson.dumps(
         self.success(data={
             "tmpl": tmpl,
             "messages_tmpl": messages_tmpl
         }))
    def do_resource_action(self):
        """
            针对管理员修改资源申请状态
        """
        res_ids = self.params.get("res_ids", "")
        checker_id = self.params.get("checker_id", 0)
        action = self.params.get("action", "")
        reason = self.params.get("reason", "")
        logger.info("\t action: %s, STATUS_RESOURCE.refused.value_en: %s" %
                    (action, STATUS_RESOURCE.refused.value_en))
        logger.info("\t reason: %s" % reason)
        if action == STATUS_RESOURCE.refused.value_en:
            if not reason:
                return self.failure(ERROR.res_reason_empty_err)
        actions = [
            STATUS_RESOURCE.get(i).value_en for i in STATUS_RESOURCE.keys()
            if isinstance(i, int)
        ]
        logger.info("\t [actions] : %s" % actions)
        if action not in actions:
            return self.failure(ERROR.res_do_resource_action_err)
        res_id_list = [int(i) for i in res_ids.split(",") if i.isdigit()]
        email_list = []
        tip_messages = []
        logger.info("<" + "start for" + ">")
        logger.info("< %s >" % res_id_list)

        def _get_message(msg=u"", err=None, level="success"):
            if msg:
                return u"%s" % msg, "%s" % level
            elif err:
                return u"(%s)%s" % (err.errcode, err.errvalue), "%s" % level
            return u""

        for res_id in res_id_list:
            resource = self.db.query(Pro_Resource_Apply).filter(
                Pro_Resource_Apply.id == res_id).first()
            if not resource:
                tip_messages.append(
                    _get_message(err=ERROR.not_found_err, level="warning"))
                continue
            email = resource.user.email

            previous_status = STATUS_RESOURCE.get(action.upper()) - 1
            if action == STATUS_RESOURCE.refused.value_en:
                previous_status = STATUS_RESOURCE.APPLIED
            if action == STATUS_RESOURCE.applied.value_en:
                previous_status = STATUS_RESOURCE.CHECKED
            logger.info("<" + "#" * 60 + ">")
            logger.info(resource.status)
            if resource.status != previous_status:
                if action == STATUS_RESOURCE.checked.value_en:
                    tip_messages.append(
                        _get_message(err=ERROR.res_check_err, level="warning"))
                elif action == STATUS_RESOURCE.refused.value_en:
                    tip_messages.append(
                        _get_message(err=ERROR.res_refuse_err,
                                     level="warning"))
                elif action == STATUS_RESOURCE.confirmpayed.value_en:
                    tip_messages.append(
                        _get_message(err=ERROR.res_confirmpay_err,
                                     level="warning"))
                elif action == STATUS_RESOURCE.started.value_en:
                    tip_messages.append(
                        _get_message(err=ERROR.res_start_err, level="warning"))
                elif action == STATUS_RESOURCE.closed.value_en:
                    tip_messages.append(
                        _get_message(err=ERROR.res_close_err, level="warning"))
                else:
                    tip_messages.append(
                        _get_message(err=ERROR.res_do_resource_action_err,
                                     level="warning"))
                continue
            resource.status = STATUS_RESOURCE.get(action.upper())
            # if action == STATUS_RESOURCE.refused.value_en:
            #     reason = self.params.get("reason", "")
            resource.reason = reason
            resource.checker_id = checker_id
            # logger.info(resource.status)
            # logger.info("<"+"#"*60+">")
            self.db.add(resource)
            self.db.flush()
            mail_html = self.render_to_string(
                "admin/mail/pro_resource_apply.html",
                resource_apply=resource,
                STATUS_RESOURCE=STATUS_RESOURCE)
            mail_title = mail_title_format % {
                "user_name":
                resource.checker.email or resource.checker.mobile,
                "pro_name":
                resource.project.name,
                "res_desc":
                resource.desc,
                "action":
                u"审核的",
                "todo_action":
                u"资源,%s,%s" %
                (STATUS_RESOURCE.get(resource.status).value,
                 STATUS_RESOURCE.get(resource.status).todo_value),
            }
            email_list.append((email, mail_html))
            tip_messages.append(_get_message(msg=mail_title))
            task_post_pro_res_apply_history.delay(status=resource.status,
                                                  content=mail_title,
                                                  pro_id=resource.project.id,
                                                  res_apply_id=resource.id,
                                                  user_id=resource.user_id,
                                                  checker_id=checker_id)
            publish_notice_user.delay(resource.user_id)

        email_dict = {}
        for email, mail_content in email_list:
            if email_dict.get(email):
                email_dict[email].append(mail_content)
            else:
                email_dict[email] = [mail_content]
        logger.info("\t [email_dict]%s" % email_dict)

        for email, mail_content_list in email_dict.items():
            sendMail.delay("*****@*****.**", [email],
                           u"资源%s通知" % STATUS_RESOURCE.get(action).act_value,
                           "\n\n".join(mail_content_list))
        # from scloud.views.admin.ws.pubsub import r
        # r.publish("test_realtime", "notice_user")
        return self.success(data=tip_messages)
 def do_re_apply(self):
     logger.info("---------[do_re_apply]----------")
     param_schema = self.get_param_schema()
     form_valid_res = self.check_form_valid(param_schema)
     if form_valid_res.return_code < 0:
         return form_valid_res
     # form_empty_res = self.check_form_empty()
     # if form_empty_res.return_code < 0:
     #     return form_empty_res
     pro_id = self.params.get("pro_id")
     res_id = self.params.get("res_id")
     # user_id = self.params.get("user_id")
     user_id = self.handler.current_user.id
     if not pro_id:
         return self.failure(ERROR.not_found_err)
     if not res_id:
         return self.failure(ERROR.not_found_err)
     if not user_id:
         return self.failure(ERROR.user_empty_err)
     pro_info = self.db.query(Pro_Info).filter(
         Pro_Info.id == pro_id).first()
     if not pro_info:
         return self.failure(ERROR.not_found_err)
     resource = self.db.query(Pro_Resource_Apply).filter(
         Pro_Resource_Apply.id == res_id).first()
     if not resource:
         return self.failure(ERROR.not_found_err)
     generate_fee_res = self.generate_fee()
     if generate_fee_res.return_code == 0:
         fee_data = generate_fee_res.data
     else:
         fee_data = dict(unit_fee=0, total_fee=0)
         return generate_fee_res
     params = form_valid_res.data
     logger.info("\t form_valid_res data: %s" % params)
     resource.computer = params.get('computer')
     resource.cpu = params.get('cpu')
     resource.memory = params.get('memory')
     resource.disk = params.get('disk')
     resource.disk_amount = params.get('disk_amount')
     # resource.disk_backup = params.get('disk_backup')
     resource.disk_backup_amount = params.get('disk_backup_amount')
     resource.out_ip = params.get('out_ip')
     resource.snapshot = params.get('snapshot')
     resource.loadbalance = params.get('loadbalance')
     resource.internet_ip = params.get('internet_ip')
     resource.bandwidth = params.get('bandwidth')
     # resource.internet_ip_ssl = params.get('internet_ip_ssl')
     resource.start_date = params.get('start_date')
     resource.period = params.get('period')
     resource.unit_fee = fee_data['unit_fee']
     resource.total_fee = fee_data['total_fee']
     resource.fee_desc = u"单月费用 %s(元/月)×有效期 %s(月)=总费用 %s(元)" % (
         fee_data['unit_fee'], params.get('period'), fee_data['total_fee'])
     resource.status = STATUS_RESOURCE.APPLIED
     resource.reason = u''
     self.db.add(resource)
     self.db.flush()
     mail_html = self.render_to_string(
         "admin/mail/pro_resource_apply_to_admin.html",
         resource_apply=resource,
         STATUS_RESOURCE=STATUS_RESOURCE)
     mail_title = mail_title_format % {
         "user_name": resource.user.email or resource.user.mobile,
         "pro_name": resource.project.name,
         "res_desc": resource.desc,
         "action": u"申请的",
         "todo_action": u"资源,已重新提交,请审核",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title,
                    mail_html)
     task_post_pro_res_apply_history.delay(status=resource.status,
                                           content=mail_title,
                                           pro_id=resource.project.id,
                                           res_apply_id=resource.id,
                                           user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=resource)
 def do_apply(self):
     logger.info("---------[do_apply]---------")
     param_schema = self.get_param_schema()
     form_valid_res = self.check_form_valid(param_schema)
     if form_valid_res.return_code < 0:
         return form_valid_res
     # form_empty_res = self.check_form_empty()
     # if form_empty_res.return_code < 0:
     #     return form_empty_res
     pro_id = self.params.get("pro_id")
     # user_id = self.params.get("user_id")
     user_id = self.handler.current_user.id
     logger.info(self.params)
     if not pro_id:
         return self.failure(ERROR.not_found_err)
     if not user_id:
         return self.failure(ERROR.user_empty_err)
     pro_info = self.db.query(Pro_Info).filter(
         Pro_Info.id == pro_id).first()
     generate_fee_res = self.generate_fee()
     if generate_fee_res.return_code == 0:
         fee_data = generate_fee_res.data
     else:
         fee_data = dict(unit_fee=0, total_fee=0)
         return generate_fee_res
     applies = pro_info.pro_resource_applies
     if len(applies) > 0:
         first_apply = applies[0]
         last_apply = applies[-1]
         # 状态为0、1时不能申请新配额
         logger.info("\t [last_apply status] %s" % last_apply.status)
         if last_apply.status >= 0 and last_apply.status < 2:
             return self.failure(ERROR.res_new_apply_err)
     else:
         first_apply = None
         last_apply = None
     params = form_valid_res.data
     apply = Pro_Resource_Apply()
     apply.pro_id = pro_id
     apply.computer = params.get('computer')
     apply.cpu = params.get('cpu')
     apply.memory = params.get('memory')
     apply.disk = params.get('disk')
     apply.disk_amount = params.get('disk_amount')
     # apply.disk_backup = params.get('disk_backup')
     apply.disk_backup_amount = params.get('disk_backup_amount')
     apply.out_ip = params.get('out_ip')
     apply.snapshot = params.get('snapshot')
     apply.loadbalance = params.get('loadbalance')
     apply.internet_ip = params.get('internet_ip')
     apply.bandwidth = params.get('bandwidth')
     # apply.internet_ip_ssl = params.get('internet_ip_ssl')
     apply.start_date = params.get('start_date')
     apply.period = params.get('period')
     apply.unit_fee = fee_data["unit_fee"]
     apply.total_fee = fee_data["total_fee"]
     apply.fee_desc = u"单月费用 %s(元/月)×有效期 %s(月)=总费用 %s(元)" % (
         fee_data['unit_fee'], params.get('period'), fee_data['total_fee'])
     apply.user_id = user_id
     apply.status = STATUS_RESOURCE.APPLIED
     apply.reason = u''
     if first_apply:
         apply.desc = u'资源调整'
     self.db.add(apply)
     self.db.flush()
     mail_html = self.render_to_string(
         "admin/mail/pro_resource_apply_to_admin.html",
         resource_apply=apply,
         STATUS_RESOURCE=STATUS_RESOURCE)
     logger.info("<" + "=" * 60 + ">")
     logger.info(mail_html)
     # user_name = apply.user.email or apply.user.mobile
     mail_title = mail_title_format % {
         "user_name": apply.user.email or apply.user.mobile,
         "pro_name": apply.project.name,
         "res_desc": apply.desc,
         "action": u"申请的",
         "todo_action": u"资源,已提交,请审核",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title,
                    mail_html)
     task_post_pro_res_apply_history.delay(status=apply.status,
                                           content=mail_title,
                                           pro_id=pro_id,
                                           res_apply_id=apply.id,
                                           user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=apply)
    def do_resource_action(self):
        """
            针对管理员修改资源申请状态
        """
        res_ids = self.params.get("res_ids", "")
        checker_id = self.params.get("checker_id", 0)
        action = self.params.get("action", "")
        reason = self.params.get("reason", "")
        logger.info("\t action: %s, STATUS_RESOURCE.refused.value_en: %s" % (action, STATUS_RESOURCE.refused.value_en))
        logger.info("\t reason: %s" % reason)
        if action == STATUS_RESOURCE.refused.value_en:
            if not reason:
                return self.failure(ERROR.res_reason_empty_err)
        actions = [STATUS_RESOURCE.get(i).value_en for i in STATUS_RESOURCE.keys() if isinstance(i, int)]
        logger.info("\t [actions] : %s" % actions)
        if action not in actions:
            return self.failure(ERROR.res_do_resource_action_err)
        res_id_list = [int(i) for i in res_ids.split(",") if i.isdigit()]
        email_list = []
        tip_messages = []
        logger.info("<"+"start for"+">")
        logger.info("< %s >" % res_id_list)
        def _get_message(msg=u"", err=None, level="success"):
            if msg:
                return u"%s" % msg, "%s" % level
            elif err:
                return u"(%s)%s" % (err.errcode, err.errvalue), "%s" % level
            return u""
        for res_id in res_id_list:
            resource = self.db.query(Pro_Resource_Apply).filter(Pro_Resource_Apply.id == res_id).first()
            if not resource:
                tip_messages.append(_get_message(err=ERROR.not_found_err, level="warning"))
                continue
            email = resource.user.email

            previous_status = STATUS_RESOURCE.get(action.upper()) - 1
            if action == STATUS_RESOURCE.refused.value_en:
                previous_status = STATUS_RESOURCE.APPLIED
            if action == STATUS_RESOURCE.applied.value_en:
                previous_status = STATUS_RESOURCE.CHECKED
            logger.info("<" + "#" * 60 + ">")
            logger.info(resource.status)
            if resource.status != previous_status:
                if action == STATUS_RESOURCE.checked.value_en:
                    tip_messages.append(_get_message(err=ERROR.res_check_err, level="warning"))
                elif action == STATUS_RESOURCE.refused.value_en:
                    tip_messages.append(_get_message(err=ERROR.res_refuse_err, level="warning"))
                elif action == STATUS_RESOURCE.confirmpayed.value_en:
                    tip_messages.append(_get_message(err=ERROR.res_confirmpay_err, level="warning"))
                elif action == STATUS_RESOURCE.started.value_en:
                    tip_messages.append(_get_message(err=ERROR.res_start_err, level="warning"))
                elif action == STATUS_RESOURCE.closed.value_en:
                    tip_messages.append(_get_message(err=ERROR.res_close_err, level="warning"))
                else:
                    tip_messages.append(_get_message(err=ERROR.res_do_resource_action_err, level="warning"))
                continue
            resource.status = STATUS_RESOURCE.get(action.upper())
            # if action == STATUS_RESOURCE.refused.value_en:
            #     reason = self.params.get("reason", "")
            resource.reason = reason
            resource.checker_id = checker_id
            # logger.info(resource.status)
            # logger.info("<"+"#"*60+">")
            self.db.add(resource)
            self.db.flush()
            mail_html = self.render_to_string("admin/mail/pro_resource_apply.html", resource_apply=resource, STATUS_RESOURCE=STATUS_RESOURCE)
            mail_title = mail_title_format % {
                "user_name": resource.checker.email or resource.checker.mobile,
                "pro_name": resource.project.name,
                "res_desc": resource.desc,
                "action": u"审核的",
                "todo_action": u"资源,%s,%s" % (STATUS_RESOURCE.get(resource.status).value, STATUS_RESOURCE.get(resource.status).todo_value),
            }
            email_list.append((email, mail_html))
            tip_messages.append(_get_message(msg=mail_title))
            task_post_pro_res_apply_history.delay(status=resource.status, content=mail_title, pro_id=resource.project.id, res_apply_id=resource.id, user_id=resource.user_id, checker_id=checker_id)
            publish_notice_user.delay(resource.user_id)

        email_dict = {}
        for email, mail_content in email_list:
            if email_dict.get(email):
                email_dict[email].append(mail_content)
            else:
                email_dict[email] = [mail_content]
        logger.info("\t [email_dict]%s" % email_dict)

        for email, mail_content_list in email_dict.items():
            sendMail.delay("*****@*****.**", [email], u"资源%s通知" % STATUS_RESOURCE.get(action).act_value, "\n\n".join(mail_content_list))
        # from scloud.views.admin.ws.pubsub import r
        # r.publish("test_realtime", "notice_user")
        return self.success(data=tip_messages)
 def do_re_apply(self):
     logger.info("---------[do_re_apply]----------")
     param_schema = self.get_param_schema()
     form_valid_res = self.check_form_valid(param_schema)
     if form_valid_res.return_code < 0:
         return form_valid_res
     # form_empty_res = self.check_form_empty()
     # if form_empty_res.return_code < 0:
     #     return form_empty_res
     pro_id = self.params.get("pro_id")
     res_id = self.params.get("res_id")
     # user_id = self.params.get("user_id")
     user_id = self.handler.current_user.id
     if not pro_id:
         return self.failure(ERROR.not_found_err)
     if not res_id:
         return self.failure(ERROR.not_found_err)
     if not user_id:
         return self.failure(ERROR.user_empty_err)
     pro_info = self.db.query(
         Pro_Info
     ).filter(
         Pro_Info.id == pro_id
     ).first()
     if not pro_info:
         return self.failure(ERROR.not_found_err)
     resource = self.db.query(
         Pro_Resource_Apply
     ).filter(
         Pro_Resource_Apply.id == res_id
     ).first()
     if not resource:
         return self.failure(ERROR.not_found_err)
     generate_fee_res = self.generate_fee()
     if generate_fee_res.return_code == 0:
         fee_data = generate_fee_res.data
     else:
         fee_data = dict(unit_fee=0, total_fee=0)
         return generate_fee_res
     params = form_valid_res.data
     logger.info("\t form_valid_res data: %s" % params)
     resource.computer = params.get('computer')
     resource.cpu = params.get('cpu')
     resource.memory = params.get('memory')
     resource.disk = params.get('disk')
     resource.disk_amount = params.get('disk_amount')
     # resource.disk_backup = params.get('disk_backup')
     resource.disk_backup_amount = params.get('disk_backup_amount')
     resource.out_ip = params.get('out_ip')
     resource.snapshot = params.get('snapshot')
     resource.loadbalance = params.get('loadbalance')
     resource.internet_ip = params.get('internet_ip')
     resource.bandwidth = params.get('bandwidth')
     # resource.internet_ip_ssl = params.get('internet_ip_ssl')
     resource.start_date = params.get('start_date')
     resource.period = params.get('period')
     resource.unit_fee = fee_data['unit_fee']
     resource.total_fee = fee_data['total_fee']
     resource.fee_desc = u"单月费用 %s(元/月)×有效期 %s(月)=总费用 %s(元)" % (fee_data['unit_fee'], params.get('period'), fee_data['total_fee'])
     resource.status = STATUS_RESOURCE.APPLIED
     resource.reason = u''
     self.db.add(resource)
     self.db.flush()
     mail_html = self.render_to_string("admin/mail/pro_resource_apply_to_admin.html", resource_apply=resource, STATUS_RESOURCE=STATUS_RESOURCE)
     mail_title = mail_title_format % {
         "user_name": resource.user.email or resource.user.mobile,
         "pro_name": resource.project.name,
         "res_desc": resource.desc,
         "action": u"申请的",
         "todo_action": u"资源,已重新提交,请审核",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
     task_post_pro_res_apply_history.delay(status=resource.status, content=mail_title, pro_id=resource.project.id, res_apply_id=resource.id, user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=resource)
 def do_apply(self):
     logger.info("---------[do_apply]---------")
     param_schema = self.get_param_schema()
     form_valid_res = self.check_form_valid(param_schema)
     if form_valid_res.return_code < 0:
         return form_valid_res
     # form_empty_res = self.check_form_empty()
     # if form_empty_res.return_code < 0:
     #     return form_empty_res
     pro_id = self.params.get("pro_id")
     # user_id = self.params.get("user_id")
     user_id = self.handler.current_user.id
     logger.info(self.params)
     if not pro_id:
         return self.failure(ERROR.not_found_err)
     if not user_id:
         return self.failure(ERROR.user_empty_err)
     pro_info = self.db.query(
         Pro_Info
     ).filter(
         Pro_Info.id == pro_id
     ).first()
     generate_fee_res = self.generate_fee()
     if generate_fee_res.return_code == 0:
         fee_data = generate_fee_res.data
     else:
         fee_data = dict(unit_fee=0, total_fee=0)
         return generate_fee_res
     applies = pro_info.pro_resource_applies
     if len(applies) > 0:
         first_apply = applies[0]
         last_apply = applies[-1]
         # 状态为0、1时不能申请新配额
         logger.info("\t [last_apply status] %s" % last_apply.status)
         if last_apply.status >= 0 and last_apply.status < 2:
             return self.failure(ERROR.res_new_apply_err)
     else:
         first_apply = None
         last_apply = None
     params = form_valid_res.data
     apply = Pro_Resource_Apply()
     apply.pro_id = pro_id
     apply.computer = params.get('computer')
     apply.cpu = params.get('cpu')
     apply.memory = params.get('memory')
     apply.disk = params.get('disk')
     apply.disk_amount = params.get('disk_amount')
     # apply.disk_backup = params.get('disk_backup')
     apply.disk_backup_amount = params.get('disk_backup_amount')
     apply.out_ip = params.get('out_ip')
     apply.snapshot = params.get('snapshot')
     apply.loadbalance = params.get('loadbalance')
     apply.internet_ip = params.get('internet_ip')
     apply.bandwidth = params.get('bandwidth')
     # apply.internet_ip_ssl = params.get('internet_ip_ssl')
     apply.start_date = params.get('start_date')
     apply.period = params.get('period')
     apply.unit_fee = fee_data["unit_fee"]
     apply.total_fee = fee_data["total_fee"]
     apply.fee_desc = u"单月费用 %s(元/月)×有效期 %s(月)=总费用 %s(元)" % (fee_data['unit_fee'], params.get('period'), fee_data['total_fee'])
     apply.user_id = user_id
     apply.status = STATUS_RESOURCE.APPLIED
     apply.reason = u''
     if first_apply:
         apply.desc = u'资源调整'
     self.db.add(apply)
     self.db.flush()
     mail_html = self.render_to_string("admin/mail/pro_resource_apply_to_admin.html", resource_apply=apply, STATUS_RESOURCE=STATUS_RESOURCE)
     logger.info("<" + "=" * 60 + ">")
     logger.info(mail_html)
     # user_name = apply.user.email or apply.user.mobile
     mail_title = mail_title_format % {
         "user_name": apply.user.email or apply.user.mobile,
         "pro_name": apply.project.name,
         "res_desc": apply.desc,
         "action": u"申请的",
         "todo_action": u"资源,已提交,请审核",
     }
     sendMail.delay("*****@*****.**", admin_emails, mail_title, mail_html)
     task_post_pro_res_apply_history.delay(status=apply.status, content=mail_title, pro_id=pro_id, res_apply_id=apply.id, user_id=user_id)
     # from scloud.views.admin.ws.pubsub import r
     # r.publish("test_realtime", "notice_checker")
     return self.success(data=apply)