JCC-CSScheduler/schedulerMiddleware/internal/cmdline/cmdline.go

65 lines
1.4 KiB
Go

package cmdline
import (
"fmt"
"github.com/spf13/cobra"
"gitlink.org.cn/cloudream/scheduler/schedulerMiddleware/internal/services"
"os"
"gitlink.org.cn/cloudream/common/pkgs/cmdtrie"
)
type CommandContext struct {
Cmdline *Commandline
}
var commands = cmdtrie.NewCommandTrie[CommandContext, error]()
type Commandline struct {
Svc *services.Service
}
func NewCommandline(svc *services.Service) (*Commandline, error) {
return &Commandline{
Svc: svc,
}, nil
}
func (c *Commandline) DispatchCommand(allArgs []string) {
cmdCtx := CommandContext{
Cmdline: c,
}
cmdErr, err := commands.Execute(cmdCtx, allArgs, cmdtrie.ExecuteOption{ReplaceEmptyArrayWithNil: true})
if err != nil {
fmt.Printf("execute command failed, err: %s", err.Error())
os.Exit(1)
}
if cmdErr != nil {
fmt.Printf("execute command failed, err: %s", cmdErr.Error())
os.Exit(1)
}
}
func MustAddCmd(fn any, prefixWords ...string) any {
commands.MustAdd(fn, prefixWords...)
return nil
}
var RootCmd = &cobra.Command{
Use: "middleware",
Short: "scheduler middleware",
Long: `scheduler middleware`,
}
func init() {
var configPath string
var address string
RootCmd.Flags().StringVarP(&configPath, "config", "c", "", "Path to config file")
RootCmd.Flags().StringVarP(&address, "listen", "l", ":7891", "listen address")
RootCmd.Run = func(cmd *cobra.Command, args []string) {
serve(configPath, address)
}
}