diff options
| author | Kyren223 <Kyren223@proton.me> | 2025-07-12 14:27:12 +0300 |
|---|---|---|
| committer | Kyren223 <Kyren223@proton.me> | 2025-07-19 18:32:12 +0300 |
| commit | c52d5693e91f7a8975d6f5f0de06a86d1360ef59 (patch) | |
| tree | 28611e89c0e7c3aad9157e062ef30b7044302c05 /internal | |
| parent | dc6c10155c33033b386665e7882b91be9837f55a (diff) | |
Added server metrics (need to actually add metrics later)
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/client/config/config.go | 2 | ||||
| -rw-r--r-- | internal/server/metrics/metrics.go | 18 | ||||
| -rw-r--r-- | internal/server/server.go | 2 | ||||
| -rw-r--r-- | internal/webserver/webserver.go | 42 |
4 files changed, 57 insertions, 7 deletions
diff --git a/internal/client/config/config.go b/internal/client/config/config.go index 2de0ea4..ec5808b 100644 --- a/internal/client/config/config.go +++ b/internal/client/config/config.go @@ -60,7 +60,7 @@ func VerifyAndFixConfig(config *Config) error { var ( config = Config{} - ConfigDir string + ConfigDir string ConfigFile string ) diff --git a/internal/server/metrics/metrics.go b/internal/server/metrics/metrics.go new file mode 100644 index 0000000..9c80665 --- /dev/null +++ b/internal/server/metrics/metrics.go @@ -0,0 +1,18 @@ +package metrics + +import ( + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" +) + +var ( + reg = prometheus.DefaultRegisterer + + namespace = "eko" + + RequestsProcessed = promauto.With(reg).NewCounter(prometheus.CounterOpts{ + Namespace: namespace, + Name: "processed_requests_total", + Help: "The total number of processed requests", + }) +) diff --git a/internal/server/server.go b/internal/server/server.go index 1f6d27c..0ca3200 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -25,6 +25,7 @@ import ( "github.com/kyren223/eko/internal/packet" "github.com/kyren223/eko/internal/server/api" "github.com/kyren223/eko/internal/server/ctxkeys" + "github.com/kyren223/eko/internal/server/metrics" "github.com/kyren223/eko/internal/server/session" "github.com/kyren223/eko/pkg/assert" "github.com/kyren223/eko/pkg/snowflake" @@ -292,6 +293,7 @@ func (server *server) handleConnection(conn net.Conn) { for request := range framer.Out { processPacket(localCtx, sess, request) + metrics.RequestsProcessed.Inc() } slog.InfoContext(ctx, "processor done") }() diff --git a/internal/webserver/webserver.go b/internal/webserver/webserver.go index ac58de4..77d2e22 100644 --- a/internal/webserver/webserver.go +++ b/internal/webserver/webserver.go @@ -11,21 +11,46 @@ import ( "github.com/gomarkdown/markdown" "github.com/gomarkdown/markdown/html" "github.com/gomarkdown/markdown/parser" + "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/kyren223/eko/embeds" "github.com/kyren223/eko/pkg/assert" ) +func ServePrometheusMetrics() { + slog.Info("starting metrics webserver...") + + metricsMux := http.NewServeMux() + metricsMux.Handle("/metrics", promhttp.Handler()) + + srv := &http.Server{ + Addr: ":2112", + Handler: metricsMux, + ReadTimeout: 5 * time.Second, + WriteTimeout: 10 * time.Second, + IdleTimeout: 120 * time.Second, + } + + err := srv.ListenAndServe() + if err != nil { + slog.Error("metrics webserver error", "error", err) + } else { + slog.Info("metrics webserver terminated") + } +} + func ServeEkoWebsite() { - slog.Info("starting web-server...") + slog.Info("starting public webserver...") + + publicMux := http.NewServeMux() - http.HandleFunc("/style.css", func(w http.ResponseWriter, r *http.Request) { + publicMux.HandleFunc("/style.css", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/css") _, err := w.Write([]byte(css)) assert.NoError(err, "css *should* be valid") }) - http.HandleFunc("/terms-of-service", func(w http.ResponseWriter, r *http.Request) { + publicMux.HandleFunc("/terms-of-service", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") tos := embeds.TermsOfService.Load().(string) tos = strings.ReplaceAll(tos, "Privacy Policy", "[Privacy Policy](../privacy-policy)") @@ -33,7 +58,7 @@ func ServeEkoWebsite() { writeLegalLayoutHtml(w, html) }) - http.HandleFunc("/privacy-policy", func(w http.ResponseWriter, r *http.Request) { + publicMux.HandleFunc("/privacy-policy", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html") privacy := embeds.PrivacyPolicy.Load().(string) privacy = strings.ReplaceAll(privacy, "Terms of Service", "[Terms of Service](../terms-of-service)") @@ -43,13 +68,18 @@ func ServeEkoWebsite() { srv := &http.Server{ Addr: ":7443", - Handler: http.DefaultServeMux, + Handler: publicMux, ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, IdleTimeout: 120 * time.Second, } - slog.Error("webserver error", "error", srv.ListenAndServe()) + err := srv.ListenAndServe() + if err != nil { + slog.Error("public webserver error", "error", err) + } else { + slog.Info("public webserver terminated") + } } func writeLegalLayoutHtml(w io.Writer, html string) { |
