diff --git a/command/agent/agent.go b/command/agent/agent.go index 4c4b14802d..5cf79cdabc 100644 --- a/command/agent/agent.go +++ b/command/agent/agent.go @@ -514,6 +514,16 @@ func (a *Agent) Stats() map[string]map[string]string { "checks": toString(uint64(len(a.state.checks))), "services": toString(uint64(len(a.state.services))), } + + revision := a.config.Revision + if len(revision) > 8 { + revision = revision[:8] + } + stats["build"] = map[string]string{ + "revision": revision, + "version": a.config.Version, + "prerelease": a.config.VersionPrerelease, + } return stats } diff --git a/command/agent/command.go b/command/agent/command.go index 148f26bfa9..9ca39af856 100644 --- a/command/agent/command.go +++ b/command/agent/command.go @@ -25,14 +25,17 @@ var gracefulTimeout = 5 * time.Second // ShutdownCh. If two messages are sent on the ShutdownCh it will forcibly // exit. type Command struct { - Ui cli.Ui - ShutdownCh <-chan struct{} - args []string - logFilter *logutils.LevelFilter - agent *Agent - rpcServer *AgentRPC - httpServer *HTTPServer - dnsServer *DNSServer + Revision string + Version string + VersionPrerelease string + Ui cli.Ui + ShutdownCh <-chan struct{} + args []string + logFilter *logutils.LevelFilter + agent *Agent + rpcServer *AgentRPC + httpServer *HTTPServer + dnsServer *DNSServer } // readConfig is responsible for setup of our configuration using @@ -124,6 +127,11 @@ func (c *Command) readConfig() *Config { c.Ui.Error("WARNING: Windows is not recommended as a Consul server. Do not use in production.") } + // Set the version info + config.Revision = c.Revision + config.Version = c.Version + config.VersionPrerelease = c.VersionPrerelease + return config } diff --git a/command/agent/config.go b/command/agent/config.go index cd828ed2ae..739c2f4fd9 100644 --- a/command/agent/config.go +++ b/command/agent/config.go @@ -154,6 +154,15 @@ type Config struct { // ConsulConfig can either be provided or a default one created ConsulConfig *consul.Config `mapstructure:"-" json:"-"` + + // Revision is the GitCommit this maps to + Revision string `mapstructure:"-"` + + // Version is the release version number + Version string `mapstructure:"-"` + + // VersionPrerelease is a label for pre-release builds + VersionPrerelease string `mapstructure:"-"` } type dirEnts []os.FileInfo diff --git a/commands.go b/commands.go index 59118b01d8..069c61fc3e 100644 --- a/commands.go +++ b/commands.go @@ -17,8 +17,11 @@ func init() { Commands = map[string]cli.CommandFactory{ "agent": func() (cli.Command, error) { return &agent.Command{ - Ui: ui, - ShutdownCh: make(chan struct{}), + Revision: GitCommit, + Version: Version, + VersionPrerelease: VersionPrerelease, + Ui: ui, + ShutdownCh: make(chan struct{}), }, nil },