Skip to content

Commit a512746

Browse files
committed
add gok ps — the output is still quite minimal
This command might become useful on its own in the future, but for now mostly demonstrates how to use the gokapi package.
1 parent ed3a455 commit a512746

File tree

4 files changed

+84
-4
lines changed

4 files changed

+84
-4
lines changed

go.mod

+6-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ go 1.24
55
require (
66
github.com/breml/rootcerts v0.2.10
77
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0
8+
github.com/gokrazy/gokapi v0.0.0-20250222080418-e140e9c461d8
89
github.com/gokrazy/internal v0.0.0-20250214203001-b1610a6e7271
910
github.com/gokrazy/updater v0.0.0-20230215172637-813ccc7f21e2
10-
github.com/google/go-cmp v0.5.9
1111
github.com/google/renameio/v2 v2.0.0
1212
github.com/spf13/cobra v1.6.1
1313
github.com/spf13/pflag v1.0.5
@@ -16,4 +16,8 @@ require (
1616
golang.org/x/sys v0.28.0
1717
)
1818

19-
require github.com/inconshreveable/mousetrap v1.1.0 // indirect
19+
require (
20+
github.com/antihax/optional v1.0.0 // indirect
21+
github.com/inconshreveable/mousetrap v1.1.0 // indirect
22+
golang.org/x/oauth2 v0.23.0 // indirect
23+
)

go.sum

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg=
2+
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
13
github.com/breml/rootcerts v0.2.10 h1:UGVZ193UTSUASpGtg6pbDwzOd7XQP+at0Ssg1/2E4h8=
24
github.com/breml/rootcerts v0.2.10/go.mod h1:24FDtzYMpqIeYC7QzaE8VPRQaFZU5TIUDlyk8qwjD88=
35
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
46
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 h1:C7t6eeMaEQVy6e8CarIhscYQlNmw5e3G36y7l7Y21Ao=
57
github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0/go.mod h1:56wL82FO0bfMU5RvfXoIwSOP2ggqqxT+tAfNEIyxuHw=
8+
github.com/gokrazy/gokapi v0.0.0-20250222080418-e140e9c461d8 h1:BvyzTtbpz1GCGD35Z3G/ZR0nK0j3Fh+dRCCso+w3RKE=
9+
github.com/gokrazy/gokapi v0.0.0-20250222080418-e140e9c461d8/go.mod h1:rVItujrJo0NpYZhFR5dYdzLDqMoMCtjEZkdxoCRDo+o=
610
github.com/gokrazy/internal v0.0.0-20250214203001-b1610a6e7271 h1:CG2P/McW77phMh+iUSsGweJd4VwGhGS4UQJ92gV7Ihg=
711
github.com/gokrazy/internal v0.0.0-20250214203001-b1610a6e7271/go.mod h1:vvnvmAv/38qDCHJ9b6Bq7yvUap6DcGtjZWjGuv/RA1k=
812
github.com/gokrazy/updater v0.0.0-20230215172637-813ccc7f21e2 h1:kBY5R1tSf+EYZ+QaSrofLaVJtBqYsVNVBWkdMq3Smcg=
@@ -21,11 +25,11 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
2125
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
2226
golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM=
2327
golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
28+
golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs=
29+
golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
2430
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
2531
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
2632
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
2733
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
28-
golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ=
29-
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
3034
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
3135
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

internal/gok/ps.go

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package gok
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
"os"
8+
9+
"github.com/gokrazy/gokapi"
10+
"github.com/gokrazy/gokapi/ondeviceapi"
11+
"github.com/gokrazy/internal/config"
12+
"github.com/gokrazy/internal/instanceflag"
13+
"github.com/spf13/cobra"
14+
)
15+
16+
// psCmd is gok ps.
17+
var psCmd = &cobra.Command{
18+
GroupID: "runtime",
19+
Use: "ps",
20+
Short: "list processes of a running gokrazy instance",
21+
Long: `gok ps
22+
23+
Examples:
24+
% gok -i scan2drive ps
25+
`,
26+
RunE: func(cmd *cobra.Command, args []string) error {
27+
return psImpl.run(cmd.Context(), args, cmd.OutOrStdout(), cmd.OutOrStderr())
28+
},
29+
}
30+
31+
type psImplConfig struct {
32+
}
33+
34+
var psImpl psImplConfig
35+
36+
func init() {
37+
instanceflag.RegisterPflags(psCmd.Flags())
38+
}
39+
40+
func (r *psImplConfig) run(ctx context.Context, args []string, stdout, stderr io.Writer) error {
41+
cfg, err := config.ApplyInstanceFlag()
42+
if err != nil {
43+
if os.IsNotExist(err) {
44+
// best-effort compatibility for old setups
45+
cfg = config.NewStruct(instanceflag.Instance())
46+
} else {
47+
return err
48+
}
49+
}
50+
51+
acfg, err := gokapi.ConnectRemotely(cfg)
52+
if err != nil {
53+
return err
54+
}
55+
cl := ondeviceapi.NewAPIClient(acfg)
56+
index, resp, err := cl.SuperviseApi.Index(ctx)
57+
if err != nil {
58+
return err
59+
}
60+
_ = resp
61+
fmt.Printf("Host: %s\n", cfg.Hostname)
62+
fmt.Printf("Model: %s\n", index.Model)
63+
fmt.Printf("Build: %s\n", index.BuildTimestamp)
64+
fmt.Printf("Kernel: %s\n", index.Kernel)
65+
fmt.Printf("Services (%d):\n", len(index.Services))
66+
for _, svc := range index.Services {
67+
fmt.Printf(" %s\n", svc.Path)
68+
}
69+
70+
return nil
71+
}

internal/gok/root.go

+1
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,5 @@ func init() {
7676
RootCmd.AddCommand(sbomCmd)
7777
RootCmd.AddCommand(pushCmd)
7878
RootCmd.AddCommand(vmCmd)
79+
RootCmd.AddCommand(psCmd)
7980
}

0 commit comments

Comments
 (0)