Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cmd/products.gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 27 additions & 0 deletions products/urocketmq/internal/cmd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package internal

import (
"github.com/spf13/cobra"

"github.com/ucloud/ucloud-cli/pkg/cli"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/group"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/message"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/service"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/token"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/topic"
)

// NewCommand builds the top-level urocketmq command.
func NewCommand(ctx *cli.Context) *cobra.Command {
cmd := &cobra.Command{
Use: "urocketmq",
Short: "Manage URocketMQ instances, topics, groups, tokens and messages",
Args: cobra.NoArgs,
}
cmd.AddCommand(service.NewCommand(ctx))
cmd.AddCommand(topic.NewCommand(ctx))
cmd.AddCommand(group.NewCommand(ctx))
cmd.AddCommand(token.NewCommand(ctx))
cmd.AddCommand(message.NewCommand(ctx))
return cmd
}
21 changes: 21 additions & 0 deletions products/urocketmq/internal/group/cmd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package group

import (
"github.com/spf13/cobra"

"github.com/ucloud/ucloud-cli/pkg/cli"
)

// NewCommand builds the `urocketmq group` resource-group command. Action subcommands are appended
// at the end in subsequent batches (order is fixed, golden depends).
func NewCommand(ctx *cli.Context) *cobra.Command {
cmd := &cobra.Command{
Use: "group",
Short: "Manage URocketMQ consumer groups",
Args: cobra.NoArgs,
}
cmd.AddCommand(newCreate(ctx))
cmd.AddCommand(newDelete(ctx))
cmd.AddCommand(newList(ctx))
return cmd
}
33 changes: 33 additions & 0 deletions products/urocketmq/internal/group/completion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package group

import (
"github.com/ucloud/ucloud-cli/pkg/cli"
"github.com/ucloud/ucloud-sdk-go/services/urocketmq"
sdk "github.com/ucloud/ucloud-sdk-go/ucloud"
)

// GroupList returns group names for the given service. Exported for self-use (delete --group-name completion)
// and reused by sibling list; cross-group one-way imports service, same-group calls directly.
func GroupList(ctx *cli.Context, projectID, region, serviceID string) []string {
client := cli.NewServiceClient(ctx, urocketmq.NewClient)
req := client.NewListURocketMQGroupRequest()
req.ProjectId = sdk.String(projectID)
req.Region = sdk.String(region)
req.ServiceId = sdk.String(serviceID)
names := make([]string, 0)
for limit, offset := 50, 0; ; offset += limit {
req.Limit = sdk.Int(limit)
req.Offset = sdk.Int(offset)
resp, err := client.ListURocketMQGroup(req)
if err != nil {
return nil
}
for _, g := range resp.GroupList {
names = append(names, g.GroupName)
}
if offset+limit >= resp.TotalCount {
break
}
}
return names
}
50 changes: 50 additions & 0 deletions products/urocketmq/internal/group/create.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package group

import (
"github.com/spf13/cobra"

"github.com/ucloud/ucloud-sdk-go/services/urocketmq"

"github.com/ucloud/ucloud-cli/pkg/cli"
"github.com/ucloud/ucloud-cli/pkg/command"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/service"
)

// newCreate ucloud urocketmq group create
func newCreate(ctx *cli.Context) *cobra.Command {
client := cli.NewServiceClient(ctx, urocketmq.NewClient)
req := client.NewCreateURocketMQGroupRequest()
cmd := &cobra.Command{
Use: "create",
Short: "Create a consumer group",
Long: "Create a consumer group",
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
resp, err := client.CreateURocketMQGroup(req)
if err != nil {
return err
}
ctx.EmitResult(cli.OpResultRow{
ResourceID: resp.GroupId,
Action: "create",
Status: "Created",
})
return nil
},
}
cmd.Flags().SortFlags = false

ctx.BindProjectID(cmd, req)
ctx.BindRegion(cmd, req)
req.Name = cmd.Flags().String("name", "", "Required. Consumer group name, 1-36 characters, supports letters, digits, - and _")
req.ServiceId = cmd.Flags().String("service-id", "", "Required. Service ID")
req.Remark = cmd.Flags().String("remark", "", "Optional. Group remark")

command.SetCompletion(cmd, "service-id", func() []string {
return service.ServiceList(ctx, *req.ProjectId, *req.Region)
})
cmd.MarkFlagRequired("name")
cmd.MarkFlagRequired("service-id")

return cmd
}
63 changes: 63 additions & 0 deletions products/urocketmq/internal/group/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package group

import (
"fmt"

"github.com/spf13/cobra"

"github.com/ucloud/ucloud-sdk-go/services/urocketmq"

"github.com/ucloud/ucloud-cli/pkg/cli"
"github.com/ucloud/ucloud-cli/pkg/command"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/service"
)

// newDelete ucloud urocketmq group delete
func newDelete(ctx *cli.Context) *cobra.Command {
var yes bool
client := cli.NewServiceClient(ctx, urocketmq.NewClient)
req := client.NewDeleteURocketMQGroupRequest()
cmd := &cobra.Command{
Use: "delete",
Short: "Delete a consumer group",
Long: "Delete a consumer group",
SilenceUsage: true,
RunE: func(cmd *cobra.Command, args []string) error {
ok, err := ctx.Confirm(yes, fmt.Sprintf("Are you sure you want to delete group %q?", *req.GroupName))
if err != nil {
return err
}
if !ok {
return nil
}
_, err = client.DeleteURocketMQGroup(req)
if err != nil {
return err
}
ctx.EmitResult(cli.OpResultRow{
ResourceID: *req.GroupName,
Action: "delete",
Status: "Deleted",
})
return nil
},
}
cmd.Flags().SortFlags = false

ctx.BindProjectID(cmd, req)
ctx.BindRegion(cmd, req)
req.ServiceId = cmd.Flags().String("service-id", "", "Required. Service ID")
req.GroupName = cmd.Flags().String("group-name", "", "Required. Consumer group name")
cmd.Flags().BoolVarP(&yes, "yes", "y", false, "Optional. Do not prompt for confirmation.")

command.SetCompletion(cmd, "service-id", func() []string {
return service.ServiceList(ctx, *req.ProjectId, *req.Region)
})
command.SetCompletion(cmd, "group-name", func() []string {
return GroupList(ctx, *req.ProjectId, *req.Region, *req.ServiceId)
})
cmd.MarkFlagRequired("service-id")
cmd.MarkFlagRequired("group-name")

return cmd
}
74 changes: 74 additions & 0 deletions products/urocketmq/internal/group/list.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package group

import (
"github.com/spf13/cobra"

"github.com/ucloud/ucloud-sdk-go/services/urocketmq"

"github.com/ucloud/ucloud-cli/internal/common"
"github.com/ucloud/ucloud-cli/pkg/cli"
"github.com/ucloud/ucloud-cli/pkg/command"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/service"
)

// newList ucloud urocketmq group list
func newList(ctx *cli.Context) *cobra.Command {
client := cli.NewServiceClient(ctx, urocketmq.NewClient)
req := client.NewListURocketMQGroupRequest()
cmd := &cobra.Command{
Use: "list",
Short: "List URocketMQ consumer groups",
Long: "List URocketMQ consumer groups",
Run: func(cmd *cobra.Command, args []string) {
resp, err := client.ListURocketMQGroup(req)
if err != nil {
ctx.HandleError(err)
return
}
listGroup(ctx, resp.GroupList)
},
}
cmd.Flags().SortFlags = false

ctx.BindProjectID(cmd, req)
ctx.BindRegion(cmd, req)
req.ServiceId = cmd.Flags().String("service-id", "", "Required. Service ID")
req.Limit = cmd.Flags().Int("limit", 50, "Optional. Limit default 50")
req.Offset = cmd.Flags().Int("offset", 0, "Optional. Offset default 0")

command.SetCompletion(cmd, "service-id", func() []string {
return service.ServiceList(ctx, *req.ProjectId, *req.Region)
})
cmd.MarkFlagRequired("service-id")

return cmd
}

// listGroup renders the group list. json/yaml emits full-field groupRow; table mode uses groupRowDefault.
func listGroup(ctx *cli.Context, groups []urocketmq.GroupBaseInfo) {
list := make([]groupRow, 0, len(groups))
for _, g := range groups {
list = append(list, groupRow{
GroupName: g.GroupName,
Id: g.Id,
Remark: g.Remark,
CreateTime: g.CreateTime,
})
}

if ctx.Format() != cli.OutputTable {
ctx.PrintList(list)
return
}

rows := make([]groupRowDefault, 0, len(list))
for _, r := range list {
rows = append(rows, groupRowDefault{
GroupName: r.GroupName,
Id: r.Id,
Remark: r.Remark,
CreateTime: common.FormatDate(r.CreateTime),
})
}
ctx.PrintList(rows)
}
17 changes: 17 additions & 0 deletions products/urocketmq/internal/group/rows.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package group

// groupRow is the full-field row (json/yaml mode).
type groupRow struct {
GroupName string
Id string
Remark string
CreateTime int
}

// groupRowDefault is the default curated columns in table mode: GroupName, Id, Remark, CreateTime.
type groupRowDefault struct {
GroupName string
Id string
Remark string
CreateTime string
}
21 changes: 21 additions & 0 deletions products/urocketmq/internal/message/cmd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package message

import (
"github.com/spf13/cobra"

"github.com/ucloud/ucloud-cli/pkg/cli"
)

// NewCommand builds the `urocketmq message` resource-group command. Action subcommands are appended
// at the end in subsequent batches (order is fixed, golden depends).
func NewCommand(ctx *cli.Context) *cobra.Command {
cmd := &cobra.Command{
Use: "message",
Short: "Query URocketMQ messages",
Args: cobra.NoArgs,
}
cmd.AddCommand(newQueryByID(ctx))
cmd.AddCommand(newQueryByKey(ctx))
cmd.AddCommand(newQueryByTopic(ctx))
return cmd
}
52 changes: 52 additions & 0 deletions products/urocketmq/internal/message/query_by_id.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package message

import (
"github.com/spf13/cobra"

"github.com/ucloud/ucloud-sdk-go/services/urocketmq"

"github.com/ucloud/ucloud-cli/pkg/cli"
"github.com/ucloud/ucloud-cli/pkg/command"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/service"
"github.com/ucloud/ucloud-cli/products/urocketmq/internal/topic"
)

// newQueryByID ucloud urocketmq message query-by-id
func newQueryByID(ctx *cli.Context) *cobra.Command {
client := cli.NewServiceClient(ctx, urocketmq.NewClient)
req := client.NewQueryURocketMQMessageByIDRequest()
cmd := &cobra.Command{
Use: "query-by-id",
Short: "Query a message by ID",
Long: `Query a message by ID, returns the full message detail including body.`,
Run: func(cmd *cobra.Command, args []string) {
resp, err := client.QueryURocketMQMessageByID(req)
if err != nil {
ctx.HandleError(err)
return
}
rows := toMessageDetailRows(resp.MessageList)
printMessageRows(ctx, rows)
},
}
cmd.Flags().SortFlags = false

ctx.BindProjectID(cmd, req)
ctx.BindRegion(cmd, req)

req.MsgId = cmd.Flags().String("msg-id", "", "Required. Message ID to query")
req.ServiceId = cmd.Flags().String("service-id", "", "Required. Service ID")
req.TopicName = cmd.Flags().String("topic-name", "", "Required. Topic name")
_ = cmd.MarkFlagRequired("msg-id")
_ = cmd.MarkFlagRequired("service-id")
_ = cmd.MarkFlagRequired("topic-name")

command.SetCompletion(cmd, "service-id", func() []string {
return service.ServiceList(ctx, *req.ProjectId, *req.Region)
})
command.SetCompletion(cmd, "topic-name", func() []string {
return topic.TopicList(ctx, *req.ProjectId, *req.Region, *req.ServiceId)
})

return cmd
}
Loading
Loading