summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorKyren223 <Kyren223@proton.me>2025-07-12 14:27:12 +0300
committerKyren223 <Kyren223@proton.me>2025-07-19 18:32:12 +0300
commitc52d5693e91f7a8975d6f5f0de06a86d1360ef59 (patch)
tree28611e89c0e7c3aad9157e062ef30b7044302c05 /internal
parentdc6c10155c33033b386665e7882b91be9837f55a (diff)
Added server metrics (need to actually add metrics later)
Diffstat (limited to 'internal')
-rw-r--r--internal/client/config/config.go2
-rw-r--r--internal/server/metrics/metrics.go18
-rw-r--r--internal/server/server.go2
-rw-r--r--internal/webserver/webserver.go42
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) {