mirror of
https://github.com/ferdzo/fs.git
synced 2026-04-05 01:56:25 +00:00
Initial metrics endpoint added in Prometheus style
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fs/metrics"
|
||||
"log/slog"
|
||||
"net"
|
||||
"net/http"
|
||||
@@ -18,17 +20,20 @@ func Middleware(
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
authCtx := RequestContext{Authenticated: false, AuthType: "none"}
|
||||
if svc == nil || !svc.Config().Enabled {
|
||||
metrics.Default.ObserveAuth("bypass", "disabled", "auth_disabled")
|
||||
next.ServeHTTP(w, r.WithContext(WithRequestContext(r.Context(), authCtx)))
|
||||
return
|
||||
}
|
||||
|
||||
if r.URL.Path == "/healthz" {
|
||||
if r.URL.Path == "/healthz" || r.URL.Path == "/metrics" {
|
||||
metrics.Default.ObserveAuth("bypass", "none", "public_endpoint")
|
||||
next.ServeHTTP(w, r.WithContext(WithRequestContext(r.Context(), authCtx)))
|
||||
return
|
||||
}
|
||||
|
||||
resolvedCtx, err := svc.AuthenticateRequest(r)
|
||||
if err != nil {
|
||||
metrics.Default.ObserveAuth("error", "sigv4", authErrorClass(err))
|
||||
if auditEnabled && logger != nil {
|
||||
requestID := middleware.GetReqID(r.Context())
|
||||
attrs := []any{
|
||||
@@ -50,6 +55,7 @@ func Middleware(
|
||||
return
|
||||
}
|
||||
|
||||
metrics.Default.ObserveAuth("ok", resolvedCtx.AuthType, "none")
|
||||
if auditEnabled && logger != nil {
|
||||
requestID := middleware.GetReqID(r.Context())
|
||||
attrs := []any{
|
||||
@@ -69,6 +75,33 @@ func Middleware(
|
||||
}
|
||||
}
|
||||
|
||||
func authErrorClass(err error) string {
|
||||
switch {
|
||||
case errors.Is(err, ErrInvalidAccessKeyID):
|
||||
return "invalid_access_key"
|
||||
case errors.Is(err, ErrSignatureDoesNotMatch):
|
||||
return "signature_mismatch"
|
||||
case errors.Is(err, ErrAuthorizationHeaderMalformed):
|
||||
return "auth_header_malformed"
|
||||
case errors.Is(err, ErrRequestTimeTooSkewed):
|
||||
return "time_skew"
|
||||
case errors.Is(err, ErrExpiredToken):
|
||||
return "expired_token"
|
||||
case errors.Is(err, ErrNoAuthCredentials):
|
||||
return "missing_credentials"
|
||||
case errors.Is(err, ErrUnsupportedAuthScheme):
|
||||
return "unsupported_auth_scheme"
|
||||
case errors.Is(err, ErrInvalidPresign):
|
||||
return "invalid_presign"
|
||||
case errors.Is(err, ErrCredentialDisabled):
|
||||
return "credential_disabled"
|
||||
case errors.Is(err, ErrAccessDenied):
|
||||
return "access_denied"
|
||||
default:
|
||||
return "other"
|
||||
}
|
||||
}
|
||||
|
||||
func clientIP(remoteAddr string) string {
|
||||
host, _, err := net.SplitHostPort(remoteAddr)
|
||||
if err == nil && host != "" {
|
||||
|
||||
Reference in New Issue
Block a user