diff --git a/cmd/api/main.go b/cmd/api/main.go index b83609e73..bb29f007b 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -19,22 +19,24 @@ var startCmd = &cobra.Command{ Short: "Start the server", Run: func(cmd *cobra.Command, args []string) { port, _ := cmd.Flags().GetInt(constant.FlagPort) - configFolderPath, _ := cmd.Flags().GetString(constant.FlagConf) - if err := run(configFolderPath, port); err != nil { + if err := run(port); err != nil { panic(err.Error()) } }, } -func init() { +func main() { startCmd.Flags().IntP(constant.FlagPort, "p", 0, "Port to listen on") startCmd.Flags().StringP(constant.FlagConf, "c", "", "Path to config file folder") + rootCmd := cmd.NewRootCmd() + cobra.Command(rootCmd).AddCommand(startCmd) + if err := startCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } } -func run(configFolderPath string, port int) error { - if err := config.InitConfig(configFolderPath); err != nil { - return err - } +func run(port int) error { if port == 0 { port = config.Config.Api.GinPort[0] } @@ -52,12 +54,3 @@ func run(configFolderPath string, port int) error { } return nil } - -func main() { - rootCmd := cmd.NewRootCmd() - rootCmd.AddCommand(startCmd) - if err := startCmd.Execute(); err != nil { - fmt.Println(err) - os.Exit(1) - } -} diff --git a/cmd/cmdutils/main.go b/cmd/cmdutils/main.go index ea9eeb1ce..94febdd86 100644 --- a/cmd/cmdutils/main.go +++ b/cmd/cmdutils/main.go @@ -5,93 +5,106 @@ import ( "OpenIM/pkg/common/cmd" "OpenIM/pkg/common/config" "OpenIM/pkg/common/constant" - "flag" + "context" "fmt" "github.com/spf13/cobra" "os" ) - -var showSeqCmd = &cobra.Command{ - Use: "show-seq", - Short: "Start the server", - Run: func(cmd *cobra.Command, args []string) { - configFolderPath, _ := cmd.Flags().GetString(constant.FlagConf) - config.InitConfig(configFolderPath) +var seqCmd = &cobra.Command{ + Use: "seq", + Short: "seq operation", + RunE: func(cmdLines *cobra.Command, args []string) error { + msgTool, err := tools.InitMsgTool() + if err != nil { + return err + } + userID, _ := cmdLines.Flags().GetString("userID") + superGroupID, _ := cmdLines.Flags().GetString("superGroupID") + fixAll, _ := cmdLines.Flags().GetBool("fixAll") + ctx := context.Background() + switch { + case cmdLines.Parent() == getCmd: + switch { + case userID != "": + msgTool.ShowUserSeqs(ctx, userID) + case superGroupID != "": + msgTool.ShowSuperGroupSeqs(ctx, superGroupID) + } + case cmdLines.Parent() == fixCmd: + switch { + case userID != "": + _, _, err = msgTool.GetAndFixUserSeqs(ctx, userID) + case superGroupID != "": + err = msgTool.FixGroupSeq(ctx, userID) + case fixAll: + err = msgTool.FixAllSeq(ctx) + } + } + return err }, } -var - - -func init() { - showSeqCmd.Flags().StringP("userID", "u", "", "openIM userID") - showSeqCmd.Flags().StringP("groupID", "g", "", "openIM groupID") - startCmd.Flags().StringP(constant.FlagConf, "c", "", "Path to config file folder") - +var msgCmd = &cobra.Command{ + Use: "msg", + Short: "msg operation", + RunE: func(cmdLines *cobra.Command, args []string) error { + msgTool, err := tools.InitMsgTool() + if err != nil { + return err + } + userID, _ := cmdLines.Flags().GetString("userID") + superGroupID, _ := cmdLines.Flags().GetString("superGroupID") + clearAll, _ := cmdLines.Flags().GetBool("clearAll") + ctx := context.Background() + switch { + case cmdLines.Parent() == getCmd: + switch { + case userID != "": + msgTool.ShowUserSeqs(ctx, userID) + case superGroupID != "": + msgTool.ShowSuperGroupSeqs(ctx, superGroupID) + } + case cmdLines.Parent() == clearCmd: + switch { + case userID != "": + msgTool.ClearUsersMsg(ctx, []string{userID}) + case superGroupID != "": + msgTool.ClearSuperGroupMsg(ctx, []string{superGroupID}) + case clearAll: + msgTool.AllUserClearMsgAndFixSeq() + } + } + return nil + }, } -func run(configFolderPath string, cmd *cobra.Command) error { - if err := config.InitConfig(configFolderPath); err != nil { - return err - } +var getCmd = &cobra.Command{ + Use: "get", + Short: "get operation", +} +var fixCmd = &cobra.Command{ + Use: "fix", + Short: "fix seq operation", +} - return nil +var clearCmd = &cobra.Command{ + Use: "clear", + Short: "clear operation", } func main() { - rootCmd := cmd.NewRootCmd() - rootCmd.AddCommand(showSeqCmd) - if err := rootCmd.Execute(); err != nil { + cmd.RootCmd.PersistentFlags().StringP("userID", "u", "", "openIM userID") + cmd.RootCmd.PersistentFlags().StringP("groupID", "u", "", "openIM superGroupID") + seqCmd.Flags().BoolP("fixAll", "c", false, "openIM fix all seqs") + msgCmd.Flags().BoolP("clearAll", "c", false, "openIM clear all timeout msgs") + cmd.RootCmd.AddCommand(getCmd, fixCmd, clearCmd) + getCmd.AddCommand(seqCmd, msgCmd) + fixCmd.AddCommand(seqCmd) + clearCmd.AddCommand(msgCmd) + if err := cmd.RootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) } } - - -// -func main() { - if err := config.InitConfig(); err != nil { - panic(err.Error()) - } - // clear msg by id - var userIDClearMsg = flag.String("user_id_fix_seq", "", "userID to clear msg and reset seq") - var superGroupIDClearMsg = flag.String("super_group_id_fix_seq", "", "superGroupID to clear msg and reset seq") - // show seq by id - var userIDShowSeq = flag.String("user_id_show_seq", "", "show userID") - var superGroupIDShowSeq = flag.String("super_group_id_show_seq", "", "userID to clear msg and reset seq") - // fix seq by id - var userIDFixSeq = flag.String("user_id_fix_seq", "", "userID to Fix Seq") - var superGroupIDFixSeq = flag.String("super_group_id_fix_seq", "", "super groupID to fix Seq") - var fixAllSeq = flag.Bool("fix_all_seq", false, "fix seq") - flag.Parse() - msgTool, err := tools.InitMsgTool() - if err != nil { - panic(err.Error()) - } - ctx := context.Background() - if userIDFixSeq != nil { - msgTool.GetAndFixUserSeqs(ctx, *userIDFixSeq) - } - if superGroupIDFixSeq != nil { - msgTool.FixGroupSeq(ctx, *superGroupIDFixSeq) - } - if fixAllSeq != nil { - msgTool.FixAllSeq(ctx) - } - if userIDClearMsg != nil { - msgTool.ClearUsersMsg(ctx, []string{*userIDClearMsg}) - } - - if superGroupIDClearMsg != nil { - msgTool.ClearSuperGroupMsg(ctx, []string{*superGroupIDClearMsg}) - } - if userIDShowSeq != nil { - msgTool.ShowUserSeqs(ctx, *userIDShowSeq) - } - - if superGroupIDShowSeq != nil { - msgTool.ShowSuperGroupSeqs(ctx, *superGroupIDShowSeq) - } -} diff --git a/internal/tools/msg.go b/internal/tools/msg.go index bb29a3451..18eb8e8de 100644 --- a/internal/tools/msg.go +++ b/internal/tools/msg.go @@ -180,10 +180,10 @@ func (c *MsgTool) ShowSuperGroupUserSeqs(ctx context.Context, groupID, userID st } -func (c *MsgTool) FixAllSeq(ctx context.Context) { +func (c *MsgTool) FixAllSeq(ctx context.Context) error { userIDs, err := c.userDatabase.GetAllUserID(ctx) if err != nil { - panic(err.Error()) + return err } for _, userID := range userIDs { userCurrentMinSeq, err := c.msgDatabase.GetUserMinSeq(ctx, userID) @@ -204,7 +204,7 @@ func (c *MsgTool) FixAllSeq(ctx context.Context) { fmt.Println("fix users seq success") groupIDs, err := c.groupDatabase.GetGroupIDsByGroupType(ctx, constant.WorkingGroup) if err != nil { - panic(err.Error()) + return err } for _, groupID := range groupIDs { maxSeq, err := c.msgDatabase.GetGroupMaxSeq(ctx, groupID) @@ -232,4 +232,5 @@ func (c *MsgTool) FixAllSeq(ctx context.Context) { } } fmt.Println("fix all seq finished") + return nil } diff --git a/pkg/common/cmd/root.go b/pkg/common/cmd/root.go index 72f407628..d7b3960d5 100644 --- a/pkg/common/cmd/root.go +++ b/pkg/common/cmd/root.go @@ -1,13 +1,31 @@ package cmd import ( + "OpenIM/pkg/common/config" + "OpenIM/pkg/common/constant" "github.com/spf13/cobra" ) -func NewRootCmd() *cobra.Command { - return &cobra.Command{ +type RootCmd cobra.Command + +func NewRootCmd() RootCmd { + c := cobra.Command{ Use: "start", Short: "Start the server", Long: `Start the server`, + PersistentPreRunE: func(cmd *cobra.Command, args []string) error { + return getConfFromCmdAndInit(cmd) + }, } + c.Flags() + return RootCmd(c) +} + +func (r RootCmd) Init() { + cobra.Command(r).Flags().StringP(constant.FlagConf, "c", "", "Path to config file folder") +} + +func getConfFromCmdAndInit(cmdLines *cobra.Command) error { + configFolderPath, _ := cmdLines.Flags().GetString(constant.FlagConf) + return config.InitConfig(configFolderPath) } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index a5571f6fc..5dc227243 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -527,6 +527,9 @@ func (c *config) GetConfFromRegistry(registry discoveryregistry.SvcDiscoveryRegi } func InitConfig(configFolderPath string) error { + defer func() { + fmt.Println("use config folder", configFolderPath) + }() err := Config.initConfig(&Config, FileName, configFolderPath) if err != nil { return err diff --git a/pkg/discoveryregistry/discovery_register.go b/pkg/discoveryregistry/discovery_register.go index 45d2ff2ea..dd5e40f77 100644 --- a/pkg/discoveryregistry/discovery_register.go +++ b/pkg/discoveryregistry/discovery_register.go @@ -13,3 +13,8 @@ type SvcDiscoveryRegistry interface { RegisterConf2Registry(key string, conf []byte) error GetConfFromRegistry(key string) ([]byte, error) } + +func GetConns(serviceName string) { + GetConns(serviceName string, opts ...grpc.DialOption) ([]*grpc.ClientConn, error) + +} \ No newline at end of file