Vue.component("health-check-config-box", { props: ["v-health-check-config", "v-check-domain-url"], data: function () { let healthCheckConfig = this.vHealthCheckConfig let urlProtocol = "http" let urlPort = "" let urlRequestURI = "/" let urlHost = "" if (healthCheckConfig == null) { healthCheckConfig = { isOn: false, url: "", interval: {count: 60, unit: "second"}, statusCodes: [200], timeout: {count: 10, unit: "second"}, countTries: 3, tryDelay: {count: 100, unit: "ms"}, autoDown: true, countUp: 1, countDown: 3, userAgent: "", onlyBasicRequest: true, accessLogIsOn: true } let that = this setTimeout(function () { that.changeURL() }, 500) } else { try { let url = new URL(healthCheckConfig.url) urlProtocol = url.protocol.substring(0, url.protocol.length - 1) // 域名 urlHost = url.host if (urlHost == "%24%7Bhost%7D") { urlHost = "${host}" } let colonIndex = urlHost.indexOf(":") if (colonIndex > 0) { urlHost = urlHost.substring(0, colonIndex) } urlPort = url.port urlRequestURI = url.pathname if (url.search.length > 0) { urlRequestURI += url.search } } catch (e) { } if (healthCheckConfig.statusCodes == null) { healthCheckConfig.statusCodes = [200] } if (healthCheckConfig.interval == null) { healthCheckConfig.interval = {count: 60, unit: "second"} } if (healthCheckConfig.timeout == null) { healthCheckConfig.timeout = {count: 10, unit: "second"} } if (healthCheckConfig.tryDelay == null) { healthCheckConfig.tryDelay = {count: 100, unit: "ms"} } if (healthCheckConfig.countUp == null || healthCheckConfig.countUp < 1) { healthCheckConfig.countUp = 1 } if (healthCheckConfig.countDown == null || healthCheckConfig.countDown < 1) { healthCheckConfig.countDown = 3 } } return { healthCheck: healthCheckConfig, advancedVisible: false, urlProtocol: urlProtocol, urlHost: urlHost, urlPort: urlPort, urlRequestURI: urlRequestURI, urlIsEditing: healthCheckConfig.url.length == 0, hostErr: "" } }, watch: { urlRequestURI: function () { if (this.urlRequestURI.length > 0 && this.urlRequestURI[0] != "/") { this.urlRequestURI = "/" + this.urlRequestURI } this.changeURL() }, urlPort: function (v) { let port = parseInt(v) if (!isNaN(port)) { this.urlPort = port.toString() } else { this.urlPort = "" } this.changeURL() }, urlProtocol: function () { this.changeURL() }, urlHost: function () { this.changeURL() this.hostErr = "" }, "healthCheck.countTries": function (v) { let count = parseInt(v) if (!isNaN(count)) { this.healthCheck.countTries = count } else { this.healthCheck.countTries = 0 } }, "healthCheck.countUp": function (v) { let count = parseInt(v) if (!isNaN(count)) { this.healthCheck.countUp = count } else { this.healthCheck.countUp = 0 } }, "healthCheck.countDown": function (v) { let count = parseInt(v) if (!isNaN(count)) { this.healthCheck.countDown = count } else { this.healthCheck.countDown = 0 } } }, methods: { showAdvanced: function () { this.advancedVisible = !this.advancedVisible }, changeURL: function () { let urlHost = this.urlHost if (urlHost.length == 0) { urlHost = "${host}" } this.healthCheck.url = this.urlProtocol + "://" + urlHost + ((this.urlPort.length > 0) ? ":" + this.urlPort : "") + this.urlRequestURI }, changeStatus: function (values) { this.healthCheck.statusCodes = values.$map(function (k, v) { let status = parseInt(v) if (isNaN(status)) { return 0 } else { return status } }) }, onChangeURLHost: function () { let checkDomainURL = this.vCheckDomainUrl if (checkDomainURL == null || checkDomainURL.length == 0) { return } let that = this Tea.action(checkDomainURL) .params({host: this.urlHost}) .success(function (resp) { if (!resp.data.isOk) { that.hostErr = "在当前集群中找不到此域名,可能会影响健康检查结果。" } else { that.hostErr = "" } }) .post() }, editURL: function () { this.urlIsEditing = !this.urlIsEditing } }, template: `
| 启用健康检查 |
通过访问节点上的网站URL来确定节点是否健康。 |
||||||||
| 检测URL * |
拼接后的检测URL: |
||||||||
| 检测时间间隔 |
两次检查之间的间隔。 |
||||||||
| 自动下线 |
选中后系统会根据健康检查的结果自动标记节点的上线/下线状态,并可能自动同步DNS设置。 |
||||||||
| 连续上线次数 |
连续{{healthCheck.countUp}}次检查成功后自动恢复上线。 |
||||||||
| 连续下线次数 |
连续{{healthCheck.countDown}}次检查失败后自动下线。 |
||||||||
| 允许的状态码 |
允许检测URL返回的状态码列表。 |
||||||||
| 超时时间 |
读取检测URL超时时间。 |
||||||||
| 连续尝试次数 |
如果读取检测URL失败后需要再次尝试的次数。 |
||||||||
| 每次尝试间隔 |
如果读取检测URL失败后再次尝试时的间隔时间。 |
||||||||
| 终端信息(User-Agent) |
发送到服务器的User-Agent值,不填写表示使用默认值。 |
||||||||
| 只基础请求 |
只做基础的请求,不处理反向代理(不检查源站)、WAF等。 |
||||||||
| 记录访问日志 |
记录健康检查的访问日志。 |
||||||||