예제 #1
0
 def update_service_probea(self, tenant, service, data):
     code, msg = self.__check_probe_data(data)
     if code != 200:
         return code, msg, None
     probe = probe_repo.get_probe_by_mode(service.service_id, data["mode"])
     if not probe:
         return 404, u"应用未设置探针,无法进行修改操作", None
     is_used = data.get("is_used", None)
     if is_used is None:
         is_used = probe.is_used
     else:
         is_used = 1 if is_used else 0
     prob_data = {
         "service_id":
         service.service_id,
         "scheme":
         data.get("scheme", probe.scheme),
         "path":
         data.get("path", probe.path),
         "port":
         data.get("port", probe.port),
         "cmd":
         data.get("cmd", probe.cmd),
         "http_header":
         data.get("http_header", probe.http_header),
         "initial_delay_second":
         data.get("initial_delay_second", probe.initial_delay_second),
         "period_second":
         data.get("period_second", probe.period_second),
         "timeout_second":
         data.get("timeout_second", probe.timeout_second),
         "failure_threshold":
         data.get("failure_threshold", probe.failure_threshold),
         "success_threshold":
         data.get("success_threshold", probe.success_threshold),
         "is_used":
         is_used,
         "probe_id":
         probe.probe_id,
         "mode":
         data["mode"]
     }
     console_probe = copy.deepcopy(prob_data)
     prob_data["enterprise_id"] = tenant.enterprise_id
     if service.create_status == "complete":
         res, body = region_api.update_service_probec(
             service.service_region, tenant.tenant_name,
             service.service_alias, prob_data)
         logger.debug("update probe action status {0}".format(res.status))
     console_probe.pop("probe_id")
     console_probe.pop("service_id")
     probe_repo.update_service_probeb(service_id=service.service_id,
                                      probe_id=probe.probe_id,
                                      **console_probe)
     new_probe = probe_repo.get_probe_by_mode(service.service_id,
                                              probe.mode)
     return 200, "success", new_probe
예제 #2
0
    def add_service_probe(self, tenant, service, data):
        code, msg = self.__check_probe_data(data)
        if code != 200:
            return code, msg, None

        probe = probe_repo.get_probe_by_mode(service.service_id, data["mode"])
        if probe:
            return 409, u"已设置过该类型探针", None
        is_used = 1 if data.get("is_used", 1) else 0
        prob_data = {
            "service_id": service.service_id,
            "scheme": data.get("scheme", "tcp"),
            "path": data.get("path", ""),
            "port": data.get("port"),
            "cmd": data.get("cmd", ""),
            "http_header": data.get("http_header", ""),
            "initial_delay_second": data.get("initial_delay_second", 1),
            "period_second": data.get("period_second", 3),
            "timeout_second": data.get("timeout_second", 30),
            "failure_threshold": data.get("failure_threshold", 3),
            "success_threshold": data.get("success_threshold", 1),
            "is_used": is_used,
            "probe_id": make_uuid(),
            "mode": data["mode"],
        }
        # 真·深拷贝
        console_prob = copy.deepcopy(prob_data)
        prob_data["enterprise_id"] = tenant.enterprise_id
        logger.debug("create status: {}".format(service.create_status))
        if service.create_status == "complete":
            res, body = region_api.add_service_probe(service.service_region, tenant.tenant_name, service.service_alias,
                                                     prob_data)
            logger.debug("add probe action status {0}".format(res.status))
        new_probe = probe_repo.add_service_probe(**console_prob)
        return 200, "success", new_probe
예제 #3
0
    def create_probe(self, tenant, service, data):
        code, msg = self.__check_probe_data(data)
        if code != 200:
            raise AbortRequest("invalid probe", msg_show=msg)

        probe = probe_repo.get_probe_by_mode(service.service_id, data["mode"])
        if probe:
            raise AbortRequest("probe exists", msg_show="已设置过该类型探针", status_code=409, error_code=409)
        is_used = 1 if data.get("is_used", 1) else 0
        probe = {
            "service_id": service.service_id,
            "scheme": data.get("scheme", "tcp"),
            "path": data.get("path", ""),
            "port": data.get("port"),
            "cmd": data.get("cmd", ""),
            "http_header": data.get("http_header", ""),
            "initial_delay_second": data.get("initial_delay_second", 4),
            "period_second": data.get("period_second", 3),
            "timeout_second": data.get("timeout_second", 5),
            "failure_threshold": data.get("failure_threshold", 3),
            "success_threshold": data.get("success_threshold", 1),
            "is_used": is_used,
            "probe_id": make_uuid(),
            "mode": data["mode"],
        }
        return ServiceProbe(**probe)
예제 #4
0
    def get_service_probe_by_mode(self, service, mode):
        if not mode:
            m_list = []
            for m in self.PROBE_MODE:
                probe = probe_repo.get_probe_by_mode(service.service_id, m)
                if not probe:
                    m_list.append({m: False})
                else:
                    m_list.append({m: bool(probe.is_used)})

            return 200, u"success", m_list
        if mode not in self.PROBE_MODE:
            return 400, u"参数错误,探针模式只能为readiness或liveness", None
        probe = probe_repo.get_probe_by_mode(service.service_id, mode)
        if not probe:
            return 404, u"探针不存在,您可能并未设置检测探针", None
        return 200, u"success", probe