Documentation
¶
Overview ¶
Package handler provides a client and handlers for responding to locate requests.
Index ¶
- type Client
- func (c *Client) Heartbeat(rw http.ResponseWriter, req *http.Request)
- func (c *Client) HeartbeatJWT(rw http.ResponseWriter, req *http.Request)
- func (c *Client) Live(rw http.ResponseWriter, req *http.Request)
- func (c *Client) Monitoring(rw http.ResponseWriter, req *http.Request)
- func (c *Client) Nearest(rw http.ResponseWriter, req *http.Request)
- func (c *Client) PriorityNearest(rw http.ResponseWriter, req *http.Request)
- func (c *Client) Prometheus(rw http.ResponseWriter, req *http.Request)
- func (c *Client) Ready(rw http.ResponseWriter, req *http.Request)
- func (c *Client) Registrations(rw http.ResponseWriter, req *http.Request)
- func (c *Client) UpdatePrometheusForMachine(ctx context.Context, hostname string) error
- type ClientLocator
- type Limiter
- type LocatorV2
- type PrometheusClient
- type Signer
- type TierLimiter
- type Verifier
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
Signer
LocatorV2
ClientLocator
PrometheusClient
// contains filtered or unexported fields
}
Client handles HTTP requests for the locate service, including nearest server lookups, heartbeat processing, and monitoring endpoints. It maintains dependencies for geolocation, rate limiting, access token signing, and metrics collection. TODO: This should probably be a Handler, not a Client.
func NewClient ¶
func NewClient(project string, private Signer, locatorV2 LocatorV2, client ClientLocator, promClient PrometheusClient, lmts limits.Agents, tierLmts limits.TierLimits, limiter TierLimiter, earlyExitClients []string, jwtVerifier Verifier) *Client
NewClient creates a new client.
func (*Client) Heartbeat ¶
func (c *Client) Heartbeat(rw http.ResponseWriter, req *http.Request)
Heartbeat implements /v2/platform/heartbeat requests. It starts a new persistent connection and a new goroutine to read incoming messages. This endpoint is protected by API key authentication.
func (*Client) HeartbeatJWT ¶ added in v0.18.0
func (c *Client) HeartbeatJWT(rw http.ResponseWriter, req *http.Request)
HeartbeatJWT implements /v2/platform/heartbeat-jwt requests. It starts a new persistent connection and a new goroutine to read incoming messages. This endpoint is protected by JWT authentication with organization validation.
func (*Client) Live ¶ added in v0.14.10
func (c *Client) Live(rw http.ResponseWriter, req *http.Request)
Live is a minimal handler to indicate that the server is operating at all.
func (*Client) Monitoring ¶
func (c *Client) Monitoring(rw http.ResponseWriter, req *http.Request)
Monitoring issues access tokens for end to end monitoring requests.
func (*Client) Nearest ¶ added in v0.11.0
func (c *Client) Nearest(rw http.ResponseWriter, req *http.Request)
Nearest uses an implementation of the LocatorV2 interface to look up nearest servers.
func (*Client) PriorityNearest ¶ added in v0.19.0
func (c *Client) PriorityNearest(rw http.ResponseWriter, req *http.Request)
PriorityNearest handles requests to /v2/priority/nearest with tier-based rate limiting. It requires a valid integration JWT with an int_id claim. Requests without valid credentials receive a 401 Unauthorized response.
func (*Client) Prometheus ¶ added in v0.13.0
func (c *Client) Prometheus(rw http.ResponseWriter, req *http.Request)
Prometheus is a handler that collects Prometheus health signals.
func (*Client) Ready ¶ added in v0.14.10
func (c *Client) Ready(rw http.ResponseWriter, req *http.Request)
Ready reports whether the server is working as expected and ready to serve requests.
func (*Client) Registrations ¶ added in v0.16.0
func (c *Client) Registrations(rw http.ResponseWriter, req *http.Request)
Registrations returns information about registered machines. There are 3 supported query parameters:
* format - defines the format of the returned JSON * org - limits results to only records for the given organization * exp - limits results to only records for the given experiment (e.g., ndt)
The "org" and "exp" query parameters are currently only supported by the default or "machines" format.
type ClientLocator ¶ added in v0.7.0
ClientLocator defines the interface for looking up the client geolocation.
type Limiter ¶ added in v0.17.1
type Limiter interface {
IsLimited(ip, ua string) (limits.LimitStatus, error)
}
type LocatorV2 ¶ added in v0.11.0
type LocatorV2 interface {
Nearest(service string, lat, lon float64, opts *heartbeat.NearestOptions) (*heartbeat.TargetInfo, error)
heartbeat.StatusTracker
}
LocatorV2 defines how the Nearest handler requests machines nearest to the client.
type PrometheusClient ¶ added in v0.13.0
type PrometheusClient interface {
Query(ctx context.Context, query string, ts time.Time, opts ...prom.Option) (model.Value, prom.Warnings, error)
}
PrometheusClient defines the interface to query Prometheus.
type TierLimiter ¶ added in v0.19.0
type TierLimiter interface {
Limiter
IsLimitedWithTier(org, ip string, tierConfig limits.LimitConfig) (limits.LimitStatus, error)
}
TierLimiter extends Limiter with tier-based limits for priority endpoints.
type Verifier ¶ added in v0.19.0
type Verifier interface {
// ExtractClaims extracts and optionally validates JWT claims from the request.
// Returns the claims as a map, or an error if extraction/validation fails.
ExtractClaims(req *http.Request) (map[string]interface{}, error)
// Mode returns the name of the verification mode (for logging/debugging).
Mode() string
}
Verifier defines the interface for extracting JWT claims from HTTP requests. Different implementations support different verification modes.