Documentation ¶
Index ¶
- func PrometheusMiddleware(next http.Handler) http.Handler
- func SvelteKitHandler(path string) http.Handler
- func ValidateUserMiddleware(next http.Handler) http.Handler
- type CatalogClient
- func (c CatalogClient) Doughs() ([]model.Dough, error)
- func (c CatalogClient) Ingredients(ingredientType string) ([]model.Ingredient, error)
- func (c CatalogClient) RecordRecommendation(p model.Pizza) error
- func (c CatalogClient) Tools() ([]string, error)
- func (c CatalogClient) WithClient(client *http.Client) CatalogClient
- func (c CatalogClient) WithRequestContext(ctx context.Context) CatalogClient
- type CopyClient
- type PizzaRecommendation
- type Restrictions
- type Server
- func (s *Server) ServeHTTP(rw http.ResponseWriter, r *http.Request)
- func (s *Server) WithCatalog(db *database.Catalog) *Server
- func (s *Server) WithConfig(config map[string]string) *Server
- func (s *Server) WithCopy(db *database.Copy) *Server
- func (s *Server) WithFrontend() *Server
- func (s *Server) WithGateway(catalogUrl, copyUrl, wsUrl, recommendationsUrl, configUrl string) *Server
- func (s *Server) WithProfiling() *Server
- func (s *Server) WithPrometheus() *Server
- func (s *Server) WithRecommendations(catalogClient CatalogClient, copyClient CopyClient) *Server
- func (s *Server) WithTraceInstaller(ti *TraceInstaller) *Server
- func (s *Server) WithWS() *Server
- type TraceInstaller
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type CatalogClient ¶
type CatalogClient struct {
// contains filtered or unexported fields
}
CatalogClient is a client that queries the Catalog service.
func NewCatalogClient ¶ added in v0.1.1
func NewCatalogClient(url string) CatalogClient
NewCatalogClient returns a ready-to-use client for the QuickPizza catalog, service given its URL.
func (CatalogClient) Ingredients ¶
func (c CatalogClient) Ingredients(ingredientType string) ([]model.Ingredient, error)
func (CatalogClient) RecordRecommendation ¶
func (c CatalogClient) RecordRecommendation(p model.Pizza) error
func (CatalogClient) Tools ¶
func (c CatalogClient) Tools() ([]string, error)
func (CatalogClient) WithClient ¶ added in v0.1.1
func (c CatalogClient) WithClient(client *http.Client) CatalogClient
WithClient returns a CatalogClient that uses the specified http.Client, instead of http.DefaultClient.
func (CatalogClient) WithRequestContext ¶
func (c CatalogClient) WithRequestContext(ctx context.Context) CatalogClient
WithRequestContext returns a copy of the CatalogClient that will use the supplied context. This context should come from a http.Request, and if provided, CatalogClient will: - Extract parent tracer and trace IDs from it and propagate it to the requests it makes. - Extract the QuickPizza user ID from it and propagate it as well.
type CopyClient ¶
type CopyClient struct {
// contains filtered or unexported fields
}
CopyClient is a client that queries the Copy service.
func NewCopyClient ¶ added in v0.1.1
func NewCopyClient(url string) CopyClient
NewCopyClient is the Copy service equivalent of NewCatalogClient.
func (CopyClient) Adjectives ¶
func (c CopyClient) Adjectives() ([]string, error)
func (CopyClient) Names ¶
func (c CopyClient) Names() ([]string, error)
func (CopyClient) WithClient ¶ added in v0.1.1
func (c CopyClient) WithClient(client *http.Client) CopyClient
WithClient is the Copy service equivalent of CatalogClient.
func (CopyClient) WithRequestContext ¶
func (c CopyClient) WithRequestContext(ctx context.Context) CopyClient
WithRequestContext is the Copy service equivalent of CatalogClient.
type PizzaRecommendation ¶
type PizzaRecommendation struct { Pizza model.Pizza `json:"pizza"` Calories int `json:"calories"` Vegetarian bool `json:"vegetarian"` }
PizzaRecommendation is the object returned by the /api/pizza endpoint.
type Restrictions ¶ added in v0.5.0
type Restrictions struct { MaxCaloriesPerSlice int `json:"maxCaloriesPerSlice"` MustBeVegetarian bool `json:"mustBeVegetarian"` ExcludedIngredients []string `json:"excludedIngredients"` ExcludedTools []string `json:"excludedTools"` MaxNumberOfToppings int `json:"maxNumberOfToppings"` MinNumberOfToppings int `json:"minNumberOfToppings"` }
Restrictions are sent by the client to further specify how the target pizza should look like
func (Restrictions) WithDefaults ¶ added in v0.5.0
func (r Restrictions) WithDefaults() Restrictions
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is the object that handles HTTP requests and computes pizza recommendations. Routes are divided into serveral groups that can be instantiated independently as microservices, or all together as one single big service.
func (*Server) WithCatalog ¶
WithCatalog enables routes related to the ingredients, doughs, and tools. A database.InMemoryDatabase is required to enable this endpoint group. This database is safe to be used concurrently and thus may be shared with other endpoint groups.
func (*Server) WithConfig ¶ added in v0.3.0
WithConfig enables serving the config server.
func (*Server) WithFrontend ¶
WithFrontend enables serving the embedded Svelte frontend.
func (*Server) WithGateway ¶
func (s *Server) WithGateway(catalogUrl, copyUrl, wsUrl, recommendationsUrl, configUrl string) *Server
WithGateway enables a gateway that routes external requests to the respective services. This endpoint should be typically enabled toget with WithFrontend on a microservices-based deployment. TODO: So far the gateway only handles a few endpoints.
func (*Server) WithProfiling ¶ added in v0.4.0
WithProfiling adds a middleware that extracts k6 labels from the baggage and adds them to the context.
func (*Server) WithPrometheus ¶
WithPrometheus adds a /metrics endpoint and instrument subsequently enabled groups with general http-level metrics.
func (*Server) WithRecommendations ¶
func (s *Server) WithRecommendations(catalogClient CatalogClient, copyClient CopyClient) *Server
WithRecommendations enables the recommendations endpoint in this Server. This endpoint is stateless and thus needs the URLs for the Catalog and Copy services.
func (*Server) WithTraceInstaller ¶ added in v0.5.0
func (s *Server) WithTraceInstaller(ti *TraceInstaller) *Server
WithTracing registers the specified TracerProvider within the Server. Subsequent handlers can use s.trace to create more detailed traces than what it would be possible if we applied the same tracing middleware to the whole server.
type TraceInstaller ¶ added in v0.5.0
type TraceInstaller struct {
// contains filtered or unexported fields
}
TraceInstaller installs tracing middleware into a chi router. An uninitialized TraceInstaller behaves like a noop, where calls to Install have no effect.
func NewTraceInstaller ¶ added in v0.5.0
func NewTraceInstaller(ctx context.Context, endpointUrl string) (*TraceInstaller, error)
NewTraceInstaller creates a new initialized TraceInstaller that will set up traces and push them.
func (*TraceInstaller) Insecure ¶ added in v0.5.0
func (t *TraceInstaller) Insecure()
Insecure instructs the TraceInstaller to trust incoming trace IDs.