Documentation
¶
Index ¶
- Constants
- Variables
- func Accepted(c *fiber.Ctx, s any) error
- func AllowFullOptionsWithCORS(app *fiber.App)
- func ApplyCursorPagination(findAll squirrel.SelectBuilder, decodedCursor Cursor, orderDirection string, ...) (squirrel.SelectBuilder, string)
- func BadRequest(c *fiber.Ctx, s any) error
- func Conflict(c *fiber.Ctx, code, title, message string) error
- func Created(c *fiber.Ctx, s any) error
- func ExtractTokenFromHeader(c *fiber.Ctx) string
- func File(filePath string) fiber.Handler
- func Forbidden(c *fiber.Ctx, code, title, message string) error
- func HandleFiberError(c *fiber.Ctx, err error) error
- func HealthWithDependencies(dependencies ...DependencyCheck) fiber.Handler
- func InternalServerError(c *fiber.Ctx, code, title, message string) error
- func JSONResponse(c *fiber.Ctx, status int, s any) error
- func JSONResponseError(c *fiber.Ctx, err commons.Response) error
- func NoContent(c *fiber.Ctx) error
- func NotFound(c *fiber.Ctx, code, title, message string) error
- func NotImplemented(c *fiber.Ctx, message string) error
- func NotImplementedEndpoint(c *fiber.Ctx) error
- func OK(c *fiber.Ctx, s any) error
- func PaginateRecords[T any](isFirstPage bool, hasPagination bool, pointsNext bool, items []T, limit int, ...) []T
- func PartialContent(c *fiber.Ctx, s any) error
- func Ping(c *fiber.Ctx) error
- func RangeNotSatisfiable(c *fiber.Ctx) error
- func ServeReverseProxy(target string, res http.ResponseWriter, req *http.Request)
- func StopMetricsCollector()
- func Unauthorized(c *fiber.Ctx, code, title, message string) error
- func UnprocessableEntity(c *fiber.Ctx, code, title, message string) error
- func Version(c *fiber.Ctx) error
- func Welcome(service string, description string) fiber.Handler
- func WithBasicAuth(f BasicAuthFunc, realm string) fiber.Handler
- func WithCORS() fiber.Handler
- func WithGrpcLogging(opts ...LogMiddlewareOption) grpc.UnaryServerInterceptor
- func WithHTTPLogging(opts ...LogMiddlewareOption) fiber.Handler
- type BasicAuthFunc
- type Cursor
- type CursorPagination
- type DependencyCheck
- type DependencyStatus
- type LogMiddlewareOption
- type RequestInfo
- type ResponseMetricsWrapper
- type TelemetryMiddleware
- func (tm *TelemetryMiddleware) EndTracingSpans(c *fiber.Ctx) error
- func (tm *TelemetryMiddleware) EndTracingSpansInterceptor() grpc.UnaryServerInterceptor
- func (tm *TelemetryMiddleware) WithTelemetry(tl *opentelemetry.Telemetry, excludedRoutes ...string) fiber.Handler
- func (tm *TelemetryMiddleware) WithTelemetryInterceptor(tl *opentelemetry.Telemetry) grpc.UnaryServerInterceptor
Constants ¶
const DefaultMetricsCollectionInterval = 5 * time.Second
DefaultMetricsCollectionInterval is the default interval for collecting system metrics. Can be overridden via METRICS_COLLECTION_INTERVAL environment variable.
const NotImplementedMessage = "Not implemented yet"
Variables ¶
var HealthSimple = Ping
HealthSimple is an alias for the existing Ping function for backward compatibility. Use this when you don't need detailed dependency health checks.
Returns:
- HTTP 200 OK with "healthy" text response
Example usage:
f.Get("/health", commonsHttp.HealthSimple)
Functions ¶
func AllowFullOptionsWithCORS ¶
AllowFullOptionsWithCORS set r.Use(WithCORS) and allow every request to use OPTION method.
func ApplyCursorPagination ¶
func ApplyCursorPagination( findAll squirrel.SelectBuilder, decodedCursor Cursor, orderDirection string, limit int, tableAlias ...string, ) (squirrel.SelectBuilder, string)
func BadRequest ¶
BadRequest sends an HTTP 400 Bad Request response with a custom body.
func ExtractTokenFromHeader ¶
ExtractTokenFromHeader extracts the authentication token from the Authorization header. It handles both "Bearer TOKEN" format and raw token format.
func Forbidden ¶
Forbidden sends an HTTP 403 Forbidden response with a custom code, title and message.
func HandleFiberError ¶
HandleFiberError handles errors for Fiber, properly unwrapping errors to check for fiber.Error
func HealthWithDependencies ¶ added in v2.4.0
func HealthWithDependencies(dependencies ...DependencyCheck) fiber.Handler
HealthWithDependencies creates a Fiber handler that reports health status based on circuit breaker states and custom health checks.
Returns HTTP 200 (status: "available") when all dependencies are healthy, or HTTP 503 (status: "degraded") when any dependency fails.
Example:
f.Get("/health", commonsHttp.HealthWithDependencies(
commonsHttp.DependencyCheck{
Name: "database",
CircuitBreaker: cbManager,
ServiceName: "postgres",
HealthCheck: func() bool { return db.Ping() == nil },
},
commonsHttp.DependencyCheck{
Name: "cache",
CircuitBreaker: cbManager,
ServiceName: "redis",
},
))
func InternalServerError ¶
InternalServerError sends an HTTP 500 Internal Server Response response
func JSONResponse ¶
JSONResponse sends a custom status code and body as a JSON response.
func JSONResponseError ¶
JSONResponseError sends a JSON formatted error response with a custom error struct.
func NotFound ¶
NotFound sends an HTTP 404 Not Found response with a custom code, title and message.
func NotImplemented ¶
NotImplemented sends an HTTP 501 Not Implemented response with a custom message.
func NotImplementedEndpoint ¶
NotImplementedEndpoint returns HTTP 501 with not implemented message.
func PaginateRecords ¶
func PartialContent ¶
PartialContent sends an HTTP 206 Partial Content response with a custom body.
func RangeNotSatisfiable ¶
RangeNotSatisfiable sends an HTTP 416 Requested Range Not Satisfiable response.
func ServeReverseProxy ¶
func ServeReverseProxy(target string, res http.ResponseWriter, req *http.Request)
ServeReverseProxy serves a reverse proxy for a given url.
func StopMetricsCollector ¶
func StopMetricsCollector()
StopMetricsCollector stops the background metrics collector goroutine. Should be called during application shutdown for graceful cleanup. After calling this function, the collector can be restarted by new requests.
Implementation note: This function intentionally resets sync.Once to a new instance to allow the collector to be restarted after being stopped. This is an unusual but intentional pattern - the mutex ensures thread-safety during the reset operation, preventing race conditions between Stop and subsequent Start calls.
func Unauthorized ¶
Unauthorized sends an HTTP 401 Unauthorized response with a custom code, title and message.
func UnprocessableEntity ¶
UnprocessableEntity sends an HTTP 422 Unprocessable Entity response with a custom code, title and message.
func WithBasicAuth ¶
func WithBasicAuth(f BasicAuthFunc, realm string) fiber.Handler
WithBasicAuth creates a basic authentication middleware.
func WithCORS ¶
WithCORS is a middleware that enables CORS. Replace it with a real CORS middleware implementation.
func WithGrpcLogging ¶
func WithGrpcLogging(opts ...LogMiddlewareOption) grpc.UnaryServerInterceptor
WithGrpcLogging is a gRPC unary interceptor to log access to gRPC server.
func WithHTTPLogging ¶
func WithHTTPLogging(opts ...LogMiddlewareOption) fiber.Handler
WithHTTPLogging is a middleware to log access to http server. It logs access log according to Apache Standard Logs which uses Common Log Format (CLF) Ref: https://httpd.apache.org/docs/trunk/logs.html#common
Types ¶
type BasicAuthFunc ¶
BasicAuthFunc represents a func which returns if a username and password was authenticated or not. It returns true if authenticated, and false when not authenticated.
func FixedBasicAuthFunc ¶
func FixedBasicAuthFunc(username, password string) BasicAuthFunc
FixedBasicAuthFunc is a fixed username and password to use as BasicAuthFunc.
type CursorPagination ¶
func CalculateCursor ¶
func CalculateCursor( isFirstPage, hasPagination, pointsNext bool, firstItemID, lastItemID string, ) (CursorPagination, error)
type DependencyCheck ¶ added in v2.4.0
type DependencyCheck struct {
// Name is the identifier for this dependency in the health response
Name string
// CircuitBreaker is the circuit breaker manager (optional)
// When provided with ServiceName, health endpoint will report circuit breaker state
CircuitBreaker circuitbreaker.Manager
// ServiceName is the name used to register this dependency with the circuit breaker
// Required if CircuitBreaker is provided
ServiceName string
// HealthCheck is a custom health check function (optional)
// When provided, this function will be called to determine dependency health
// Return true for healthy, false for unhealthy
HealthCheck func() bool
}
DependencyCheck represents a health check configuration for a single dependency.
At minimum, provide a Name. For circuit breaker integration, provide both CircuitBreaker and ServiceName. For custom health logic, provide HealthCheck.
type DependencyStatus ¶ added in v2.4.0
type DependencyStatus struct {
// CircuitBreakerState indicates the current circuit breaker state (closed, open, half-open)
// Only populated when circuit breaker is configured for this dependency
CircuitBreakerState string `json:"circuit_breaker_state,omitempty"`
// Healthy indicates whether the dependency is currently healthy
Healthy bool `json:"healthy"`
// Requests is the total number of requests processed by the circuit breaker
// Only populated when circuit breaker is configured
Requests uint32 `json:"requests,omitempty"`
// TotalSuccesses is the cumulative count of successful requests
// Only populated when circuit breaker is configured
TotalSuccesses uint32 `json:"total_successes,omitempty"`
// TotalFailures is the cumulative count of failed requests
// Only populated when circuit breaker is configured
TotalFailures uint32 `json:"total_failures,omitempty"`
// ConsecutiveFailures is the count of consecutive failures
// Resets to 0 on success. Only populated when circuit breaker is configured
ConsecutiveFailures uint32 `json:"consecutive_failures,omitempty"`
}
DependencyStatus represents the health status of a single dependency. This struct provides type-safe representation of dependency health metrics.
type LogMiddlewareOption ¶
type LogMiddlewareOption func(l *logMiddleware)
LogMiddlewareOption represents the log middleware function as an implementation.
func WithCustomLogger ¶
func WithCustomLogger(logger log.Logger) LogMiddlewareOption
WithCustomLogger is a functional option for logMiddleware.
type RequestInfo ¶
type RequestInfo struct {
Method string
Username string
URI string
Referer string
RemoteAddress string
Status int
Date time.Time
Duration time.Duration
UserAgent string
TraceID string
Protocol string
Size int
Body string
}
RequestInfo is a struct design to store http access log data.
func NewRequestInfo ¶
func NewRequestInfo(c *fiber.Ctx) *RequestInfo
NewRequestInfo creates an instance of RequestInfo.
func (*RequestInfo) CLFString ¶
func (r *RequestInfo) CLFString() string
CLFString produces a log entry format similar to Common Log Format (CLF) Ref: https://httpd.apache.org/docs/trunk/logs.html#common
func (*RequestInfo) FinishRequestInfo ¶
func (r *RequestInfo) FinishRequestInfo(rw *ResponseMetricsWrapper)
FinishRequestInfo calculates the duration of RequestInfo automatically using time.Now() It also set StatusCode and Size of RequestInfo passed by ResponseMetricsWrapper.
func (*RequestInfo) String ¶
func (r *RequestInfo) String() string
String implements fmt.Stringer interface and produces a log entry using RequestInfo.CLFExtendedString.
type ResponseMetricsWrapper ¶
ResponseMetricsWrapper is a Wrapper responsible for collect the response data such as status code and size It implements built-in ResponseWriter interface.
type TelemetryMiddleware ¶
type TelemetryMiddleware struct {
Telemetry *opentelemetry.Telemetry
}
func NewTelemetryMiddleware ¶
func NewTelemetryMiddleware(tl *opentelemetry.Telemetry) *TelemetryMiddleware
NewTelemetryMiddleware creates a new instance of TelemetryMiddleware.
func (*TelemetryMiddleware) EndTracingSpans ¶
func (tm *TelemetryMiddleware) EndTracingSpans(c *fiber.Ctx) error
EndTracingSpans is a middleware that ends the tracing spans.
func (*TelemetryMiddleware) EndTracingSpansInterceptor ¶
func (tm *TelemetryMiddleware) EndTracingSpansInterceptor() grpc.UnaryServerInterceptor
EndTracingSpansInterceptor is a gRPC interceptor that ends the tracing spans.
func (*TelemetryMiddleware) WithTelemetry ¶
func (tm *TelemetryMiddleware) WithTelemetry(tl *opentelemetry.Telemetry, excludedRoutes ...string) fiber.Handler
WithTelemetry is a middleware that adds tracing to the context.
func (*TelemetryMiddleware) WithTelemetryInterceptor ¶
func (tm *TelemetryMiddleware) WithTelemetryInterceptor(tl *opentelemetry.Telemetry) grpc.UnaryServerInterceptor
WithTelemetryInterceptor is a gRPC interceptor that adds tracing to the context.