Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

include debug as env #890

Merged
merged 4 commits into from
Jun 29, 2022
Merged

include debug as env #890

merged 4 commits into from
Jun 29, 2022

Conversation

tbradellis
Copy link
Contributor

The config file will not work for newrelic.debug. Some of the checks happen prior to ServiceManager and ConfigService init. The property must be accessible prior to that setup.

Of note, the AgentConfigImpl still maintains variables for this debug setting. However, nothing is ever used from the AgentConfigImpl. From the looks of it, this was done because AgentConfigImpl implements AgentConfig which requires the implementation detail for isDebugEnabled. I surmise that at some point a decision was made to separate debug from AgentConfig because a need arose to log either to standard out or otherwise before the ConfigService was initialized.

The actual newrelic.debug implementation happens on Agent. It is also duplicated on AgentJarHelper. There are assumed historical reasons for this, and for the sake of time we decided to not refactor. It makes more sense to keep the current implementation and just extend it to also check for an environment variable in all the places that we currently check for the system property.

@tbradellis
Copy link
Contributor Author

tbradellis commented Jun 23, 2022

Reference that explains the naming convention:

* The tempdir setting is not prefixed with `config` because it can't be set through the config file,

For settings that cannot make use of config, we should continue this convention. I'm applying it to envvars as well.

// we haven't initialized the Agent yet, so we cannot check it in the usual low-cost way by
// calling Agent.isDebugEnabled(). So we duplicate the functionality here for use in a few cases.
private static final boolean isNewRelicDebug() {
final String newrelicDebug = "newrelic.debug";
return System.getProperty(newrelicDebug) != null && Boolean.getBoolean(newrelicDebug);
return Boolean.getBoolean(newrelicDebug) || Boolean.parseBoolean(System.getenv("NEWRELIC_DEBUG"));
Copy link
Contributor Author

@tbradellis tbradellis Jun 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Boolean.getBoolean already provides a null guard and defaults to false. removed unnecessary null guard.

clean code. no null guard needed

clean configfilehelper and settings.gradle

fix comment
@@ -76,6 +76,11 @@ public static boolean isDebugEnabled() {
return DEBUG;
}

private static boolean setDebug(){
Copy link
Contributor

@meiao meiao Jun 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could be a static initialization block. Or a public static method, that can be used in the other parts of the code that are making the same verification.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@meiao Are you thinking to include the other static members in the block or just for DEBUG?

Or just:

private static final boolean DEBUG;

    static{
        DEBUG = setDebug();
        //OR use below and drop the method?
        //DEBUG =Boolean.getBoolean("newrelic.debug") || Boolean.parseBoolean(System.getenv("NEWRELIC_DEBUG"));
    }

isDebugEnabled() is public so other places can already check. Do we want other places to be able to set? It was actually a final variable, so should only set once...unless you think change that?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just added setDebug as a private member because I thought it might look cleaner to move the boolean checks out of that section since there are multiple checks.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My first idea was to drop the method.
But as I read thru the PR, there are 3 other places that make the same logic:

Boolean.getBoolean(newrelicDebug) || Boolean.parseBoolean(System.getenv("NEWRELIC_DEBUG"));

So instead of copying that all the time, it could be a method that all call.

Copy link
Contributor Author

@tbradellis tbradellis Jun 23, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see. One of the problems with one of the places is that Agent class hasn't been initialized when it is called. It was unclear to me why the original author didn't decide to make static call from AgentJarHelper where they had to duplicate it.

// we haven't initialized the Agent yet, so we cannot check it in the usual low-cost way by

Do you think leave AgentJarHelper as is and just the Agent class in the other places where we can? Or something else?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OH, using it in AgentJarHelper would initialize it wouldn't it.

@@ -50,7 +50,7 @@ include 'functional_test'
include 'functional_test:weave_test'
include 'functional_test:weave_test_impl'

// JDK 9+ module system tests
JDK 9+ module system tests
Copy link
Contributor

@meiao meiao Jun 28, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why uncomment this line?
Ah, guess you were uncommenting the lines below this and accidentally uncommented this one.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oops!

@tbradellis tbradellis merged commit bde9267 into main Jun 29, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

2 participants