mirror of
https://github.com/coder/coder.git
synced 2025-07-12 00:14:10 +00:00
feat: use v2 API for agent metadata updates (#12281)
Switches the agent to report metadata over the v2 API. Fixes #10534
This commit is contained in:
@ -85,6 +85,9 @@ type PostMetadataRequest struct {
|
||||
// performance.
|
||||
type PostMetadataRequestDeprecated = codersdk.WorkspaceAgentMetadataResult
|
||||
|
||||
// PostMetadata posts agent metadata to the Coder server.
|
||||
//
|
||||
// Deprecated: use BatchUpdateMetadata on the agent dRPC API instead
|
||||
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 {
|
||||
|
@ -112,6 +112,31 @@ func ProtoFromMetadataDescription(d codersdk.WorkspaceAgentMetadataDescription)
|
||||
}
|
||||
}
|
||||
|
||||
func ProtoFromMetadataResult(r codersdk.WorkspaceAgentMetadataResult) *proto.WorkspaceAgentMetadata_Result {
|
||||
return &proto.WorkspaceAgentMetadata_Result{
|
||||
CollectedAt: timestamppb.New(r.CollectedAt),
|
||||
Age: r.Age,
|
||||
Value: r.Value,
|
||||
Error: r.Error,
|
||||
}
|
||||
}
|
||||
|
||||
func MetadataResultFromProto(r *proto.WorkspaceAgentMetadata_Result) codersdk.WorkspaceAgentMetadataResult {
|
||||
return codersdk.WorkspaceAgentMetadataResult{
|
||||
CollectedAt: r.GetCollectedAt().AsTime(),
|
||||
Age: r.GetAge(),
|
||||
Value: r.GetValue(),
|
||||
Error: r.GetError(),
|
||||
}
|
||||
}
|
||||
|
||||
func MetadataFromProto(m *proto.Metadata) Metadata {
|
||||
return Metadata{
|
||||
Key: m.GetKey(),
|
||||
WorkspaceAgentMetadataResult: MetadataResultFromProto(m.GetResult()),
|
||||
}
|
||||
}
|
||||
|
||||
func AgentScriptsFromProto(protoScripts []*proto.WorkspaceAgentScript) ([]codersdk.WorkspaceAgentScript, error) {
|
||||
ret := make([]codersdk.WorkspaceAgentScript, len(protoScripts))
|
||||
for i, protoScript := range protoScripts {
|
||||
|
@ -6,6 +6,7 @@ import (
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
"tailscale.com/tailcfg"
|
||||
|
||||
"github.com/coder/coder/v2/agent/proto"
|
||||
@ -176,3 +177,42 @@ func TestProtoFromLifecycle(t *testing.T) {
|
||||
require.Equal(t, s, state)
|
||||
}
|
||||
}
|
||||
|
||||
func TestProtoFromMetadataResult(t *testing.T) {
|
||||
t.Parallel()
|
||||
now := dbtime.Now()
|
||||
result := codersdk.WorkspaceAgentMetadataResult{
|
||||
CollectedAt: now,
|
||||
Age: 4,
|
||||
Value: "lemons",
|
||||
Error: "rats",
|
||||
}
|
||||
pr := agentsdk.ProtoFromMetadataResult(result)
|
||||
require.NotNil(t, pr)
|
||||
require.Equal(t, now, pr.CollectedAt.AsTime())
|
||||
require.EqualValues(t, 4, pr.Age)
|
||||
require.Equal(t, "lemons", pr.Value)
|
||||
require.Equal(t, "rats", pr.Error)
|
||||
result2 := agentsdk.MetadataResultFromProto(pr)
|
||||
require.Equal(t, result, result2)
|
||||
}
|
||||
|
||||
func TestMetadataFromProto(t *testing.T) {
|
||||
t.Parallel()
|
||||
now := dbtime.Now()
|
||||
pmd := &proto.Metadata{
|
||||
Key: "a flat",
|
||||
Result: &proto.WorkspaceAgentMetadata_Result{
|
||||
CollectedAt: timestamppb.New(now),
|
||||
Age: 88,
|
||||
Value: "lemons",
|
||||
Error: "rats",
|
||||
},
|
||||
}
|
||||
smd := agentsdk.MetadataFromProto(pmd)
|
||||
require.Equal(t, "a flat", smd.Key)
|
||||
require.Equal(t, now, smd.CollectedAt)
|
||||
require.EqualValues(t, 88, smd.Age)
|
||||
require.Equal(t, "lemons", smd.Value)
|
||||
require.Equal(t, "rats", smd.Error)
|
||||
}
|
||||
|
Reference in New Issue
Block a user