Skip to content

Commit c757ef9

Browse files
committed
Feat: Add Meter and Events Commands inder metrics
1 parent f63beca commit c757ef9

1 file changed

Lines changed: 88 additions & 0 deletions

File tree

persysctl/cmd/metrics.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,24 @@ package cmd
33
import (
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+
1024
var 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+
26101
func 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

Comments
 (0)