Fail 添加失败的源站
(origin *serverconfigs.OriginConfig, tlsHost string, reverseProxy *serverconfigs.ReverseProxyConfig, callback func())
| 128 | |
| 129 | // Fail 添加失败的源站 |
| 130 | func (this *OriginStateManager) Fail(origin *serverconfigs.OriginConfig, tlsHost string, reverseProxy *serverconfigs.ReverseProxyConfig, callback func()) { |
| 131 | if origin == nil || origin.Id <= 0 { |
| 132 | return |
| 133 | } |
| 134 | |
| 135 | this.locker.Lock() |
| 136 | state, ok := this.stateMap[origin.Id] |
| 137 | var timestamp = time.Now().Unix() |
| 138 | if ok { |
| 139 | if state.UpdatedAt < timestamp-300 { // N 分钟之后重新计数 |
| 140 | state.CountFails = 0 |
| 141 | state.Config.IsOk = true |
| 142 | } |
| 143 | |
| 144 | state.TLSHost = tlsHost |
| 145 | state.CountFails++ |
| 146 | state.Config = origin |
| 147 | state.ReverseProxy = reverseProxy |
| 148 | state.UpdatedAt = timestamp |
| 149 | |
| 150 | if origin.IsOk { |
| 151 | origin.IsOk = state.CountFails < 5 // 超过 N 次之后认为是异常 |
| 152 | |
| 153 | if !origin.IsOk { |
| 154 | if callback != nil { |
| 155 | callback() |
| 156 | } |
| 157 | } |
| 158 | } |
| 159 | } else { |
| 160 | // 同时最多监控 N 个源站地址 |
| 161 | if len(this.stateMap) < maxOriginStates { |
| 162 | this.stateMap[origin.Id] = &OriginState{ |
| 163 | CountFails: 1, |
| 164 | Config: origin, |
| 165 | TLSHost: tlsHost, |
| 166 | ReverseProxy: reverseProxy, |
| 167 | UpdatedAt: timestamp, |
| 168 | } |
| 169 | } |
| 170 | |
| 171 | origin.IsOk = true |
| 172 | } |
| 173 | this.locker.Unlock() |
| 174 | } |
| 175 | |
| 176 | // Success 添加成功的源站 |
| 177 | func (this *OriginStateManager) Success(origin *serverconfigs.OriginConfig, callback func()) { |