diff --git a/version.go b/version.go index fc2bfd8..a02f2a3 100644 --- a/version.go +++ b/version.go @@ -29,11 +29,37 @@ const ( // appPreRelease MUST only contain characters from semanticAlphabet per // the semantic versioning spec. appPreRelease = "beta" + + // defaultAgentName is the default name of the software that is added as + // the first part of the user agent string. + defaultAgentName = "loopd" ) +// AgentName stores the name of the software that is added as the first part of +// the user agent string. This defaults to the value "loopd" when being run as +// a standalone component but can be overwritten by LiT for example when loopd +// is integrated into the UI. +var AgentName = defaultAgentName + // Version returns the application version as a properly formed string per the -// semantic versioning 2.0.0 spec (http://semver.org/). +// semantic versioning 2.0.0 spec (http://semver.org/) and the commit it was +// built on. func Version() string { + // Append commit hash of current build to version. + return fmt.Sprintf("%s commit=%s", semanticVersion(), Commit) +} + +// UserAgent returns the full user agent string that identifies the software +// that is submitting swaps to the loop server. +func UserAgent() string { + // Assemble full string, including the commit hash of current build. + return fmt.Sprintf( + "%s/v%s/commit=%s", AgentName, semanticVersion(), Commit, + ) +} + +// semanticVersion returns the SemVer part of the version. +func semanticVersion() string { // Start with the major, minor, and patch versions. version := fmt.Sprintf("%d.%d.%d", appMajor, appMinor, appPatch) @@ -46,9 +72,6 @@ func Version() string { version = fmt.Sprintf("%s-%s", version, preRelease) } - // Append commit hash of current build to version. - version = fmt.Sprintf("%s commit=%s", version, Commit) - return version }