in bydbctl/internal/cmd/topn.go [35:163]
func newTopnCmd() *cobra.Command {
topnCmd := &cobra.Command{
Use: "topn",
Version: version.Build(),
Short: "Topn operation",
}
// e.g. http://127.0.0.1:17913/api/v1/topn-agg/schema
createCmd := &cobra.Command{
Use: "create -f [file|dir|-]",
Version: version.Build(),
Short: "Create topn from files",
RunE: func(cmd *cobra.Command, _ []string) error {
return rest(func() ([]reqBody, error) { return parseNameAndGroupFromYAML(cmd.InOrStdin()) },
func(request request) (*resty.Response, error) {
s := new(databasev1.TopNAggregation)
err := protojson.Unmarshal(request.data, s)
if err != nil {
return nil, err
}
cr := &databasev1.TopNAggregationRegistryServiceCreateRequest{
TopNAggregation: s,
}
b, err := protojson.Marshal(cr)
if err != nil {
return nil, err
}
return request.req.SetBody(b).Post(getPath(topnSchemaPath))
},
func(_ int, reqBody reqBody, _ []byte) error {
fmt.Printf("topn %s.%s is created", reqBody.group, reqBody.name)
fmt.Println()
return nil
}, enableTLS, insecure, cert)
},
}
// e.g. http://127.0.0.1:17913/api/v1/topn-agg/schema/{sw_metric}/{my_measure_topn}
updateCmd := &cobra.Command{
Use: "update -f [file|dir|-]",
Version: version.Build(),
Short: "Update topn from files",
RunE: func(cmd *cobra.Command, _ []string) (err error) {
return rest(func() ([]reqBody, error) { return parseNameAndGroupFromYAML(cmd.InOrStdin()) },
func(request request) (*resty.Response, error) {
s := new(databasev1.TopNAggregation)
err := protojson.Unmarshal(request.data, s)
if err != nil {
return nil, err
}
cr := &databasev1.TopNAggregationRegistryServiceUpdateRequest{
TopNAggregation: s,
}
b, err := protojson.Marshal(cr)
if err != nil {
return nil, err
}
return request.req.SetBody(b).
SetPathParam("name", request.name).SetPathParam("group", request.group).
Put(getPath(topnSchemaPathWithParams))
},
func(_ int, reqBody reqBody, _ []byte) error {
fmt.Printf("topn %s.%s is updated", reqBody.group, reqBody.name)
fmt.Println()
return nil
}, enableTLS, insecure, cert)
},
}
// e.g. http://127.0.0.1:17913/api/v1/topn-agg/schema/{sw_metric}/{my_measure_topn}
getCmd := &cobra.Command{
Use: "get [-g group] -n name",
Version: version.Build(),
Short: "Get a topn",
RunE: func(_ *cobra.Command, _ []string) (err error) {
return rest(parseFromFlags, func(request request) (*resty.Response, error) {
return request.req.SetPathParam("name", request.name).SetPathParam("group", request.group).Get(getPath(topnSchemaPathWithParams))
}, yamlPrinter, enableTLS, insecure, cert)
},
}
deleteCmd := &cobra.Command{
Use: "delete [-g group] -n name",
Version: version.Build(),
Short: "Delete a topn",
RunE: func(_ *cobra.Command, _ []string) (err error) {
return rest(parseFromFlags, func(request request) (*resty.Response, error) {
return request.req.SetPathParam("name", request.name).SetPathParam("group", request.group).Delete(getPath(topnSchemaPathWithParams))
}, func(_ int, reqBody reqBody, _ []byte) error {
fmt.Printf("topn %s.%s is deleted", reqBody.group, reqBody.name)
fmt.Println()
return nil
}, enableTLS, insecure, cert)
},
}
bindNameFlag(getCmd, deleteCmd)
// e.g. http://127.0.0.1:17913/api/v1/topn-agg/schema/lists/{sw_metric}
listCmd := &cobra.Command{
Use: "list [-g group]",
Version: version.Build(),
Short: "List topn",
RunE: func(_ *cobra.Command, _ []string) (err error) {
return rest(parseFromFlags, func(request request) (*resty.Response, error) {
return request.req.SetPathParam("group", request.group).Get(getPath("/api/v1/topn-agg/schema/lists/{group}"))
}, yamlPrinter, enableTLS, insecure, cert)
},
}
// e.g. http://127.0.0.1:17913/api/v1/measure/topn
queryCmd := &cobra.Command{
Use: "query [-s start_time] [-e end_time] -f [file|dir|-]",
Version: version.Build(),
Short: "Query data in a topn",
Long: timeRangeUsage,
RunE: func(cmd *cobra.Command, _ []string) (err error) {
return rest(func() ([]reqBody, error) { return parseTimeRangeFromFlagAndYAML(cmd.InOrStdin()) },
func(request request) (*resty.Response, error) {
return request.req.SetBody(request.data).Post(getPath("/api/v1/measure/topn"))
}, yamlPrinter, enableTLS, insecure, cert)
},
}
bindFileFlag(createCmd, updateCmd, queryCmd)
bindTimeRangeFlag(queryCmd)
bindTLSRelatedFlag(getCmd, createCmd, deleteCmd, updateCmd, listCmd, queryCmd)
topnCmd.AddCommand(getCmd, createCmd, deleteCmd, updateCmd, listCmd, queryCmd)
return topnCmd
}