mirror of
https://github.com/coder/coder.git
synced 2026-09-21 20:51:01 +08:00
feat(codersdk/agentsdk): use new agent metadata batch endpoint (#10224)
Part of #9782
This commit is contained in:
+9
-2
@@ -90,7 +90,7 @@ type Client interface {
|
||||
PostLifecycle(ctx context.Context, state agentsdk.PostLifecycleRequest) error
|
||||
PostAppHealth(ctx context.Context, req agentsdk.PostAppHealthsRequest) error
|
||||
PostStartup(ctx context.Context, req agentsdk.PostStartupRequest) error
|
||||
PostMetadata(ctx context.Context, key string, req agentsdk.PostMetadataRequestDeprecated) error
|
||||
PostMetadata(ctx context.Context, req agentsdk.PostMetadataRequest) error
|
||||
PatchLogs(ctx context.Context, req agentsdk.PatchLogs) error
|
||||
GetServiceBanner(ctx context.Context) (codersdk.ServiceBannerConfig, error)
|
||||
}
|
||||
@@ -380,7 +380,14 @@ func (a *agent) reportMetadataLoop(ctx context.Context) {
|
||||
flight := trySingleflight{m: map[string]struct{}{}}
|
||||
|
||||
postMetadata := func(mr metadataResultAndKey) {
|
||||
err := a.client.PostMetadata(ctx, mr.key, *mr.result)
|
||||
err := a.client.PostMetadata(ctx, agentsdk.PostMetadataRequest{
|
||||
Metadata: []agentsdk.Metadata{
|
||||
{
|
||||
Key: mr.key,
|
||||
WorkspaceAgentMetadataResult: *mr.result,
|
||||
},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
a.logger.Error(ctx, "agent failed to report metadata", slog.Error(err))
|
||||
}
|
||||
|
||||
+2
-2
@@ -1079,7 +1079,7 @@ func TestAgent_Metadata(t *testing.T) {
|
||||
opts.ReportMetadataInterval = 100 * time.Millisecond
|
||||
})
|
||||
|
||||
var gotMd map[string]agentsdk.PostMetadataRequestDeprecated
|
||||
var gotMd map[string]agentsdk.Metadata
|
||||
require.Eventually(t, func() bool {
|
||||
gotMd = client.GetMetadata()
|
||||
return len(gotMd) == 1
|
||||
@@ -1112,7 +1112,7 @@ func TestAgent_Metadata(t *testing.T) {
|
||||
opts.ReportMetadataInterval = testutil.IntervalFast
|
||||
})
|
||||
|
||||
var gotMd map[string]agentsdk.PostMetadataRequestDeprecated
|
||||
var gotMd map[string]agentsdk.Metadata
|
||||
require.Eventually(t, func() bool {
|
||||
gotMd = client.GetMetadata()
|
||||
return len(gotMd) == 1
|
||||
|
||||
@@ -45,7 +45,7 @@ type Client struct {
|
||||
logger slog.Logger
|
||||
agentID uuid.UUID
|
||||
manifest agentsdk.Manifest
|
||||
metadata map[string]agentsdk.PostMetadataRequestDeprecated
|
||||
metadata map[string]agentsdk.Metadata
|
||||
statsChan chan *agentsdk.Stats
|
||||
coordinator tailnet.Coordinator
|
||||
LastWorkspaceAgent func()
|
||||
@@ -136,20 +136,22 @@ func (c *Client) GetStartup() agentsdk.PostStartupRequest {
|
||||
return c.startup
|
||||
}
|
||||
|
||||
func (c *Client) GetMetadata() map[string]agentsdk.PostMetadataRequestDeprecated {
|
||||
func (c *Client) GetMetadata() map[string]agentsdk.Metadata {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
return maps.Clone(c.metadata)
|
||||
}
|
||||
|
||||
func (c *Client) PostMetadata(ctx context.Context, key string, req agentsdk.PostMetadataRequestDeprecated) error {
|
||||
func (c *Client) PostMetadata(ctx context.Context, req agentsdk.PostMetadataRequest) error {
|
||||
c.mu.Lock()
|
||||
defer c.mu.Unlock()
|
||||
if c.metadata == nil {
|
||||
c.metadata = make(map[string]agentsdk.PostMetadataRequestDeprecated)
|
||||
c.metadata = make(map[string]agentsdk.Metadata)
|
||||
}
|
||||
for _, md := range req.Metadata {
|
||||
c.metadata[md.Key] = md
|
||||
c.logger.Debug(ctx, "post metadata", slog.F("key", md.Key), slog.F("md", md))
|
||||
}
|
||||
c.metadata[key] = req
|
||||
c.logger.Debug(ctx, "post metadata", slog.F("key", key), slog.F("req", req))
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -1217,8 +1217,15 @@ func TestWorkspaceAgent_Metadata(t *testing.T) {
|
||||
require.EqualValues(t, 3, manifest.Metadata[0].Timeout)
|
||||
|
||||
post := func(key string, mr codersdk.WorkspaceAgentMetadataResult) {
|
||||
err := agentClient.PostMetadata(ctx, key, mr)
|
||||
require.NoError(t, err, "post metadata", t)
|
||||
err := agentClient.PostMetadata(ctx, agentsdk.PostMetadataRequest{
|
||||
Metadata: []agentsdk.Metadata{
|
||||
{
|
||||
Key: key,
|
||||
WorkspaceAgentMetadataResult: mr,
|
||||
},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err, "post metadata: %s, %#v", key, mr)
|
||||
}
|
||||
|
||||
workspace, err = client.Workspace(ctx, workspace.ID)
|
||||
@@ -1302,8 +1309,7 @@ func TestWorkspaceAgent_Metadata(t *testing.T) {
|
||||
require.NotEmpty(t, got.Result.Error)
|
||||
|
||||
unknownKeyMetadata := wantMetadata1
|
||||
err = agentClient.PostMetadata(ctx, "unknown", unknownKeyMetadata)
|
||||
require.NoError(t, err)
|
||||
post("unknown", unknownKeyMetadata)
|
||||
}
|
||||
|
||||
func TestWorkspaceAgent_Startup(t *testing.T) {
|
||||
|
||||
@@ -267,7 +267,7 @@ func (*client) PostAppHealth(_ context.Context, _ agentsdk.PostAppHealthsRequest
|
||||
return nil
|
||||
}
|
||||
|
||||
func (*client) PostMetadata(_ context.Context, _ string, _ agentsdk.PostMetadataRequestDeprecated) error {
|
||||
func (*client) PostMetadata(_ context.Context, _ agentsdk.PostMetadataRequest) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -82,8 +82,8 @@ type PostMetadataRequest struct {
|
||||
// performance.
|
||||
type PostMetadataRequestDeprecated = codersdk.WorkspaceAgentMetadataResult
|
||||
|
||||
func (c *Client) PostMetadata(ctx context.Context, key string, req PostMetadataRequestDeprecated) error {
|
||||
res, err := c.SDK.Request(ctx, http.MethodPost, "/api/v2/workspaceagents/me/metadata/"+key, req)
|
||||
func (c *Client) PostMetadata(ctx context.Context, req PostMetadataRequest) error {
|
||||
res, err := c.SDK.Request(ctx, http.MethodPost, "/api/v2/workspaceagents/me/metadata", req)
|
||||
if err != nil {
|
||||
return xerrors.Errorf("execute request: %w", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user