| Index: client/cmd/logdog_butler/main.go
|
| diff --git a/client/cmd/logdog_butler/main.go b/client/cmd/logdog_butler/main.go
|
| index 8166b451b569b6ff88b2050a1cdd2f4cd0918a4c..173e9b23b1b84642ebd7ac9d5b04041668f04678 100644
|
| --- a/client/cmd/logdog_butler/main.go
|
| +++ b/client/cmd/logdog_butler/main.go
|
| @@ -103,6 +103,8 @@ func (a *application) addFlags(fs *flag.FlagSet) {
|
|
|
| a.maxBufferAge = clockflag.Duration(butler.DefaultMaxBufferAge)
|
|
|
| + fs.Var(&a.butler.Project, "project",
|
| + "The log prefix's project name (required).")
|
| fs.Var(&a.butler.Prefix, "prefix",
|
| "Prefix to apply to all stream names.")
|
| fs.Var(&a.outputConfig, "output",
|
| @@ -171,12 +173,18 @@ func (a *application) Main(runFunc func(b *butler.Butler) error) error {
|
| if a.cpuProfile != "" {
|
| f, err := os.Create(a.cpuProfile)
|
| if err != nil {
|
| - return fmt.Errorf("Failed to create CPU profile output: %v", err)
|
| + return fmt.Errorf("failed to create CPU profile output: %v", err)
|
| }
|
| pprof.StartCPUProfile(f)
|
| defer pprof.StopCPUProfile()
|
| }
|
|
|
| + // Generate a prefix secret for this Butler session.
|
| + var err error
|
| + if a.butler.Secret, err = types.NewPrefixSecret(); err != nil {
|
| + return fmt.Errorf("failed to generate prefix secret: %s", err)
|
| + }
|
| +
|
| // Instantiate our Butler.
|
| a.butler.MaxBufferAge = time.Duration(a.maxBufferAge)
|
| a.butler.BufferLogs = !a.noBufferLogs
|
| @@ -280,6 +288,14 @@ func mainImpl(ctx context.Context, argv []string) int {
|
|
|
| a.Context = logConfig.Set(a.Context)
|
|
|
| + // TODO(dnj): Force all invocations to supply a Project.
|
| + if a.butler.Project != "" {
|
| + if err := a.butler.Project.Validate(); err != nil {
|
| + log.WithError(err).Errorf(a, "Invalid project (-project).")
|
| + return configErrorReturnCode
|
| + }
|
| + }
|
| +
|
| // Validate our Prefix; generate a user prefix if one was not supplied.
|
| prefix := a.butler.Prefix
|
| if prefix == "" {
|
|
|