mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.
## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
145 lines
4.1 KiB
Go
145 lines
4.1 KiB
Go
package tdbg
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"runtime/debug"
|
|
|
|
"github.com/temporalio/tctl-kit/pkg/color"
|
|
"github.com/urfave/cli/v2"
|
|
"go.temporal.io/server/common/headers"
|
|
"go.temporal.io/server/service/history/tasks"
|
|
)
|
|
|
|
type (
|
|
// Params which are customizable for the CLI application.
|
|
Params struct {
|
|
// ClientFactory creates Temporal service clients for tdbg to use.
|
|
ClientFactory ClientFactory
|
|
// TaskCategoryRegistry is used to determine which task categories are available for tdbg to use.
|
|
TaskCategoryRegistry tasks.TaskCategoryRegistry
|
|
// Writer is used to write output from tdbg. The default is os.Stdout.
|
|
Writer io.Writer
|
|
// ErrWriter is used to write errors from tdbg. The default is os.Stderr.
|
|
ErrWriter io.Writer
|
|
// TaskBlobEncoder is needed for custom task serialization. The default uses PredefinedTaskBlobDeserializer.
|
|
TaskBlobEncoder TaskBlobEncoder
|
|
}
|
|
// Option modifies the Params for tdbg.
|
|
Option func(params *Params)
|
|
)
|
|
|
|
// NewCliApp instantiates a new instance of the CLI application.
|
|
func NewCliApp(opts ...Option) *cli.App {
|
|
params := Params{
|
|
ClientFactory: NewClientFactory(),
|
|
TaskCategoryRegistry: tasks.NewDefaultTaskCategoryRegistry(),
|
|
Writer: os.Stdout,
|
|
ErrWriter: os.Stderr,
|
|
TaskBlobEncoder: NewProtoTaskBlobEncoder(NewPredefinedTaskBlobDeserializer()),
|
|
}
|
|
for _, opt := range opts {
|
|
opt(¶ms)
|
|
}
|
|
app := cli.NewApp()
|
|
app.Name = "tdbg"
|
|
app.Usage = "A command-line tool for Temporal server debugging"
|
|
app.Version = headers.ServerVersion
|
|
app.Flags = []cli.Flag{
|
|
&cli.StringFlag{
|
|
Name: FlagAddress,
|
|
Value: "",
|
|
Usage: "host:port for Temporal frontend service",
|
|
EnvVars: []string{"TEMPORAL_CLI_ADDRESS"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: FlagNamespace,
|
|
Aliases: FlagNamespaceAlias,
|
|
Value: "default",
|
|
Usage: "Temporal workflow namespace",
|
|
EnvVars: []string{"TEMPORAL_CLI_NAMESPACE"},
|
|
},
|
|
&cli.IntFlag{
|
|
Name: FlagContextTimeout,
|
|
Aliases: FlagContextTimeoutAlias,
|
|
Value: defaultContextTimeoutInSeconds,
|
|
Usage: "Optional timeout for context of RPC call in seconds",
|
|
EnvVars: []string{"TEMPORAL_CONTEXT_TIMEOUT"},
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: FlagYes,
|
|
Usage: "Automatically confirm all prompts",
|
|
},
|
|
&cli.StringFlag{
|
|
Name: FlagTLSCertPath,
|
|
Value: "",
|
|
Usage: "Path to x509 certificate",
|
|
EnvVars: []string{"TEMPORAL_CLI_TLS_CERT"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: FlagTLSKeyPath,
|
|
Value: "",
|
|
Usage: "Path to private key",
|
|
EnvVars: []string{"TEMPORAL_CLI_TLS_KEY"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: FlagTLSCaPath,
|
|
Value: "",
|
|
Usage: "Path to server CA certificate",
|
|
EnvVars: []string{"TEMPORAL_CLI_TLS_CA"},
|
|
},
|
|
&cli.BoolFlag{
|
|
Name: FlagTLSDisableHostVerification,
|
|
Usage: "Disable tls host name verification (tls must be enabled)",
|
|
EnvVars: []string{"TEMPORAL_CLI_TLS_DISABLE_HOST_VERIFICATION"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: FlagTLSServerName,
|
|
Value: "",
|
|
Usage: "Override for target server name",
|
|
EnvVars: []string{"TEMPORAL_CLI_TLS_SERVER_NAME"},
|
|
},
|
|
&cli.StringFlag{
|
|
Name: color.FlagColor,
|
|
Usage: fmt.Sprintf("When to use color: %v, %v, %v.", color.Auto, color.Always, color.Never),
|
|
Value: string(color.Auto),
|
|
},
|
|
}
|
|
prompterFactory := NewPrompterFactory()
|
|
app.Commands = getCommands(
|
|
params.ClientFactory,
|
|
NewDLQServiceProvider(
|
|
params.ClientFactory,
|
|
params.TaskBlobEncoder,
|
|
params.TaskCategoryRegistry,
|
|
params.Writer,
|
|
prompterFactory,
|
|
),
|
|
params.TaskCategoryRegistry,
|
|
prompterFactory,
|
|
params.TaskBlobEncoder,
|
|
)
|
|
app.ExitErrHandler = handleError
|
|
app.Writer = params.Writer
|
|
app.ErrWriter = params.ErrWriter
|
|
|
|
return app
|
|
}
|
|
|
|
func handleError(c *cli.Context, err error) {
|
|
if err == nil {
|
|
return
|
|
}
|
|
|
|
_, _ = fmt.Fprintf(c.App.ErrWriter, "%s %+v\n", color.Red(c, "Error:"), err)
|
|
if os.Getenv(showErrorStackEnv) != `` {
|
|
_, _ = fmt.Fprintln(c.App.ErrWriter, color.Magenta(c, "Stack trace:"))
|
|
debug.PrintStack()
|
|
} else {
|
|
_, _ = fmt.Fprintf(c.App.ErrWriter, "('export %s=1' to see stack traces)\n", showErrorStackEnv)
|
|
}
|
|
|
|
cli.OsExiter(1)
|
|
}
|