handler

package
v0.19.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2026 License: Apache-2.0 Imports: 31 Imported by: 0

Documentation

Overview

Package handler provides a client and handlers for responding to locate requests.

Index

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.

func (*Client) UpdatePrometheusForMachine added in v0.15.6

func (c *Client) UpdatePrometheusForMachine(ctx context.Context, hostname string) error

UpdatePrometheusForMachine updates the Prometheus signals for a single machine hostname.

type ClientLocator added in v0.7.0

type ClientLocator interface {
	Locate(req *http.Request) (*clientgeo.Location, error)
}

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 Signer

type Signer interface {
	Sign(cl jwt.Claims) (string, error)
}

Signer defines how access tokens are signed.

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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL