@@ -3,10 +3,24 @@ package cmd
33import (
44 "encoding/json"
55 "fmt"
6+ "time"
67
78 "github.com/spf13/cobra"
89)
910
11+ var (
12+ metricsFrom string
13+ metricsTo string
14+ meterWorkloadID string
15+ meterNodeID string
16+ meterType string
17+ meterLimit int
18+ eventsType string
19+ eventsWorkloadID string
20+ eventsNodeID string
21+ eventsLimit int
22+ )
23+
1024var metricsCmd = & cobra.Command {
1125 Use : "metrics" ,
1226 Short : "View Persys Compute metrics" ,
@@ -23,6 +37,80 @@ var metricsCmd = &cobra.Command{
2337 },
2438}
2539
40+ var meterCmd = & cobra.Command {
41+ Use : "meter" ,
42+ Short : "Inspect workload usage via the gateway meter API" ,
43+ }
44+
45+ var meterSummaryCmd = & cobra.Command {
46+ Use : "summary [workload-id]" ,
47+ Short : "Get usage summary for a workload" ,
48+ Args : cobra .ExactArgs (1 ),
49+ Run : func (cmd * cobra.Command , args []string ) {
50+ c , _ , err := newClientWithTrace ()
51+ cobra .CheckErr (err )
52+ defer c .Close ()
53+ from , err := parseTimeFlag (metricsFrom )
54+ cobra .CheckErr (err )
55+ to , err := parseTimeFlag (metricsTo )
56+ cobra .CheckErr (err )
57+ resp , err := c .MeterSummary (args [0 ], from , to )
58+ cobra .CheckErr (err )
59+ printJSON (resp )
60+ },
61+ }
62+
63+ var meterListCmd = & cobra.Command {
64+ Use : "list" ,
65+ Short : "List current workload usage samples" ,
66+ Run : func (cmd * cobra.Command , args []string ) {
67+ c , _ , err := newClientWithTrace ()
68+ cobra .CheckErr (err )
69+ defer c .Close ()
70+ resp , err := c .MeterListWorkloads (meterType )
71+ cobra .CheckErr (err )
72+ printJSON (resp )
73+ },
74+ }
75+
76+ var eventsCmd = & cobra.Command {
77+ Use : "events" ,
78+ Short : "Watch scheduler events through the gateway SSE endpoint" ,
79+ }
80+
81+ var eventsWatchCmd = & cobra.Command {
82+ Use : "watch" ,
83+ Short : "Stream scheduler events matching optional filters" ,
84+ Run : func (cmd * cobra.Command , args []string ) {
85+ c , _ , err := newClientWithTrace ()
86+ cobra .CheckErr (err )
87+ defer c .Close ()
88+ resp , err := c .WatchGatewayEvents (eventsType , eventsWorkloadID , eventsNodeID , eventsLimit )
89+ cobra .CheckErr (err )
90+ printJSON (resp )
91+ },
92+ }
93+
94+ func parseTimeFlag (raw string ) (time.Time , error ) {
95+ if raw == "" {
96+ return time.Time {}, nil
97+ }
98+ return time .Parse (time .RFC3339 , raw )
99+ }
100+
26101func init () {
27102 rootCmd .AddCommand (metricsCmd )
103+ rootCmd .AddCommand (meterCmd )
104+ rootCmd .AddCommand (eventsCmd )
105+ meterCmd .AddCommand (meterSummaryCmd )
106+ meterCmd .AddCommand (meterListCmd )
107+ eventsCmd .AddCommand (eventsWatchCmd )
108+
109+ meterSummaryCmd .Flags ().StringVar (& metricsFrom , "from" , "" , "Start time in RFC3339 format" )
110+ meterSummaryCmd .Flags ().StringVar (& metricsTo , "to" , "" , "End time in RFC3339 format" )
111+ meterListCmd .Flags ().StringVar (& meterType , "type" , "" , "Workload type filter" )
112+ eventsWatchCmd .Flags ().StringVar (& eventsType , "type" , "" , "Event type filter" )
113+ eventsWatchCmd .Flags ().StringVar (& eventsWorkloadID , "workload-id" , "" , "Filter by workload ID" )
114+ eventsWatchCmd .Flags ().StringVar (& eventsNodeID , "node-id" , "" , "Filter by node ID" )
115+ eventsWatchCmd .Flags ().IntVar (& eventsLimit , "limit" , 20 , "Maximum number of events to print before exiting" )
28116}
0 commit comments