Spaces:
Running
Running
<html> | |
<head> | |
<title>账号状态监控</title> | |
<meta charset="UTF-8"> | |
<style> | |
body { | |
font-family: Arial, sans-serif; | |
margin: 20px; | |
background-color: #f5f5f5; | |
} | |
.header { | |
text-align: center; | |
margin-bottom: 20px; | |
} | |
.summary { | |
text-align: center; | |
margin-bottom: 30px; | |
font-size: 1.2em; | |
} | |
.grid { | |
display: grid; | |
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); | |
gap: 20px; | |
padding: 20px; | |
} | |
.account-card { | |
background: white; | |
border-radius: 8px; | |
padding: 15px; | |
box-shadow: 0 2px 4px rgba(0,0,0,0.1); | |
} | |
.account-card h3 { | |
margin-top: 0; | |
color: #333; | |
} | |
.status-available { | |
color: green; | |
} | |
.status-unavailable { | |
color: red; | |
} | |
.metric { | |
margin: 8px 0; | |
} | |
.refresh-time { | |
text-align: center; | |
margin-top: 20px; | |
color: #666; | |
} | |
</style> | |
</head> | |
<body> | |
<div class="header"> | |
<h1>账号状态监控</h1> | |
</div> | |
<div class="summary"> | |
<div>共 <span id="online-count">{{ valid_accounts }}/{{ total_accounts }}</span> 个账号在线</div> | |
<div>请求总数: <span id="total-requests">{{ total_requests }}</span></div> | |
</div> | |
<div class="grid"> | |
{% for account in accounts %} | |
<div class="account-card"> | |
<h3>账号{{ loop.index }}: {{ account.email|replace(account.email[1:-4], '*'*3) }}</h3> | |
<div class="metric">总请求数: {{ account.total_requests }}</div> | |
<div class="metric">成功请求数: {{ account.success_requests }}</div> | |
<div class="metric">失败请求数: {{ account.failed_requests }}</div> | |
<div class="metric">成功率: {{ "%.2f"|format(account.success_rate) }}%</div> | |
<div class="metric">最后使用时间: {{ account.last_used_time }}</div> | |
<div class="metric">状态: | |
<span class="status-{{ 'available' if account.is_valid else 'unavailable' }}"> | |
{{ "可用" if account.is_valid else "不可用" }} | |
</span> | |
</div> | |
</div> | |
{% endfor %} | |
</div> | |
<div class="refresh-time"> | |
最后更新时间: <span id="last-update">{{ last_update }}</span> | |
</div> | |
<script> | |
function refreshData() { | |
fetch(window.location.href) | |
.then(response => response.json()) | |
.then(data => { | |
document.getElementById('online-count').textContent = | |
`${data.valid_accounts}/${data.total_accounts}`; | |
document.getElementById('total-requests').textContent = data.total_requests; | |
document.getElementById('last-update').textContent = data.last_update; | |
// 更新账号卡片 | |
const grid = document.querySelector('.grid'); | |
grid.innerHTML = data.accounts.map((account, index) => ` | |
<div class="account-card"> | |
<h3>账号${index + 1}: ${account.email.replace(/(?<=.).(?=.*@)/g, '*')}</h3> | |
<div class="metric">总请求数: ${account.total_requests}</div> | |
<div class="metric">成功请求数: ${account.success_requests}</div> | |
<div class="metric">失败请求数: ${account.failed_requests}</div> | |
<div class="metric">成功率: ${account.success_rate.toFixed(2)}%</div> | |
<div class="metric">最后使用时间: ${account.last_used_time}</div> | |
<div class="metric">状态: | |
<span class="status-${account.is_valid ? 'available' : 'unavailable'}"> | |
${account.is_valid ? '可用' : '不可用'} | |
</span> | |
</div> | |
</div> | |
`).join(''); | |
}); | |
} | |
setInterval(refreshData, 60000); // 每分钟刷新一次 | |
</script> | |
</body> | |
</html> |