Documentation
¶
Index ¶
- func ContextWithLogger(ctx context.Context, logger *LogEntry) context.Context
- func GetRequestID(ctx context.Context) string
- func IDString() string
- func IDStringWithTime(t time.Time) string
- func MakeJSONAPI(handler JSONRequestHandler) http.HandlerFunc
- func ParseLevel(levelStr string) (slog.Level, error)
- func Protect(handler http.HandlerFunc) http.HandlerFunc
- func RandomString(n int) string
- func RequestWithLogging(req *http.Request) *http.Request
- func SLog(ctx context.Context) *slog.Logger
- func SetCORSHeaders(w http.ResponseWriter)
- func SortAndUnique(data sort.Interface) int
- func Unique(data sort.Interface) int
- func UniqueStrings(strings []string) []string
- func WithCORSOptions(handler http.HandlerFunc) http.HandlerFunc
- type JSONRequestHandler
- type JSONResponse
- type LogEntry
- func (e *LogEntry) Debug(msg string, args ...any)
- func (e *LogEntry) Error(msg string, args ...any)
- func (e *LogEntry) Fatal(msg string, args ...any)
- func (e *LogEntry) Info(msg string, args ...any)
- func (e *LogEntry) LevelEnabled(ctx context.Context, level slog.Level) bool
- func (e *LogEntry) Log(ctx context.Context, level slog.Level, msg string, fields ...any)
- func (e *LogEntry) Logf(ctx context.Context, level slog.Level, format string, args ...interface{})
- func (e *LogEntry) Panic(msg string, args ...any)
- func (e *LogEntry) Printf(format string, args ...any)
- func (e *LogEntry) SLog() *slog.Logger
- func (e *LogEntry) Trace(msg string, args ...any)
- func (e *LogEntry) Warn(msg string, args ...any)
- func (e *LogEntry) With(args ...any) *LogEntry
- func (e *LogEntry) WithAttr(attr ...any) *LogEntry
- func (e *LogEntry) WithContext(ctx context.Context) *LogEntry
- func (e *LogEntry) WithError(err error) *LogEntry
- func (e *LogEntry) WithField(key string, value any) *LogEntry
- type LogOptions
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ContextWithLogger ¶
ContextWithLogger pushes a LogEntry instance into the supplied context for easier propagation.
func GetRequestID ¶
GetRequestID returns the request ID associated with this context, or the empty string if one is not associated with this context.
func IDStringWithTime ¶ added in v0.1.3
func MakeJSONAPI ¶
func MakeJSONAPI(handler JSONRequestHandler) http.HandlerFunc
MakeJSONAPI creates an HTTP handler which always responds to incoming requests with JSON responses. Incoming http.Requests will have a logger (with a request ID/method/path logged) attached to the Context. This can be accessed via GetLogger(Context).
func ParseLevel ¶ added in v0.2.0
ParseLevel converts a string to a log.Level. It is case-insensitive. Returns an error if the string does not match a known level.
func Protect ¶
func Protect(handler http.HandlerFunc) http.HandlerFunc
Protect panicking HTTP requests from taking down the entire process, and log them using the correct logger, returning a 500 with a JSON response rather than abruptly closing the connection. The http.Request MUST have a ctxValueLogger.
func RandomString ¶
RandomString generates a pseudo-random string of length n.
func RequestWithLogging ¶
RequestWithLogging sets up standard logging for http.Requests. http.Requests will have a logger (with a request ID/method/path logged) attached to the Context. This can be accessed via GetLogger(Context).
func SetCORSHeaders ¶
func SetCORSHeaders(w http.ResponseWriter)
SetCORSHeaders sets unrestricted origin Access-Control headers on the response writer
func SortAndUnique ¶
SortAndUnique sorts a list and removes duplicate entries in place. Takes the same interface as sort.Sort Returns the length of the data without duplicates Uses the last occurrence of a duplicate. O(nlog(n))
func Unique ¶
Unique removes duplicate items from a sorted list in place. Takes the same interface as sort.Sort Returns the length of the data without duplicates Uses the last occurrence of a duplicate. O(n).
func UniqueStrings ¶
UniqueStrings turns a list of strings into a sorted list of unique strings. O(nlog(n))
func WithCORSOptions ¶
func WithCORSOptions(handler http.HandlerFunc) http.HandlerFunc
WithCORSOptions intercepts all OPTIONS requests and responds with CORS headers. The request handler is not invoked when this happens.
Types ¶
type JSONRequestHandler ¶
type JSONRequestHandler interface {
OnIncomingRequest(req *http.Request) JSONResponse
}
JSONRequestHandler represents an interface that must be satisfied in order to respond to incoming HTTP requests with JSON.
func NewJSONRequestHandler ¶
func NewJSONRequestHandler(f func(req *http.Request) JSONResponse) JSONRequestHandler
NewJSONRequestHandler converts the given OnIncomingRequest function into a JSONRequestHandler
type JSONResponse ¶
type JSONResponse struct {
// HTTP status code.
Code int
// JSON represents the JSON that should be serialised and sent to the client
JSON interface{}
// Headers represent any headers that should be sent to the client
Headers map[string]any
}
JSONResponse represents an HTTP response which contains a JSON body.
func ErrorResponse ¶
func ErrorResponse(err error) JSONResponse
ErrorResponse returns an HTTP 500 JSONResponse with the stringified form of the given error.
func MatrixErrorResponse ¶
func MatrixErrorResponse(httpStatusCode int, errCode, message string) JSONResponse
MatrixErrorResponse is a function that returns error responses in the standard Matrix Error format (errcode / error)
func MessageResponse ¶
func MessageResponse(code int, msg string) JSONResponse
MessageResponse returns a JSONResponse with a 'message' key containing the given text.
func RedirectResponse ¶
func RedirectResponse(location string) JSONResponse
RedirectResponse returns a JSONResponse which 302s the client to the given location.
func (JSONResponse) Is2xx ¶
func (r JSONResponse) Is2xx() bool
Is2xx returns true if the Code is between 200 and 299.
type LogEntry ¶ added in v0.2.0
type LogEntry struct {
// contains filtered or unexported fields
}
LogEntry Need a type to handle the chained calls
func (*LogEntry) LevelEnabled ¶ added in v0.2.0
func (*LogEntry) WithContext ¶ added in v0.2.0
type LogOptions ¶ added in v0.2.1
type LogOptions struct {
*slog.HandlerOptions
PrintFormat string
TimeFormat string
NoColor bool
ShowStackTrace bool
}
func DefaultLogOptions ¶ added in v0.2.1
func DefaultLogOptions() *LogOptions