mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: Workspace Proxy picker show latency to each proxy (#7486)
* chore: Add cors to workspace proxies to allow for latency checks * Add latency check to wsproxy Use performance API timings. - Fix cors and timing headers - Accept custom headers
This commit is contained in:
@@ -19,6 +19,7 @@ import (
|
||||
|
||||
"cdr.dev/slog"
|
||||
"github.com/coder/coder/buildinfo"
|
||||
"github.com/coder/coder/coderd"
|
||||
"github.com/coder/coder/coderd/httpapi"
|
||||
"github.com/coder/coder/coderd/httpmw"
|
||||
"github.com/coder/coder/coderd/tracing"
|
||||
@@ -186,6 +187,21 @@ func New(ctx context.Context, opts *Options) (*Server, error) {
|
||||
SecureAuthCookie: opts.SecureAuthCookie,
|
||||
}
|
||||
|
||||
// The primary coderd dashboard needs to make some GET requests to
|
||||
// the workspace proxies to check latency.
|
||||
corsMW := cors.Handler(cors.Options{
|
||||
AllowedOrigins: []string{
|
||||
// Allow the dashboard to make requests to the proxy for latency
|
||||
// checks.
|
||||
opts.DashboardURL.String(),
|
||||
},
|
||||
// Only allow GET requests for latency checks.
|
||||
AllowedMethods: []string{http.MethodOptions, http.MethodGet},
|
||||
AllowedHeaders: []string{"Accept", "Content-Type", "X-LATENCY-CHECK", "X-CSRF-TOKEN"},
|
||||
// Do not send any cookies
|
||||
AllowCredentials: false,
|
||||
})
|
||||
|
||||
// Routes
|
||||
apiRateLimiter := httpmw.RateLimit(opts.APIRateLimit, time.Minute)
|
||||
// Persistent middlewares to all routes
|
||||
@@ -198,20 +214,7 @@ func New(ctx context.Context, opts *Options) (*Server, error) {
|
||||
httpmw.ExtractRealIP(s.Options.RealIPConfig),
|
||||
httpmw.Logger(s.Logger),
|
||||
httpmw.Prometheus(s.PrometheusRegistry),
|
||||
// The primary coderd dashboard needs to make some GET requests to
|
||||
// the workspace proxies to check latency.
|
||||
cors.Handler(cors.Options{
|
||||
AllowedOrigins: []string{
|
||||
// Allow the dashboard to make requests to the proxy for latency
|
||||
// checks.
|
||||
opts.DashboardURL.String(),
|
||||
},
|
||||
// Only allow GET requests for latency checks.
|
||||
AllowedMethods: []string{http.MethodGet},
|
||||
AllowedHeaders: []string{"Accept", "Content-Type"},
|
||||
// Do not send any cookies
|
||||
AllowCredentials: false,
|
||||
}),
|
||||
corsMW,
|
||||
|
||||
// HandleSubdomain is a middleware that handles all requests to the
|
||||
// subdomain-based workspace apps.
|
||||
@@ -260,6 +263,13 @@ func New(ctx context.Context, opts *Options) (*Server, error) {
|
||||
})
|
||||
})
|
||||
|
||||
// See coderd/coderd.go for why we need this.
|
||||
rootRouter := chi.NewRouter()
|
||||
// Make sure to add the cors middleware to the latency check route.
|
||||
rootRouter.Get("/latency-check", corsMW(coderd.LatencyCheck(s.DashboardURL, s.AppServer.AccessURL)).ServeHTTP)
|
||||
rootRouter.Mount("/", r)
|
||||
s.Handler = rootRouter
|
||||
|
||||
return s, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user