From b2a602e96c2e4b3e050f7da1cdedc73e3a3208aa Mon Sep 17 00:00:00 2001 From: Marty Tippin <120425148+tippmar-nr@users.noreply.github.com> Date: Tue, 8 Oct 2024 11:25:14 -0500 Subject: [PATCH] Refactor to log deprecated environment variables one time during startup --- src/Agent/NewRelic/Agent/Core/AgentManager.cs | 31 ++++++++++++++++--- .../Core/SharedInterfaces/Environment.cs | 15 +-------- 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/Agent/NewRelic/Agent/Core/AgentManager.cs b/src/Agent/NewRelic/Agent/Core/AgentManager.cs index e8ac5f0df..6fbf75254 100644 --- a/src/Agent/NewRelic/Agent/Core/AgentManager.cs +++ b/src/Agent/NewRelic/Agent/Core/AgentManager.cs @@ -19,6 +19,7 @@ using System; using System.Collections.Generic; using System.Diagnostics; +using System.Linq; using System.Runtime.InteropServices; using System.Threading; @@ -246,6 +247,7 @@ private void LogInitialized() "NEW_RELIC_PROCESS_HOST_DISPLAY_NAME", "NEW_RELIC_IGNORE_SERVER_SIDE_CONFIG", "NEW_RELIC_LOG", + "NEW_RELIC_LOG_DIRECTORY", "NEW_RELIC_PROFILER_LOG_DIRECTORY", "NEW_RELIC_LOG_LEVEL", "NEW_RELIC_LOG_ENABLED", @@ -286,13 +288,23 @@ private void LogInitialized() "NEW_RELIC_SEND_DATA_ON_EXIT", "NEW_RELIC_SEND_DATA_ON_EXIT_THRESHOLD_MS", "NEW_RELIC_AZURE_FUNCTION_MODE_ENABLED", - "CORECLR_NEWRELIC_HOME", - "NEWRELIC_HOME", - "NEWRELIC_INSTALL_PATH", - "NEWRELIC_PROFILER_LOG_DIRECTORY", - "NEWRELIC_LOG_LEVEL", }; + List<(string,string)> environmentVariablesDeprecated = new List<(string, string)> + { + ("CORECLR_NEWRELIC_HOME","CORECLR_NEW_RELIC_HOME"), + ("NEWRELIC_HOME", "NEW_RELIC_HOME"), + ("NEWRELIC_INSTALL_PATH", "NEW_RELIC_INSTALL_PATH"), + ("NEWRELIC_LOG_DIRECTORY", "NEW_RELIC_LOG_DIRECTORY"), + ("NEWRELIC_LOG_LEVEL", "NEW_RELIC_LOG_LEVEL"), + ("NEWRELIC_PROFILER_LOG_DIRECTORY", "NEW_RELIC_PROFILER_LOG_DIRECTOR"), + }; + + // so we can report the values as expected + environmentVariables.AddRange(environmentVariablesDeprecated.Select(tuple => tuple.Item1)); + // so we can report deprecated name but not log the value + environmentVariablesDeprecated.Add(("NEWRELIC_LICENSEKEY", "NEW_RELIC_LICENSE_KEY")); + List environmentVariablesSensitive = new List { "NEW_RELIC_LICENSE_KEY", "NEWRELIC_LICENSEKEY", @@ -319,6 +331,15 @@ private void LogInitialized() } } + foreach (var ev in environmentVariablesDeprecated) + { + if (!string.IsNullOrEmpty(System.Environment.GetEnvironmentVariable(ev.Item1))) + { + Log.Warn("Environment Variable {OldName} is deprecated and may be removed in a future major version. Please use {NewName} instead.", ev.Item1, ev.Item2); + } + } + + Log.Debug($".NET Runtime Version: {RuntimeInformation.FrameworkDescription}"); } diff --git a/src/Agent/NewRelic/Agent/Core/SharedInterfaces/Environment.cs b/src/Agent/NewRelic/Agent/Core/SharedInterfaces/Environment.cs index 3bfd0f37c..afa90cefe 100644 --- a/src/Agent/NewRelic/Agent/Core/SharedInterfaces/Environment.cs +++ b/src/Agent/NewRelic/Agent/Core/SharedInterfaces/Environment.cs @@ -24,7 +24,7 @@ public string GetEnvironmentVariable(string variable) public string GetEnvironmentVariableFromList(params string[] variables) { var envValue = (variables ?? Enumerable.Empty()) - .Select(v => GetEnvironmentVariableInternal(v)) + .Select(System.Environment.GetEnvironmentVariable) .FirstOrDefault(value => value != null); return envValue == string.Empty ? null : envValue; @@ -35,19 +35,6 @@ public string GetEnvironmentVariable(string variable, EnvironmentVariableTarget return System.Environment.GetEnvironmentVariable(variable, environmentVariableTarget); } - private string GetEnvironmentVariableInternal(string variable, EnvironmentVariableTarget environmentVariableTarget = EnvironmentVariableTarget.Process) - { - var value = System.Environment.GetEnvironmentVariable(variable, environmentVariableTarget); - - if (value != null && variable.StartsWith("NEWRELIC_", StringComparison.OrdinalIgnoreCase)) - { - var preferredVariableName = variable.ToUpper().Replace("NEWRELIC_", "NEW_RELIC_"); - Log.Warn($"The environment variable {variable} is deprecated and may be removed in a future major version. Please use {preferredVariableName} instead."); - } - - return value; - } - public Dictionary GetEnvironmentVariablesWithPrefix(string prefix) { var environmentVariables = System.Environment.GetEnvironmentVariables();