* 获取健康的令牌统计信息 * @param {Array} accounts - 账户列表 * @returns {Object} 统计信息
(accounts)
| 211 | |
| 212 | /** |
| 213 | * 获取健康的令牌统计信息 |
| 214 | * @param {Array} accounts - 账户列表 |
| 215 | * @returns {Object} 统计信息 |
| 216 | */ |
| 217 | getTokenHealthStats(accounts) { |
| 218 | const stats = { |
| 219 | total: accounts.length, |
| 220 | valid: 0, |
| 221 | expired: 0, |
| 222 | expiringSoon: 0, |
| 223 | invalid: 0 |
| 224 | } |
| 225 | |
| 226 | accounts.forEach(account => { |
| 227 | if (!account.token) { |
| 228 | stats.invalid++ |
| 229 | return |
| 230 | } |
| 231 | |
| 232 | const decoded = this.validateToken(account.token) |
| 233 | if (!decoded) { |
| 234 | stats.invalid++ |
| 235 | return |
| 236 | } |
| 237 | |
| 238 | const now = Math.floor(Date.now() / 1000) |
| 239 | if (decoded.exp <= now) { |
| 240 | stats.expired++ |
| 241 | } else if (this.isTokenExpiringSoon(account.token, 6)) { |
| 242 | stats.expiringSoon++ |
| 243 | } else { |
| 244 | stats.valid++ |
| 245 | } |
| 246 | }) |
| 247 | |
| 248 | return stats |
no test coverage detected