feat: add debug endpoint for single tailnet (#10485)

This commit is contained in:
Colin Adler 2023-11-13 17:14:12 -06:00 committed by GitHub
parent f4de2b64ec
commit e0afee1b85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 88 additions and 1 deletions

22
coderd/apidoc/docs.go generated
View File

@ -422,6 +422,28 @@ const docTemplate = `{
}
}
},
"/debug/tailnet": {
"get": {
"security": [
{
"CoderSessionToken": []
}
],
"produces": [
"text/html"
],
"tags": [
"Debug"
],
"summary": "Debug Info Tailnet",
"operationId": "debug-info-tailnet",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/debug/ws": {
"get": {
"security": [

View File

@ -358,6 +358,24 @@
}
}
},
"/debug/tailnet": {
"get": {
"security": [
{
"CoderSessionToken": []
}
],
"produces": ["text/html"],
"tags": ["Debug"],
"summary": "Debug Info Tailnet",
"operationId": "debug-info-tailnet",
"responses": {
"200": {
"description": "OK"
}
}
}
},
"/debug/ws": {
"get": {
"security": [

View File

@ -955,6 +955,7 @@ func New(options *Options) *API {
)
r.Get("/coordinator", api.debugCoordinator)
r.Get("/tailnet", api.debugTailnet)
r.Get("/health", api.debugDeploymentHealth)
r.Get("/ws", (&healthcheck.WebsocketEchoServer{}).ServeHTTP)
})

View File

@ -352,7 +352,8 @@ func assertProduce(t *testing.T, comment SwaggerComment) {
(comment.router == "/workspaceagents/me/startup" && comment.method == "post") ||
(comment.router == "/workspaceagents/me/startup/logs" && comment.method == "patch") ||
(comment.router == "/licenses/{id}" && comment.method == "delete") ||
(comment.router == "/debug/coordinator" && comment.method == "get") {
(comment.router == "/debug/coordinator" && comment.method == "get") ||
(comment.router == "/debug/tailnet" && comment.method == "get") {
return // Exception: HTTP 200 is returned without response entity
}

View File

@ -23,6 +23,17 @@ func (api *API) debugCoordinator(rw http.ResponseWriter, r *http.Request) {
(*api.TailnetCoordinator.Load()).ServeHTTPDebug(rw, r)
}
// @Summary Debug Info Tailnet
// @ID debug-info-tailnet
// @Security CoderSessionToken
// @Produce text/html
// @Tags Debug
// @Success 200
// @Router /debug/tailnet [get]
func (api *API) debugTailnet(rw http.ResponseWriter, r *http.Request) {
api.agentProvider.ServeHTTPDebug(rw, r)
}
// @Summary Debug Info Deployment Health
// @ID debug-info-deployment-health
// @Security CoderSessionToken

View File

@ -21,6 +21,7 @@ import (
"cdr.dev/slog"
"github.com/coder/coder/v2/coderd/tracing"
"github.com/coder/coder/v2/coderd/workspaceapps"
"github.com/coder/coder/v2/coderd/wsconncache"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/site"
@ -38,6 +39,8 @@ func init() {
}
}
var _ workspaceapps.AgentProvider = (*ServerTailnet)(nil)
// NewServerTailnet creates a new tailnet intended for use by coderd. It
// automatically falls back to wsconncache if a legacy agent is encountered.
func NewServerTailnet(
@ -419,6 +422,10 @@ func (s *ServerTailnet) DialAgentNetConn(ctx context.Context, agentID uuid.UUID,
}}, err
}
func (s *ServerTailnet) ServeHTTPDebug(w http.ResponseWriter, r *http.Request) {
s.conn.MagicsockServeHTTPDebug(w, r)
}
type netConnCloser struct {
net.Conn
close func()

View File

@ -74,6 +74,8 @@ type AgentProvider interface {
// func.
AgentConn(ctx context.Context, agentID uuid.UUID) (_ *codersdk.WorkspaceAgentConn, release func(), _ error)
ServeHTTPDebug(w http.ResponseWriter, r *http.Request)
Close() error
}

View File

@ -16,10 +16,13 @@ import (
"golang.org/x/sync/singleflight"
"golang.org/x/xerrors"
"github.com/coder/coder/v2/coderd/workspaceapps"
"github.com/coder/coder/v2/codersdk"
"github.com/coder/coder/v2/site"
)
var _ workspaceapps.AgentProvider = (*AgentProvider)(nil)
type AgentProvider struct {
Cache *Cache
}
@ -56,6 +59,8 @@ func (a *AgentProvider) ReverseProxy(targetURL *url.URL, dashboardURL *url.URL,
return proxy, release, nil
}
func (*AgentProvider) ServeHTTPDebug(http.ResponseWriter, *http.Request) {}
func (a *AgentProvider) Close() error {
return a.Cache.Close()
}

20
docs/api/debug.md generated
View File

@ -241,3 +241,23 @@ curl -X GET http://coder-server:8080/api/v2/debug/health \
| 200 | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK | [healthcheck.Report](schemas.md#healthcheckreport) |
To perform this operation, you must be authenticated. [Learn more](authentication.md).
## Debug Info Tailnet
### Code samples
```shell
# Example request using curl
curl -X GET http://coder-server:8080/api/v2/debug/tailnet \
-H 'Coder-Session-Token: API_KEY'
```
`GET /debug/tailnet`
### Responses
| Status | Meaning | Description | Schema |
| ------ | ------------------------------------------------------- | ----------- | ------ |
| 200 | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK | |
To perform this operation, you must be authenticated. [Learn more](authentication.md).