From b24e47684367033f20673dcde5b797bf0d2bc152 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Fri, 18 Aug 2023 23:18:05 +0000 Subject: [PATCH] feat(cli): add daily_cost to `coder ls` --- cli/list.go | 16 +++++++++++++++- cli/testdata/coder_list_--help.golden | 2 +- docs/cli/list.md | 2 +- provisionerd/proto/provisionerd.pb.go | 4 ++-- provisionerd/proto/provisionerd_drpc.pb.go | 2 +- provisionerd/provisionerd.go | 2 +- provisionerd/runner/runner.go | 3 +++ provisionersdk/proto/provisioner.pb.go | 4 ++-- provisionersdk/proto/provisioner_drpc.pb.go | 10 +--------- 9 files changed, 27 insertions(+), 18 deletions(-) diff --git a/cli/list.go b/cli/list.go index 4b50ba16a7d34..c1771d5db04b7 100644 --- a/cli/list.go +++ b/cli/list.go @@ -30,6 +30,7 @@ type workspaceListRow struct { Outdated bool `json:"-" table:"outdated"` StartsAt string `json:"-" table:"starts at"` StopsAfter string `json:"-" table:"stops after"` + DailyCost string `json:"-" table:"daily cost"` } func workspaceListRowFromWorkspace(now time.Time, usersByID map[uuid.UUID]codersdk.User, workspace codersdk.Workspace) workspaceListRow { @@ -68,6 +69,7 @@ func workspaceListRowFromWorkspace(now time.Time, usersByID map[uuid.UUID]coders Outdated: workspace.Outdated, StartsAt: autostartDisplay, StopsAfter: autostopDisplay, + DailyCost: strconv.Itoa(int(workspace.LatestBuild.DailyCost)), } } @@ -78,7 +80,19 @@ func (r *RootCmd) list() *clibase.Cmd { searchQuery string displayWorkspaces []workspaceListRow formatter = cliui.NewOutputFormatter( - cliui.TableFormat([]workspaceListRow{}, nil), + cliui.TableFormat( + []workspaceListRow{}, + []string{ + "workspace", + "template", + "status", + "healthy", + "last built", + "outdated", + "starts at", + "stops after", + }, + ), cliui.JSONFormat(), ) ) diff --git a/cli/testdata/coder_list_--help.golden b/cli/testdata/coder_list_--help.golden index a9bb8218ba1c0..e4e6f5dd3524a 100644 --- a/cli/testdata/coder_list_--help.golden +++ b/cli/testdata/coder_list_--help.golden @@ -11,7 +11,7 @@ Aliases: ls -c, --column string-array (default: workspace,template,status,healthy,last built,outdated,starts at,stops after) Columns to display in table output. Available columns: workspace, template, status, healthy, last built, outdated, starts at, stops - after. + after, daily cost. -o, --output string (default: table) Output format. Available formats: table, json. diff --git a/docs/cli/list.md b/docs/cli/list.md index 7a1aa0defb052..b840a32acb151 100644 --- a/docs/cli/list.md +++ b/docs/cli/list.md @@ -31,7 +31,7 @@ Specifies whether all workspaces will be listed or not. | Type | string-array | | Default | workspace,template,status,healthy,last built,outdated,starts at,stops after | -Columns to display in table output. Available columns: workspace, template, status, healthy, last built, outdated, starts at, stops after. +Columns to display in table output. Available columns: workspace, template, status, healthy, last built, outdated, starts at, stops after, daily cost. ### -o, --output diff --git a/provisionerd/proto/provisionerd.pb.go b/provisionerd/proto/provisionerd.pb.go index d7db84d69813e..0a3d897150913 100644 --- a/provisionerd/proto/provisionerd.pb.go +++ b/provisionerd/proto/provisionerd.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v4.23.3 +// protoc-gen-go v1.31.0 +// protoc v3.21.12 // source: provisionerd/proto/provisionerd.proto package proto diff --git a/provisionerd/proto/provisionerd_drpc.pb.go b/provisionerd/proto/provisionerd_drpc.pb.go index ed3155fb21eaa..058af595809b8 100644 --- a/provisionerd/proto/provisionerd_drpc.pb.go +++ b/provisionerd/proto/provisionerd_drpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-drpc. DO NOT EDIT. -// protoc-gen-go-drpc version: v0.0.33 +// protoc-gen-go-drpc version: (devel) // source: provisionerd/proto/provisionerd.proto package proto diff --git a/provisionerd/provisionerd.go b/provisionerd/provisionerd.go index 79de066596198..e6c719a4174ba 100644 --- a/provisionerd/provisionerd.go +++ b/provisionerd/provisionerd.go @@ -404,7 +404,7 @@ func (p *Server) acquireJob(ctx context.Context) { runner.Options{ Updater: p, QuotaCommitter: p, - Logger: p.opts.Logger, + Logger: p.opts.Logger.Named("runner"), Filesystem: p.opts.Filesystem, WorkDirectory: p.opts.WorkDirectory, Provisioner: provisioner, diff --git a/provisionerd/runner/runner.go b/provisionerd/runner/runner.go index e074800b03d36..63a629b7e5c2e 100644 --- a/provisionerd/runner/runner.go +++ b/provisionerd/runner/runner.go @@ -964,6 +964,9 @@ func (r *Runner) buildWorkspace(ctx context.Context, stage string, req *sdkproto } func (r *Runner) commitQuota(ctx context.Context, resources []*sdkproto.Resource) *proto.FailedJob { + r.logger.Debug(ctx, "committing quota", + slog.F("resources", resources), + ) cost := sumDailyCost(resources) if cost == 0 { return nil diff --git a/provisionersdk/proto/provisioner.pb.go b/provisionersdk/proto/provisioner.pb.go index 24281d4c252db..52f60cede1d51 100644 --- a/provisionersdk/proto/provisioner.pb.go +++ b/provisionersdk/proto/provisioner.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v4.23.3 +// protoc-gen-go v1.31.0 +// protoc v3.21.12 // source: provisionersdk/proto/provisioner.proto package proto diff --git a/provisionersdk/proto/provisioner_drpc.pb.go b/provisionersdk/proto/provisioner_drpc.pb.go index d8b40060cd376..d307402447c78 100644 --- a/provisionersdk/proto/provisioner_drpc.pb.go +++ b/provisionersdk/proto/provisioner_drpc.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-go-drpc. DO NOT EDIT. -// protoc-gen-go-drpc version: v0.0.33 +// protoc-gen-go-drpc version: (devel) // source: provisionersdk/proto/provisioner.proto package proto @@ -76,10 +76,6 @@ type drpcProvisioner_ParseClient struct { drpc.Stream } -func (x *drpcProvisioner_ParseClient) GetStream() drpc.Stream { - return x.Stream -} - func (x *drpcProvisioner_ParseClient) Recv() (*Parse_Response, error) { m := new(Parse_Response) if err := x.MsgRecv(m, drpcEncoding_File_provisionersdk_proto_provisioner_proto{}); err != nil { @@ -111,10 +107,6 @@ type drpcProvisioner_ProvisionClient struct { drpc.Stream } -func (x *drpcProvisioner_ProvisionClient) GetStream() drpc.Stream { - return x.Stream -} - func (x *drpcProvisioner_ProvisionClient) Send(m *Provision_Request) error { return x.MsgSend(m, drpcEncoding_File_provisionersdk_proto_provisioner_proto{}) }