diff --git a/logging/log.go b/logging/log.go index 2af5e9f634..527d6decb6 100644 --- a/logging/log.go +++ b/logging/log.go @@ -394,6 +394,13 @@ func (l logger) GetTelemetrySession() string { return l.loggerState.telemetry.telemetryConfig.SessionGUID } +func (l logger) GetTelemetryVersion() string { + if !l.GetTelemetryEnabled() { + return "" + } + return l.loggerState.telemetry.telemetryConfig.Version +} + func (l logger) GetTelemetryHostName() string { if !l.GetTelemetryEnabled() { return "" diff --git a/logging/telemetry.go b/logging/telemetry.go index 7f05267cd9..a02d18ac13 100644 --- a/logging/telemetry.go +++ b/logging/telemetry.go @@ -132,12 +132,14 @@ func ReadTelemetryConfigOrDefault(dataDir string, genesisID string) (cfg Telemet return } } - ch := config.GetCurrentVersion().Channel + ver := config.GetCurrentVersion() + ch := ver.Channel // Should not happen, but default to "dev" if channel is unspecified. if ch == "" { ch = "dev" } cfg.ChainID = fmt.Sprintf("%s-%s", ch, genesisID) + cfg.Version = ver.String() return cfg, err } @@ -264,6 +266,7 @@ func (t *telemetryState) logTelemetry(l logger, message string, details interfac entry := l.entry.WithFields(Fields{ "session": l.GetTelemetrySession(), "instanceName": l.GetInstanceName(), + "v": l.GetTelemetryVersion(), }) // Populate entry like logrus.entry.log() does entry.Time = time.Now() diff --git a/logging/telemetryCommon.go b/logging/telemetryCommon.go index 3e8610b41f..d4d57a817d 100644 --- a/logging/telemetryCommon.go +++ b/logging/telemetryCommon.go @@ -64,6 +64,7 @@ type TelemetryConfig struct { FilePath string // Path to file on disk, if any ChainID string `json:"-"` SessionGUID string `json:"-"` + Version string `json:"-"` UserName string Password string } diff --git a/logging/telemetryFilteredHook.go b/logging/telemetryFilteredHook.go index 771a7e89fd..86c402b878 100644 --- a/logging/telemetryFilteredHook.go +++ b/logging/telemetryFilteredHook.go @@ -63,7 +63,7 @@ func (hook *telemetryFilteredHook) Fire(entry *logrus.Entry) error { if entry.Level <= hook.reportLogLevel { // Logging entry at a level which should include log history // Create a new entry augmented with the history field. - newEntry := entry.WithFields(Fields{"log": hook.history.string(), "session": hook.sessionGUID}) + newEntry := entry.WithFields(Fields{"log": hook.history.string(), "session": hook.sessionGUID, "v": hook.telemetryConfig.Version}) newEntry.Time = entry.Time newEntry.Level = entry.Level newEntry.Message = entry.Message @@ -82,6 +82,11 @@ func (hook *telemetryFilteredHook) Fire(entry *logrus.Entry) error { } else { newEntry = entry.WithField("session", hook.sessionGUID) } + + // Also add version field, if not already present. + if _, has := entry.Data["v"]; !has { + newEntry = newEntry.WithField("v", hook.telemetryConfig.Version) + } return hook.wrappedHook.Fire(newEntry) }