Skip to content

Commit e904e39

Browse files
committed
Merge branch 'size-services' of https://github.com/metal-stack/cli into size-services
2 parents 5daa557 + 51efe0f commit e904e39

7 files changed

Lines changed: 159 additions & 4 deletions

File tree

cmd/admin/v2/commands.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ func AddCmds(cmd *cobra.Command, c *config.Config) {
2323
adminCmd.AddCommand(newProjectCmd(c))
2424
adminCmd.AddCommand(newVPNCmd(c))
2525
adminCmd.AddCommand(newMachineCmd(c))
26+
adminCmd.AddCommand(newTaskCmd(c))
2627

2728
cmd.AddCommand(adminCmd)
2829
}

cmd/admin/v2/task.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package v2
2+
3+
import (
4+
"fmt"
5+
6+
adminv2 "github.com/metal-stack/api/go/metalstack/admin/v2"
7+
"github.com/metal-stack/cli/cmd/config"
8+
"github.com/metal-stack/metal-lib/pkg/genericcli"
9+
"github.com/metal-stack/metal-lib/pkg/genericcli/printers"
10+
"github.com/spf13/cobra"
11+
"github.com/spf13/viper"
12+
)
13+
14+
type task struct {
15+
c *config.Config
16+
}
17+
18+
func newTaskCmd(c *config.Config) *cobra.Command {
19+
w := &task{
20+
c: c,
21+
}
22+
23+
cmdsConfig := &genericcli.CmdsConfig[any, any, *adminv2.TaskInfo]{
24+
BinaryName: config.BinaryName,
25+
GenericCLI: genericcli.NewGenericCLI(w).WithFS(c.Fs),
26+
Singular: "task",
27+
Plural: "tasks",
28+
Description: "get task insights",
29+
DescribePrinter: func() printers.Printer { return c.DescribePrinter },
30+
ListPrinter: func() printers.Printer { return c.ListPrinter },
31+
DescribeCmdMutateFn: func(cmd *cobra.Command) {
32+
cmd.Flags().String("queue", "default", "the queue for which tasks should be described")
33+
},
34+
ListCmdMutateFn: func(cmd *cobra.Command) {
35+
cmd.Flags().String("queue", "default", "the queue for which tasks should be listed")
36+
},
37+
DeleteCmdMutateFn: func(cmd *cobra.Command) {
38+
cmd.Flags().String("queue", "default", "the queue of the task which should be delete")
39+
},
40+
OnlyCmds: genericcli.OnlyCmds(genericcli.ListCmd, genericcli.DescribeCmd, genericcli.DeleteCmd),
41+
}
42+
43+
return genericcli.NewCmds(cmdsConfig)
44+
}
45+
46+
func (t *task) Get(id string) (*adminv2.TaskInfo, error) {
47+
ctx, cancel := t.c.NewRequestContext()
48+
defer cancel()
49+
50+
req := &adminv2.TaskServiceGetRequest{TaskId: id, Queue: viper.GetString("queue")}
51+
52+
resp, err := t.c.Client.Adminv2().Task().Get(ctx, req)
53+
if err != nil {
54+
return nil, fmt.Errorf("failed to get task: %w", err)
55+
}
56+
57+
return resp.Task, nil
58+
}
59+
func (t *task) List() ([]*adminv2.TaskInfo, error) {
60+
ctx, cancel := t.c.NewRequestContext()
61+
defer cancel()
62+
63+
req := &adminv2.TaskServiceListRequest{Queue: viper.GetString("queue")}
64+
65+
resp, err := t.c.Client.Adminv2().Task().List(ctx, req)
66+
if err != nil {
67+
return nil, fmt.Errorf("failed to list tasks: %w", err)
68+
}
69+
70+
return resp.Tasks, nil
71+
}
72+
73+
func (t *task) Create(rq any) (*adminv2.TaskInfo, error) {
74+
panic("unimplemented")
75+
}
76+
77+
func (t *task) Delete(id string) (*adminv2.TaskInfo, error) {
78+
ctx, cancel := t.c.NewRequestContext()
79+
defer cancel()
80+
81+
req := &adminv2.TaskServiceDeleteRequest{TaskId: id, Queue: viper.GetString("queue")}
82+
83+
_, err := t.c.Client.Adminv2().Task().Delete(ctx, req)
84+
if err != nil {
85+
return nil, fmt.Errorf("failed to get task: %w", err)
86+
}
87+
88+
return nil, nil
89+
}
90+
91+
func (t *task) Convert(r *adminv2.TaskInfo) (string, any, any, error) {
92+
panic("unimplemented")
93+
}
94+
95+
func (t *task) Update(rq any) (*adminv2.TaskInfo, error) {
96+
panic("unimplemented")
97+
}

cmd/admin/v2/vpn.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func (v *vpn) authKey() error {
7070
return err
7171
}
7272

73-
_, _ = fmt.Fprintf(v.c.Out, "authkey: %s ephemeral:%s created at:%s expires at:%s\n", resp.AuthKey, resp.Ephemeral, resp.CreatedAt, resp.ExpiresAt)
73+
_, _ = fmt.Fprintf(v.c.Out, "authkey: %s ephemeral:%t created at:%s expires at:%s\n", resp.AuthKey, resp.Ephemeral, resp.CreatedAt, resp.ExpiresAt)
7474
_, _ = fmt.Fprintf(v.c.Out, "vpn endpoint: %s\n", resp.Address)
7575

7676
return nil

cmd/tableprinters/common.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"strings"
77
"time"
88

9+
adminv2 "github.com/metal-stack/api/go/metalstack/admin/v2"
910
apiv2 "github.com/metal-stack/api/go/metalstack/api/v2"
1011
"github.com/metal-stack/cli/cmd/config"
1112
"github.com/metal-stack/metal-lib/pkg/genericcli/printers"
@@ -82,6 +83,11 @@ func (t *TablePrinter) ToHeaderAndRows(data any, wide bool) ([]string, [][]strin
8283
case []*apiv2.ProjectMember:
8384
return t.ProjectMemberTable(d, wide)
8485

86+
case *adminv2.TaskInfo:
87+
return t.TaskTable(pointer.WrapInSlice(d), wide)
88+
case []*adminv2.TaskInfo:
89+
return t.TaskTable(d, wide)
90+
8591
case *apiv2.Token:
8692
return t.TokenTable(pointer.WrapInSlice(d), wide)
8793
case []*apiv2.Token:

cmd/tableprinters/task.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package tableprinters
2+
3+
import (
4+
"time"
5+
6+
"github.com/google/uuid"
7+
"github.com/metal-stack/api/go/enum"
8+
adminv2 "github.com/metal-stack/api/go/metalstack/admin/v2"
9+
"github.com/metal-stack/metal-lib/pkg/pointer"
10+
)
11+
12+
func (t *TablePrinter) TaskTable(data []*adminv2.TaskInfo, wide bool) ([]string, [][]string, error) {
13+
var (
14+
rows [][]string
15+
)
16+
header := []string{"ID", "Queue", "When", "Type", "State"}
17+
18+
if wide {
19+
header = []string{"ID", "Queue", "When", "Type", "State", "Issued At", "Payload", "Result"}
20+
}
21+
for _, task := range data {
22+
id := task.Id
23+
queue := task.Queue
24+
typeString := task.Type
25+
state, err := enum.GetStringValue(task.State)
26+
if err != nil {
27+
state = pointer.Pointer("unknown")
28+
}
29+
payload := string(task.Payload)
30+
result := string(task.Result)
31+
32+
parsed, err := uuid.Parse(id)
33+
if err != nil {
34+
return nil, nil, err
35+
}
36+
37+
sec, nano := parsed.Time().UnixTime()
38+
issuedAt := time.Unix(sec, nano)
39+
when := humanizeDuration(time.Since(issuedAt))
40+
41+
if wide {
42+
rows = append(rows, []string{id, queue, when, typeString, *state, issuedAt.String(), payload, result})
43+
} else {
44+
rows = append(rows, []string{id, queue, when, typeString, *state})
45+
}
46+
}
47+
48+
t.t.DisableAutoWrap(false)
49+
50+
return header, rows, nil
51+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/dustin/go-humanize v1.0.1
77
github.com/fatih/color v1.18.0
88
github.com/google/go-cmp v0.7.0
9-
github.com/metal-stack/api v0.0.41-0.20260125160643-6b22ee77f479
9+
github.com/metal-stack/api v0.0.41-0.20260127102833-54e4205f59b8
1010
github.com/metal-stack/metal-lib v0.23.5
1111
github.com/metal-stack/v v1.0.3
1212
github.com/spf13/afero v1.15.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE
5959
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
6060
github.com/mattn/go-runewidth v0.0.19 h1:v++JhqYnZuu5jSKrk9RbgF5v4CGUjqRfBm05byFGLdw=
6161
github.com/mattn/go-runewidth v0.0.19/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
62-
github.com/metal-stack/api v0.0.41-0.20260125160643-6b22ee77f479 h1:m5+3w37cOiBJBED1O6mXLsc/D7lrroguTjt+c/0ubmI=
63-
github.com/metal-stack/api v0.0.41-0.20260125160643-6b22ee77f479/go.mod h1:Vim6qn4+WOCYH4iH+XnMpaobYkdZtgplKOSfFK/775w=
62+
github.com/metal-stack/api v0.0.41-0.20260127102833-54e4205f59b8 h1:HlkAthX7+o4WNrJhZgwjRg/EgeyM1RArtBdiKDYNdtA=
63+
github.com/metal-stack/api v0.0.41-0.20260127102833-54e4205f59b8/go.mod h1:Vim6qn4+WOCYH4iH+XnMpaobYkdZtgplKOSfFK/775w=
6464
github.com/metal-stack/metal-lib v0.23.5 h1:ozrkB3DNr3Cqn8nkBvmzc/KKpYqC1j1mv2OVOj8i7Ac=
6565
github.com/metal-stack/metal-lib v0.23.5/go.mod h1:7uyHIrE19dkLwCZyeh2jmd7IEq5pEpzrzUGLoMN1eqY=
6666
github.com/metal-stack/v v1.0.3 h1:Sh2oBlnxrCUD+mVpzfC8HiqL045YWkxs0gpTvkjppqs=

0 commit comments

Comments
 (0)