32
33
// NewCliApp instantiates a new instance of the CLI application.
34
>
func NewCliApp(opts ...Option) *cli.App {
app.go
35
>
params := Params{
36
>
ClientFactory: NewClientFactory(),
37
>
TaskCategoryRegistry: tasks.NewDefaultTaskCategoryRegistry(),
38
>
Writer: os.Stdout,
39
>
ErrWriter: os.Stderr,
40
>
TaskBlobEncoder: NewProtoTaskBlobEncoder(NewPredefinedTaskBlobDeserializer()),
41
>
}
42
>
for _, opt := range opts {
43
>
opt(¶ms)
44
>
}
45
>
app := cli.NewApp()
46
>
app.Name = "tdbg"
47
>
app.Usage = "A command-line tool for Temporal server debugging"
48
>
app.Version = headers.ServerVersion
49
>
app.Flags = []cli.Flag{
50
>
&cli.StringFlag{
51
>
Name: FlagAddress,
52
>
Value: "",
53
>
Usage: "host:port for Temporal frontend service",
54
>
EnvVars: []string{"TEMPORAL_CLI_ADDRESS"},
55
>
},
56
>
&cli.StringFlag{
57
>
Name: FlagNamespace,
58
>
Aliases: FlagNamespaceAlias,
59
>
Value: "default",
60
>
Usage: "Temporal workflow namespace",
61
>
EnvVars: []string{"TEMPORAL_CLI_NAMESPACE"},
62
>
},
63
>
&cli.IntFlag{
64
>
Name: FlagContextTimeout,
65
>
Aliases: FlagContextTimeoutAlias,
66
>
Value: defaultContextTimeoutInSeconds,
67
>
Usage: "Optional timeout for context of RPC call in seconds",
68
>
EnvVars: []string{"TEMPORAL_CONTEXT_TIMEOUT"},
69
>
},
70
>
&cli.BoolFlag{
71
>
Name: FlagYes,
72
>
Usage: "Automatically confirm all prompts",
73
>
},
74
>
&cli.StringFlag{
75
>
Name: FlagTLSCertPath,
76
>
Value: "",
77
>
Usage: "Path to x509 certificate",
78
>
EnvVars: []string{"TEMPORAL_CLI_TLS_CERT"},
79
>
},
80
>
&cli.StringFlag{
81
>
Name: FlagTLSKeyPath,
82
>
Value: "",
83
>
Usage: "Path to private key",
84
>
EnvVars: []string{"TEMPORAL_CLI_TLS_KEY"},
85
>
},
86
>
&cli.StringFlag{
87
>
Name: FlagTLSCaPath,
88
>
Value: "",
89
>
Usage: "Path to server CA certificate",
90
>
EnvVars: []string{"TEMPORAL_CLI_TLS_CA"},
91
>
},
92
>
&cli.BoolFlag{
93
>
Name: FlagTLSDisableHostVerification,
94
>
Usage: "Disable tls host name verification (tls must be enabled)",
95
>
EnvVars: []string{"TEMPORAL_CLI_TLS_DISABLE_HOST_VERIFICATION"},
96
>
},
97
>
&cli.StringFlag{
98
>
Name: FlagTLSServerName,
99
>
Value: "",
100
>
Usage: "Override for target server name",
101
>
EnvVars: []string{"TEMPORAL_CLI_TLS_SERVER_NAME"},
102
>
},
103
>
&cli.StringFlag{
104
>
Name: "color",
105
>
Usage: fmt.Sprintf("When to use color: %v, %v, %v.", "auto", "always", "never"),
106
>
Value: "auto",
107
>
},
108
>
}
109
>
prompterFactory := NewPrompterFactory()
110
>
app.Before = func(ctx *cli.Context) error {
111
>
colorFlag := ctx.String("color")
112
>
switch colorFlag {
113
case "always":
114
color.NoColor = false
115
case "never":
116
color.NoColor = true
118
// fatih/color will inspect the enviroment and terminal and set a reasonable default.
119
}
121
}
122
>
app.Commands = getCommands(
app.go
123
>
params.ClientFactory,
124
>
NewDLQServiceProvider(
125
>
params.ClientFactory,
126
>
params.TaskBlobEncoder,
127
>
params.TaskCategoryRegistry,
128
>
params.Writer,
129
>
prompterFactory,
130
>
),
131
>
params.TaskCategoryRegistry,
132
>
prompterFactory,
133
>
params.TaskBlobEncoder,
134
>
)
135
>
app.ExitErrHandler = handleError
136
>
app.Writer = params.Writer
137
>
app.ErrWriter = params.ErrWriter
138
>
139
>
return app
140
}
141
142
>
func handleError(c *cli.Context, err error) {
app.go
143
>
if err == nil {
144
>
return
145
>
}
146
147
_, _ = fmt.Fprintf(c.App.ErrWriter, "%s %+v\n", color.RedString("Error:"), err)