From 33881c695d4ed94a5dda1ec122f977661ae1912d Mon Sep 17 00:00:00 2001 From: Manuel Carmona Date: Thu, 12 Apr 2018 12:10:00 +0200 Subject: [PATCH 1/4] Organize commands Signed-off-by: Manuel Carmona --- .gitignore | 4 +- cli/borges/command.go | 143 ++++++++++++++++++++++++++++++++++++++++ cli/borges/consumer.go | 20 +++++- cli/borges/file.go | 50 ++++++++++++++ cli/borges/init.go | 21 +++++- cli/borges/main.go | 120 ++------------------------------- cli/borges/mentions.go | 51 ++++++++++++++ cli/borges/packer.go | 20 +++++- cli/borges/producer.go | 131 +++++++++++++++++++++--------------- cli/borges/republish.go | 23 +++++++ cli/borges/update.go | 23 +++++++ cli/borges/version.go | 25 ++++++- 12 files changed, 456 insertions(+), 175 deletions(-) create mode 100644 cli/borges/command.go create mode 100644 cli/borges/file.go create mode 100644 cli/borges/mentions.go create mode 100644 cli/borges/republish.go create mode 100644 cli/borges/update.go diff --git a/.gitignore b/.gitignore index c640cb10..12bf746d 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,6 @@ coverage.txt # Built binaries bin/ build/ -borges -borges.exe +/borges +/borges.exe diff --git a/cli/borges/command.go b/cli/borges/command.go new file mode 100644 index 00000000..7dcd92eb --- /dev/null +++ b/cli/borges/command.go @@ -0,0 +1,143 @@ +package main + +import ( + "fmt" + "net/http" + _ "net/http/pprof" + "os" + + "github.com/inconshreveable/log15" + "github.com/src-d/borges/metrics" +) + +type ExecutableCommander interface { + Commander + Execute(args []string) error +} + +type Commander interface { + Name() string + ShortDescription() string + LongDescription() string +} + +type simpleCommand struct { + name string + shortDescription string + longDescription string +} + +func newSimpleCommand(name, short, long string) simpleCommand { + return simpleCommand{ + name: name, + shortDescription: short, + longDescription: long, + } +} + +func (c *simpleCommand) Name() string { return c.name } + +func (c *simpleCommand) ShortDescription() string { return c.shortDescription } + +func (c *simpleCommand) LongDescription() string { return c.longDescription } + +type command struct { + simpleCommand + queueOpts + loggerOpts + metricsOpts + profilerOpts +} + +func newCommand(name, short, long string) command { + return command{ + simpleCommand: newSimpleCommand( + name, + short, + long, + ), + } +} + +func (c *command) init() { + c.loggerOpts.init() + c.profilerOpts.maybeStartProfiler() + c.metricsOpts.maybeStartMetrics() +} + +type queueOpts struct { + Queue string `long:"queue" default:"borges" description:"queue name"` +} + +type loggerOpts struct { + LogLevel string `short:"" long:"loglevel" description:"max log level enabled" default:"info"` + LogFile string `short:"" long:"logfile" description:"path to file where logs will be stored" default:""` + LogFormat string `short:"" long:"logformat" description:"format used to output the logs (json or text)" default:"text"` +} + +func (c *loggerOpts) init() { + lvl, err := log15.LvlFromString(c.LogLevel) + if err != nil { + panic(fmt.Sprintf("unknown level name %q", c.LogLevel)) + } + + var handlers []log15.Handler + var format log15.Format + if c.LogFormat == "json" { + format = log15.JsonFormat() + handlers = append( + handlers, + log15.CallerFileHandler(log15.Must.FileHandler(os.Stdout.Name(), format)), + ) + } else { + format = log15.LogfmtFormat() + handlers = append( + handlers, + log15.CallerFileHandler(log15.StdoutHandler), + ) + } + + if c.LogFile != "" { + handlers = append( + handlers, + log15.CallerFileHandler(log15.Must.FileHandler(c.LogFile, format)), + ) + } + + log15.Root().SetHandler(log15.LvlFilterHandler(lvl, log15.MultiHandler(handlers...))) +} + +type metricsOpts struct { + Metrics bool `long:"metrics" description:"expose a metrics endpoint using an HTTP server"` + MetricsPort int `long:"metrics-port" description:"port to bind metrics to" default:"6062"` +} + +func (c *metricsOpts) maybeStartMetrics() { + if c.Metrics { + addr := fmt.Sprintf("0.0.0.0:%d", c.MetricsPort) + go func() { + log.Debug("Started metrics service at", "address", addr) + if err := metrics.Start(addr); err != nil { + log.Warn("metrics service stopped", "err", err) + } + }() + } +} + +type profilerOpts struct { + Profiler bool `long:"profiler" description:"start CPU, memory and block profilers"` + ProfilerPort int `long:"profiler-port" description:"port to bind profiler to" default:"6061"` +} + +func (c *profilerOpts) maybeStartProfiler() { + if c.Profiler { + addr := fmt.Sprintf("0.0.0.0:%d", c.ProfilerPort) + go func() { + log.Debug("Started CPU, memory and block profilers at", "address", addr) + err := http.ListenAndServe(addr, nil) + if err != nil { + log.Warn("Profiler failed to listen and serve at", "address", addr, "error", err) + } + }() + } +} diff --git a/cli/borges/consumer.go b/cli/borges/consumer.go index b517c110..5ae7494f 100644 --- a/cli/borges/consumer.go +++ b/cli/borges/consumer.go @@ -15,8 +15,14 @@ const ( consumerCmdLongDesc = "" ) +var consumerCommand = &consumerCmd{command: newCommand( + consumerCmdName, + consumerCmdShortDesc, + consumerCmdLongDesc, +)} + type consumerCmd struct { - cmd + command WorkersCount int `long:"workers" default:"8" description:"number of workers"` Timeout string `long:"timeout" default:"10h" description:"deadline to process a job"` } @@ -51,3 +57,15 @@ func (c *consumerCmd) Execute(args []string) error { return nil } + +func init() { + _, err := parser.AddCommand( + consumerCommand.Name(), + consumerCommand.ShortDescription(), + consumerCommand.LongDescription(), + consumerCommand) + + if err != nil { + panic(err) + } +} diff --git a/cli/borges/file.go b/cli/borges/file.go new file mode 100644 index 00000000..f2de7bba --- /dev/null +++ b/cli/borges/file.go @@ -0,0 +1,50 @@ +package main + +import ( + "os" + + "github.com/src-d/borges" + "github.com/src-d/borges/storage" + core "gopkg.in/src-d/core-retrieval.v0" +) + +const ( + fileCmdName = "file" + fileCmdShortName = "produce jobs from file" + fileCmdLongDesc = "" +) + +// fileCommand is a producer subcommand. +var fileCommand = &fileCmd{producerSubcmd: newProducerSubcmd( + fileCmdName, + fileCmdShortName, + fileCmdLongDesc, +)} + +type fileCmd struct { + producerSubcmd + + filePositionalArgs `positional-args:"true" required:"1"` +} + +type filePositionalArgs struct { + File string `positional-arg-name:"path"` +} + +func (c *fileCmd) Execute(args []string) error { + if err := c.producerSubcmd.init(); err != nil { + return err + } + defer c.broker.Close() + + return c.generateJobs(c.jobIter) +} + +func (c *fileCmd) jobIter() (borges.JobIter, error) { + storer := storage.FromDatabase(core.Database()) + f, err := os.Open(c.File) + if err != nil { + return nil, err + } + return borges.NewLineJobIter(f, storer), nil +} diff --git a/cli/borges/init.go b/cli/borges/init.go index 236fae09..9890b86c 100644 --- a/cli/borges/init.go +++ b/cli/borges/init.go @@ -15,8 +15,15 @@ const ( initCmdLongDesc = "" ) +var initCommand = &initCmd{simpleCommand: newSimpleCommand( + initCmdName, + initCmdShortDesc, + initCmdLongDesc, +)} + type initCmd struct { - loggerCmd + simpleCommand + loggerOpts } func (c *initCmd) Execute(args []string) error { @@ -34,3 +41,15 @@ func (c *initCmd) Execute(args []string) error { log15.Info("database was successfully initialized") return nil } + +func init() { + _, err := parser.AddCommand( + initCommand.Name(), + initCommand.ShortDescription(), + initCommand.LongDescription(), + initCommand) + + if err != nil { + panic(err) + } +} diff --git a/cli/borges/main.go b/cli/borges/main.go index f1e09705..be2dc3fe 100644 --- a/cli/borges/main.go +++ b/cli/borges/main.go @@ -1,19 +1,15 @@ package main import ( - "fmt" - "net/http" - _ "net/http/pprof" "os" "github.com/inconshreveable/log15" "github.com/jessevdk/go-flags" - "github.com/src-d/borges/metrics" ) const ( - name string = "borges" - desc string = "Fetches, organizes and stores repositories." + borgesName string = "borges" + borgesDescription string = "Fetches, organizes and stores repositories." ) var ( @@ -22,120 +18,14 @@ var ( log log15.Logger ) -type loggerCmd struct { - LogLevel string `short:"" long:"loglevel" description:"max log level enabled" default:"info"` - LogFile string `short:"" long:"logfile" description:"path to file where logs will be stored" default:""` - LogFormat string `short:"" long:"logformat" description:"format used to output the logs (json or text)" default:"text"` -} - -type cmd struct { - loggerCmd - Queue string `long:"queue" default:"borges" description:"queue name"` - Metrics bool `long:"metrics" description:"expose a metrics endpoint using an HTTP server"` - MetricsPort int `long:"metrics-port" description:"port to bind metrics to" default:"6062"` - Profiler bool `long:"profiler" description:"start CPU, memory and block profilers"` - ProfilerPort int `long:"profiler-port" description:"port to bind profiler to" default:"6061"` -} - -func (c *loggerCmd) init() { - lvl, err := log15.LvlFromString(c.LogLevel) - if err != nil { - panic(fmt.Sprintf("unknown level name %q", c.LogLevel)) - } - - var handlers []log15.Handler - var format log15.Format - if c.LogFormat == "json" { - format = log15.JsonFormat() - handlers = append( - handlers, - log15.CallerFileHandler(log15.Must.FileHandler(os.Stdout.Name(), format)), - ) - } else { - format = log15.LogfmtFormat() - handlers = append( - handlers, - log15.CallerFileHandler(log15.StdoutHandler), - ) - } - - if c.LogFile != "" { - handlers = append( - handlers, - log15.CallerFileHandler(log15.Must.FileHandler(c.LogFile, format)), - ) - } - - log15.Root().SetHandler(log15.LvlFilterHandler(lvl, log15.MultiHandler(handlers...))) -} - -func (c *cmd) init() { - c.loggerCmd.init() - c.maybeStartProfiler() - c.maybeStartMetrics() -} - -func (c *cmd) maybeStartProfiler() { - if c.Profiler { - addr := fmt.Sprintf("0.0.0.0:%d", c.ProfilerPort) - go func() { - log.Debug("Started CPU, memory and block profilers at", "address", addr) - err := http.ListenAndServe(addr, nil) - if err != nil { - log.Warn("Profiler failed to listen and serve at", "address", addr, "error", err) - } - }() - } -} - -func (c *cmd) maybeStartMetrics() { - if c.Metrics { - addr := fmt.Sprintf("0.0.0.0:%d", c.MetricsPort) - go func() { - log.Debug("Started metrics service at", "address", addr) - if err := metrics.Start(addr); err != nil { - log.Warn("metrics service stopped", "err", err) - } - }() - } -} +var parser = flags.NewParser(nil, flags.Default) func init() { - log = log15.New("module", name) + log = log15.New("module", borgesName) + parser.LongDescription = borgesDescription } func main() { - parser := flags.NewParser(nil, flags.Default) - parser.LongDescription = desc - - if _, err := parser.AddCommand(versionCmdName, versionCmdShortDesc, - versionCmdLongDesc, &versionCmd{}); err != nil { - panic(err) - } - - if _, err := parser.AddCommand(consumerCmdName, consumerCmdShortDesc, - consumerCmdLongDesc, &consumerCmd{}); err != nil { - panic(err) - } - - c, err := parser.AddCommand(producerCmdName, producerCmdShortDesc, - producerCmdLongDesc, &producerCmd{}) - if err != nil { - panic(err) - } - - setPrioritySettings(c) - - if _, err := parser.AddCommand(initCmdName, initCmdShortDesc, - initCmdLongDesc, new(initCmd)); err != nil { - panic(err) - } - - if _, err := parser.AddCommand(packerCmdName, packerCmdShortDesc, - packerCmdLongDesc, new(packerCmd)); err != nil { - panic(err) - } - if _, err := parser.Parse(); err != nil { if err, ok := err.(*flags.Error); ok { if err.Type == flags.ErrHelp { diff --git a/cli/borges/mentions.go b/cli/borges/mentions.go new file mode 100644 index 00000000..9dc26642 --- /dev/null +++ b/cli/borges/mentions.go @@ -0,0 +1,51 @@ +package main + +import ( + "github.com/src-d/borges" + "github.com/src-d/borges/storage" + core "gopkg.in/src-d/core-retrieval.v0" +) + +const ( + mentionsCmdName = "mentions" + mentionsCmdShortName = "produce jobs from mentions" + mentionsCmdLongDesc = "" +) + +var mentionsCommand = &mentionsCmd{producerSubcmd: newProducerSubcmd( + mentionsCmdName, + mentionsCmdShortName, + mentionsCmdLongDesc, +)} + +// mentionsCommand is a producer subcommand. +type mentionsCmd struct { + producerSubcmd + + MentionsQueue string `long:"mentions-queue" default:"rovers" description:"queue name used to obtain mentions if the source type is 'mentions'"` + RepublishBuried bool `long:"republish-buried" description:"republishes again all buried jobs before starting to listen for mentions, used with --source=mentions"` +} + +func (c *mentionsCmd) Execute(args []string) error { + if err := c.producerSubcmd.init(); err != nil { + return err + } + defer c.broker.Close() + + return c.generateJobs(c.jobIter) +} + +func (c *mentionsCmd) jobIter() (borges.JobIter, error) { + storer := storage.FromDatabase(core.Database()) + q, err := c.broker.Queue(c.MentionsQueue) + if err != nil { + return nil, err + } + + if c.RepublishBuried { + if err := q.RepublishBuried(); err != nil { + return nil, err + } + } + return borges.NewMentionJobIter(q, storer), nil +} diff --git a/cli/borges/packer.go b/cli/borges/packer.go index 43d4868f..bbfeca17 100644 --- a/cli/borges/packer.go +++ b/cli/borges/packer.go @@ -20,8 +20,14 @@ const ( packerCmdLongDesc = "" ) +var packerCommand = &packerCmd{command: newCommand( + packerCmdName, + packerCmdShortDesc, + packerCmdLongDesc, +)} + type packerCmd struct { - cmd + command File string `long:"file" short:"f" required:"true" description:"file with the repositories to pack (one per line)"` OutputDir string `long:"to" default:"repositories" description:"path to store the packed siva files"` Timeout string `long:"timeout" default:"30m" description:"time to wait to consider a job failed"` @@ -93,3 +99,15 @@ func (c *packerCmd) newRootedTransactioner() (repository.RootedTransactioner, er tmpFs, ), nil } + +func init() { + _, err := parser.AddCommand( + packerCommand.Name(), + packerCommand.ShortDescription(), + packerCommand.LongDescription(), + packerCommand) + + if err != nil { + panic(err) + } +} diff --git a/cli/borges/producer.go b/cli/borges/producer.go index 04aadb88..8d83c22b 100644 --- a/cli/borges/producer.go +++ b/cli/borges/producer.go @@ -2,15 +2,13 @@ package main import ( "fmt" - "os" "strconv" "strings" flags "github.com/jessevdk/go-flags" "github.com/src-d/borges" - "github.com/src-d/borges/storage" - "gopkg.in/src-d/core-retrieval.v0" + core "gopkg.in/src-d/core-retrieval.v0" "gopkg.in/src-d/framework.v0/queue" "gopkg.in/src-d/go-git.v4/utils/ioutil" ) @@ -21,60 +19,60 @@ const ( producerCmdLongDesc = "" ) +var producerCommand = &producerCmd{simpleCommand: newSimpleCommand( + producerCmdName, + producerCmdShortDesc, + producerCmdLongDesc, +)} + type producerCmd struct { - cmd - Source string `long:"source" default:"mentions" description:"source to produce jobs from (mentions, file)"` - MentionsQueue string `long:"mentionsqueue" default:"rovers" description:"queue name used to obtain mentions if the source type is 'mentions'"` - File string `long:"file" description:"path to a file to read URLs from, used with --source=file"` - RepublishBuried bool `long:"republish-buried" description:"republishes again all buried jobs before starting to listen for mentions, used with --source=mentions"` - Priority uint8 `long:"priority" default:"4" description:"priority used to enqueue jobs, goes from 0 (lowest) to :MAX: (highest)"` - JobsRetries int `long:"job-retries" default:"5" description:"number of times a falied job should be processed again before reject it"` + simpleCommand } -// Changes the priority description and default on runtime as it is not -// possible to create a dynamic tag -func setPrioritySettings(c *flags.Command) { - options := c.Options() +type producerSubcmd struct { + command + broker queue.Broker + queue queue.Queue - for _, o := range options { - if o.LongName == "priority" { - o.Default[0] = strconv.Itoa((int(queue.PriorityNormal))) - o.Description = strings.Replace( - o.Description, ":MAX:", strconv.Itoa(int(queue.PriorityUrgent)), 1) - } - } + Priority uint8 `long:"priority" default:"4" description:"priority used to enqueue jobs, goes from 0 (lowest) to :MAX: (highest)"` + JobsRetries int `long:"job-retries" default:"5" description:"number of times a falied job should be processed again before reject it"` } -func checkPriority(prio uint8) error { - if prio > uint8(queue.PriorityUrgent) { - return fmt.Errorf("Priority must be between 0 and %d", queue.PriorityUrgent) - } - - return nil +func newProducerSubcmd(name, short, long string) producerSubcmd { + return producerSubcmd{command: newCommand( + name, + short, + long, + )} } -func (c *producerCmd) Execute(args []string) error { - c.init() +func (c *producerSubcmd) init() error { + c.command.init() err := checkPriority(c.Priority) if err != nil { return err } - b := core.Broker() - defer b.Close() - q, err := b.Queue(c.Queue) + c.broker = core.Broker() + c.queue, err = c.broker.Queue(c.Queue) if err != nil { return err } - ji, err := c.jobIter(b) + return nil +} + +type getIterFunc func() (borges.JobIter, error) + +func (c *producerSubcmd) generateJobs(getIter getIterFunc) error { + ji, err := getIter() if err != nil { return err } defer ioutil.CheckClose(ji, &err) - p := borges.NewProducer(log, ji, q, + p := borges.NewProducer(log, ji, c.queue, queue.Priority(c.Priority), c.JobsRetries) p.Start() @@ -82,29 +80,56 @@ func (c *producerCmd) Execute(args []string) error { return err } -func (c *producerCmd) jobIter(b queue.Broker) (borges.JobIter, error) { - storer := storage.FromDatabase(core.Database()) +// Changes the priority description and default on runtime as it is not +// possible to create a dynamic tag +func setPrioritySettings(c *flags.Command) { + options := c.Options() - switch c.Source { - case "mentions": - q, err := b.Queue(c.MentionsQueue) - if err != nil { - return nil, err + for _, o := range options { + if o.LongName == "priority" { + o.Default[0] = strconv.Itoa((int(queue.PriorityNormal))) + o.Description = strings.Replace( + o.Description, ":MAX:", strconv.Itoa(int(queue.PriorityUrgent)), 1) } + } +} + +func checkPriority(prio uint8) error { + if prio > uint8(queue.PriorityUrgent) { + return fmt.Errorf("Priority must be between 0 and %d", queue.PriorityUrgent) + } + + return nil +} + +var producerSubcommands = []ExecutableCommander{ + mentionsCommand, + fileCommand, + republishCommand, + updateCommand, +} + +func init() { + c, err := parser.AddCommand( + producerCommand.name, + producerCommand.shortDescription, + producerCommand.longDescription, + producerCommand) + + if err != nil { + panic(err) + } + + for _, subcommand := range producerSubcommands { + _, err := c.AddCommand( + subcommand.Name(), + subcommand.ShortDescription(), + subcommand.LongDescription(), + subcommand, + ) - if c.RepublishBuried { - if err := q.RepublishBuried(); err != nil { - return nil, err - } - } - return borges.NewMentionJobIter(q, storer), nil - case "file": - f, err := os.Open(c.File) if err != nil { - return nil, err + panic(err) } - return borges.NewLineJobIter(f, storer), nil - default: - return nil, fmt.Errorf("invalid source: %s", c.Source) } } diff --git a/cli/borges/republish.go b/cli/borges/republish.go new file mode 100644 index 00000000..b757b9cd --- /dev/null +++ b/cli/borges/republish.go @@ -0,0 +1,23 @@ +package main + +const ( + republishCmdName = "republish" + republishCmdShortName = "requeue jobs from buried queues" + republishCmdLongDesc = "" +) + +// republishCommand is a producer subcommand. +var republishCommand = &republishCmd{producerSubcmd: newProducerSubcmd( + republishCmdName, + republishCmdShortName, + republishCmdLongDesc, +)} + +type republishCmd struct { + producerSubcmd +} + +func (c *republishCmd) Execute(args []string) error { + log.Warn("Republish command is not implemented yet") + return nil +} diff --git a/cli/borges/update.go b/cli/borges/update.go new file mode 100644 index 00000000..901f4ac7 --- /dev/null +++ b/cli/borges/update.go @@ -0,0 +1,23 @@ +package main + +const ( + updateCmdName = "update" + updateCmdShortName = "update repositories processed previously" + updateCmdLongDesc = "" +) + +// updateCommand is a producer subcommand. +var updateCommand = &updateCmd{producerSubcmd: newProducerSubcmd( + updateCmdName, + updateCmdShortName, + updateCmdLongDesc, +)} + +type updateCmd struct { + producerSubcmd +} + +func (c *updateCmd) Execute(args []string) error { + log.Warn("Update command is not implemented yet") + return nil +} diff --git a/cli/borges/version.go b/cli/borges/version.go index 39c18589..aae00b76 100644 --- a/cli/borges/version.go +++ b/cli/borges/version.go @@ -8,9 +8,30 @@ const ( versionCmdLongDesc = versionCmdShortDesc ) -type versionCmd struct{} +var versionCommand = &versionCmd{simpleCommand: newSimpleCommand( + versionCmdName, + versionCmdShortDesc, + versionCmdLongDesc, +)} + +type versionCmd struct { + simpleCommand +} func (c *versionCmd) Execute(args []string) error { - fmt.Printf("%s - %s (build %s)\n", name, version, build) + println("VERSION") + fmt.Printf("%s - %s (build %s)\n", borgesName, version, build) return nil } + +func init() { + _, err := parser.AddCommand( + versionCommand.name, + versionCommand.shortDescription, + versionCommand.longDescription, + versionCommand) + + if err != nil { + panic(err) + } +} From 46bbc12617cd4ee070c6bfa7bee2199144e3ff79 Mon Sep 17 00:00:00 2001 From: Manuel Carmona Date: Thu, 12 Apr 2018 15:39:47 +0200 Subject: [PATCH 2/4] Remove producer subcommads placeholders: republish, update Signed-off-by: Manuel Carmona --- cli/borges/producer.go | 2 -- cli/borges/republish.go | 23 ----------------------- cli/borges/update.go | 23 ----------------------- 3 files changed, 48 deletions(-) delete mode 100644 cli/borges/republish.go delete mode 100644 cli/borges/update.go diff --git a/cli/borges/producer.go b/cli/borges/producer.go index 8d83c22b..c08f8883 100644 --- a/cli/borges/producer.go +++ b/cli/borges/producer.go @@ -105,8 +105,6 @@ func checkPriority(prio uint8) error { var producerSubcommands = []ExecutableCommander{ mentionsCommand, fileCommand, - republishCommand, - updateCommand, } func init() { diff --git a/cli/borges/republish.go b/cli/borges/republish.go deleted file mode 100644 index b757b9cd..00000000 --- a/cli/borges/republish.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -const ( - republishCmdName = "republish" - republishCmdShortName = "requeue jobs from buried queues" - republishCmdLongDesc = "" -) - -// republishCommand is a producer subcommand. -var republishCommand = &republishCmd{producerSubcmd: newProducerSubcmd( - republishCmdName, - republishCmdShortName, - republishCmdLongDesc, -)} - -type republishCmd struct { - producerSubcmd -} - -func (c *republishCmd) Execute(args []string) error { - log.Warn("Republish command is not implemented yet") - return nil -} diff --git a/cli/borges/update.go b/cli/borges/update.go deleted file mode 100644 index 901f4ac7..00000000 --- a/cli/borges/update.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -const ( - updateCmdName = "update" - updateCmdShortName = "update repositories processed previously" - updateCmdLongDesc = "" -) - -// updateCommand is a producer subcommand. -var updateCommand = &updateCmd{producerSubcmd: newProducerSubcmd( - updateCmdName, - updateCmdShortName, - updateCmdLongDesc, -)} - -type updateCmd struct { - producerSubcmd -} - -func (c *updateCmd) Execute(args []string) error { - log.Warn("Update command is not implemented yet") - return nil -} From 388221756c46585c2f4ff59055a2b616dee7fa06 Mon Sep 17 00:00:00 2001 From: Manuel Carmona Date: Thu, 12 Apr 2018 16:40:18 +0200 Subject: [PATCH 3/4] Rename cli commands interfaces Signed-off-by: Manuel Carmona --- cli/borges/command.go | 6 +++--- cli/borges/producer.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cli/borges/command.go b/cli/borges/command.go index 7dcd92eb..953ae50e 100644 --- a/cli/borges/command.go +++ b/cli/borges/command.go @@ -10,12 +10,12 @@ import ( "github.com/src-d/borges/metrics" ) -type ExecutableCommander interface { - Commander +type ExecutableCommand interface { + Command Execute(args []string) error } -type Commander interface { +type Command interface { Name() string ShortDescription() string LongDescription() string diff --git a/cli/borges/producer.go b/cli/borges/producer.go index c08f8883..2468e7f3 100644 --- a/cli/borges/producer.go +++ b/cli/borges/producer.go @@ -102,7 +102,7 @@ func checkPriority(prio uint8) error { return nil } -var producerSubcommands = []ExecutableCommander{ +var producerSubcommands = []ExecutableCommand{ mentionsCommand, fileCommand, } From d47ce6ea6dfe4cda2cf73d3078b072a163b1c97d Mon Sep 17 00:00:00 2001 From: Manuel Carmona Date: Tue, 17 Apr 2018 11:29:25 +0200 Subject: [PATCH 4/4] Rename consts xCmdShortName to xCmdShortDesct in mentions and file command Signed-off-by: Manuel Carmona --- cli/borges/file.go | 4 ++-- cli/borges/mentions.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cli/borges/file.go b/cli/borges/file.go index f2de7bba..7feeb277 100644 --- a/cli/borges/file.go +++ b/cli/borges/file.go @@ -10,14 +10,14 @@ import ( const ( fileCmdName = "file" - fileCmdShortName = "produce jobs from file" + fileCmdShortDesc = "produce jobs from file" fileCmdLongDesc = "" ) // fileCommand is a producer subcommand. var fileCommand = &fileCmd{producerSubcmd: newProducerSubcmd( fileCmdName, - fileCmdShortName, + fileCmdShortDesc, fileCmdLongDesc, )} diff --git a/cli/borges/mentions.go b/cli/borges/mentions.go index 9dc26642..b858e2f1 100644 --- a/cli/borges/mentions.go +++ b/cli/borges/mentions.go @@ -8,13 +8,13 @@ import ( const ( mentionsCmdName = "mentions" - mentionsCmdShortName = "produce jobs from mentions" + mentionsCmdShortDesc = "produce jobs from mentions" mentionsCmdLongDesc = "" ) var mentionsCommand = &mentionsCmd{producerSubcmd: newProducerSubcmd( mentionsCmdName, - mentionsCmdShortName, + mentionsCmdShortDesc, mentionsCmdLongDesc, )}