Documentation ¶
Index ¶
- func Log(ctx context.Context, keyvals ...interface{}) error
- func LogErrorMsg(ctx context.Context, err error, msg string) error
- func LogErrorMsgWithFields(ctx context.Context, err error, msg string) error
- func LogMsg(ctx context.Context, msg string) error
- func LogMsgWithFields(ctx context.Context, msg string) error
- func Logger(ctx context.Context) log.Logger
- func LoggerWithFields(ctx context.Context) log.Logger
- func Run(service Service) error
- func SetRouteVars(r *http.Request, val interface{}) *http.Request
- func Vars(r *http.Request) map[string]string
- type Config
- type HTTPEndpoint
- type JSONStatusResponse
- type Router
- type RouterOption
- type Server
- type Service
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func LogErrorMsg ¶
LogErrorMsg will log the given error under the key "error" and the given message under the key "msg".
func LogErrorMsgWithFields ¶
LogErrorMsgWithFields will start with LoggerWithFields and then log the given error under the key "error" and the given message under the key "msg".
func LogMsgWithFields ¶
LogMsgWithFields will start with LoggerWithFields and then log the given message under the key "msg".
func Logger ¶
Logger will return a kit/log.Logger that has been injected into the context by the kit server. This function will only work within the scope of a request initiated by the server.
func LoggerWithFields ¶
LoggerWithFields will pull any known request info from the context and include it into the log as key values.
func Run ¶
Run will use environment variables to configure the server then register the given Service and start up the server(s). This will block until the server shuts down.
func SetRouteVars ¶
SetRouteVars will set the given value into into the request context with the shared 'vars' storage key.
Types ¶
type Config ¶
type Config struct { // HealthCheckPath is used by server to init the proper HealthCheckHandler. // If empty, this will default to '/healthz'. HealthCheckPath string `envconfig:"GIZMO_HEALTH_CHECK_PATH"` // MaxHeaderBytes can be used to override the default of 1<<20. MaxHeaderBytes int `envconfig:"GIZMO_MAX_HEADER_BYTES"` // ReadTimeout can be used to override the default http server timeout of 10s. // The string should be formatted like a time.Duration string. ReadTimeout time.Duration `envconfig:"GIZMO_READ_TIMEOUT"` // WriteTimeout can be used to override the default http server timeout of 10s. // The string should be formatted like a time.Duration string. WriteTimeout time.Duration `envconfig:"GIZMO_WRITE_TIMEOUT"` // IdleTimeout can be used to override the default http server timeout of 120s. // The string should be formatted like a time.Duration string. IdleTimeout time.Duration `envconfig:"GIZMO_IDLE_TIMEOUT"` // ShutdownTimeout can be used to override the default http server shutdown timeout // of 5m. ShutdownTimeout time.Duration `envconfig:"GIZMO_SHUTDOWN_TIMEOUT"` // GOMAXPROCS can be used to override the default GOMAXPROCS. GOMAXPROCS int `envconfig:"GIZMO_GOMAXPROCS"` // HTTPPort is the port the server implementation will serve HTTP over. // The default is 8080 HTTPPort int `envconfig:"HTTP_PORT"` // RPCPort is the port the server implementation will serve RPC over. // The default is 8081. RPCPort int `envconfig:"RPC_PORT"` // Enable pprof Profiling. Off by default. EnablePProf bool `envconfig:"ENABLE_PPROF"` }
Config holds info required to configure a gizmo kit.Server.
This struct is loaded from the environment at Run and only made public to expose for documentation.
type HTTPEndpoint ¶
type HTTPEndpoint struct { Endpoint endpoint.Endpoint Decoder httptransport.DecodeRequestFunc Encoder httptransport.EncodeResponseFunc Options []httptransport.ServerOption }
HTTPEndpoint encapsulates everything required to build an endpoint hosted on a kit server.
type JSONStatusResponse ¶
type JSONStatusResponse struct {
// contains filtered or unexported fields
}
JSONStatusResponse implements: `httptransport.StatusCoder` to allow users to respond with the given response with a non-200 status code. `json.Marshaler` so it can wrap JSON Endpoint responses. `error` so it can be used to respond as an error within the go-kit stack.
func NewJSONStatusResponse ¶
func NewJSONStatusResponse(res interface{}, code int) *JSONStatusResponse
NewJSONStatusResponse allows users to respond with a specific HTTP status code and a JSON serialized response.
func (*JSONStatusResponse) Error ¶
func (c *JSONStatusResponse) Error() string
Error is to implement error
func (*JSONStatusResponse) MarshalJSON ¶
func (c *JSONStatusResponse) MarshalJSON() ([]byte, error)
MarshalJSON is to implement json.Marshaler
func (*JSONStatusResponse) StatusCode ¶
func (c *JSONStatusResponse) StatusCode() int
StatusCode is to implement httptransport.StatusCoder
type Router ¶
type Router interface { Handle(method string, path string, handler http.Handler) HandleFunc(method string, path string, handlerFunc func(http.ResponseWriter, *http.Request)) ServeHTTP(w http.ResponseWriter, r *http.Request) SetNotFoundHandler(handler http.Handler) }
Router is an interface to wrap different router implementations.
type RouterOption ¶
RouterOption sets optional Router overrides.
func CustomRouter ¶
func CustomRouter(r Router) RouterOption
CustomRouter allows users to inject an alternate Router implementation.
func RouterNotFound ¶
func RouterNotFound(h http.Handler) RouterOption
RouterNotFound will set the not found handler of the router.
func RouterSelect ¶
func RouterSelect(name string) RouterOption
RouterSelect allows users to override the default use of the Gorilla Router. TODO add type and constants for names + docs
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server encapsulates all logic for registering and running a gizmo kit server.
type Service ¶
type Service interface { // Middleware is for any service-wide go-kit middlewares. This middleware // is applied to both HTTP and gRPC services. Middleware(endpoint.Endpoint) endpoint.Endpoint // HTTPMiddleware is for service-wide http specific middleware // for easy integration with 3rd party http.Handlers like nytimes/gziphandler. HTTPMiddleware(http.Handler) http.Handler // HTTPOptions are service-wide go-kit HTTP server options HTTPOptions() []httptransport.ServerOption // HTTPRouterOptions allows users to override the default // behavior and use of the GorillaRouter. HTTPRouterOptions() []RouterOption // HTTPEndpoints default to using a JSON serializer if no encoder is provided. // For example: // // return map[string]map[string]kit.HTTPEndpoint{ // "/cat/{id}": { // "GET": { // Endpoint: s.GetCatByID, // Decoder: decodeGetCatRequest, // }, // }, // "/cats": { // "PUT": { // Endpoint: s.PutCats, // HTTPDecoder: decodePutCatsProtoRequest, // }, // "GET": { // Endpoint: s.GetCats, // HTTPDecoder: decodeGetCatsRequest, // }, // }, // } HTTPEndpoints() map[string]map[string]HTTPEndpoint // RPCMiddleware is for any service-wide gRPC specific middleware // for easy integration with 3rd party grpc.UnaryServerInterceptors like // http://godoc.org/cloud.google.com/go/trace#Client.GRPCServerInterceptor // // The underlying kit server already uses the one available grpc.UnaryInterceptor // grpc.ServerOption so attempting to pass your own in this Service's RPCOptions() // will cause a panic at startup. // // If you want to apply multiple RPC middlewares, // we recommend using: // http://godoc.org/github.com/grpc-ecosystem/go-grpc-middleware#ChainUnaryServer RPCMiddleware() grpc.UnaryServerInterceptor // RPCServiceDesc allows services to declare an alternate gRPC // representation of themselves to be hosted on the RPC_PORT (8081 by default). RPCServiceDesc() *grpc.ServiceDesc // RPCOptions are for service-wide gRPC server options. // // The underlying kit server already uses the one available grpc.UnaryInterceptor // grpc.ServerOption so attempting to pass your own in this method will cause a panic // at startup. We recommend using RPCMiddleware() to fill this need. RPCOptions() []grpc.ServerOption }
Service is the interface of mixed HTTP/gRPC that can be registered and hosted by a gizmo/server/kit server. Services provide hooks for service-wide options and middlewares and can be used as a means of dependency injection. In general, a Service should just contain the logic for deserializing and authorizing requests, passing the request to a business logic interface abstraction, handling errors and serializing the apprioriate response.
In other words, each Endpoint is similar to a 'controller' and the Service a container for injecting depedencies (business services, repositories, etc.) into each request handler.