Compare commits
9
Commits
c4e278d544
...
v0.2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4a8c563b32 | ||
|
|
370a21760c | ||
|
|
f971de6821 | ||
|
|
0f7102a41d | ||
|
|
ec2b78533d | ||
|
|
36e0d87cec | ||
|
|
cd70157aea | ||
|
|
ac614be190 | ||
|
|
880c199ce4 |
+9
-2
@@ -4,8 +4,8 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>TTS 服务监控</title>
|
||||
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
|
||||
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/vue/3.4.21/vue.global.prod.js"></script>
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/axios/1.6.7/axios.min.js"></script>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #0b0f1a;
|
||||
@@ -642,6 +642,13 @@
|
||||
return `${m}m`;
|
||||
};
|
||||
|
||||
const formatBytes = (b) => {
|
||||
if (!b) return "0 B";
|
||||
const k = 1024, sizes = ["B", "KB", "MB", "GB"];
|
||||
const i = Math.floor(Math.log(b) / Math.log(k));
|
||||
return (b / Math.pow(k, i)).toFixed(1) + " " + sizes[i];
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
refresh();
|
||||
setInterval(refresh, 10000);
|
||||
|
||||
@@ -9,6 +9,7 @@ package middleware
|
||||
import (
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/volcano-tts/tts-api/metrics"
|
||||
)
|
||||
@@ -16,6 +17,11 @@ import (
|
||||
// RateLimitWithMetrics 是 middleware.RateLimit 的可埋点版本。
|
||||
func RateLimitWithMetrics(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
// 仅对 /v1/ 下的业务请求限流,/health /metrics /dashboard 等监控路径不限流
|
||||
if !strings.HasPrefix(r.URL.Path, "/v1/") {
|
||||
next.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
clientIP := GetClientIP(r)
|
||||
if !GlobalRateLimiter.Allow(clientIP) {
|
||||
log.Printf("警告: 已超过IP速率限制,拒绝请求 - 客户端IP: %s", clientIP)
|
||||
@@ -29,6 +35,11 @@ func RateLimitWithMetrics(next http.Handler) http.Handler {
|
||||
// ConcurrencyLimitWithMetrics 是 middleware.ConcurrencyLimit 的可埋点版本。
|
||||
func ConcurrencyLimitWithMetrics(next http.Handler) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
// 仅对 /v1/ 下的业务请求统计并发和加锁,监控路径不占用并发槽位
|
||||
if !strings.HasPrefix(r.URL.Path, "/v1/") {
|
||||
next.ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
select {
|
||||
case ConcurrencySem <- struct{}{}:
|
||||
metrics.ConcurrencyActive.Inc(nil)
|
||||
|
||||
Reference in New Issue
Block a user