Skip to content

Consolidate env reading to single config object. #600

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

Merged
merged 52 commits into from
Jun 11, 2025

Conversation

purple4reina
Copy link
Contributor

@purple4reina purple4reina commented May 15, 2025

What does this PR do?

Consolidate all config and (most) env var reading into a single config object.

Furthermore, the environment is now only read when it's needed. The config object will only resolve a config setting when it is accessed. Meaning, we'll be reading a ton fewer environment variables during initialization which will lead to faster cold starts.

Motivation

Tests are currently failing on #598 with a circular import error. Consolidating all config reading to a single location will make fixing that much much much easier.

Testing Guidelines

Additional Notes

Note that for all the boolean like env vars, it is now possible to set the environment value to "1" to configure for a True evaluation. The customer can then use "0" or really anything other than "true" or "1" to get a False evaluation.

Types of Changes

  • Bug fix
  • New feature
  • Breaking change
  • Misc (docs, refactoring, dependency upgrade, etc.)

Check all that apply

  • This PR's description is comprehensive
  • This PR contains breaking changes that are documented in the description
  • This PR introduces new APIs or parameters that are documented and unlikely to change in the foreseeable future
  • This PR impacts documentation, and it has been updated (or a ticket has been logged)
  • This PR's changes are covered by the automated tests
  • This PR collects user input/sensitive content into Datadog
  • This PR passes the integration tests (ask a Datadog member to run the tests)

@purple4reina purple4reina force-pushed the rey.abolofia/config-object branch 7 times, most recently from fa21286 to 95cb0d6 Compare May 15, 2025 20:53
return val.lower() == "true" or val == "1"


class Config:
Copy link
Contributor

Choose a reason for hiding this comment

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

Code Quality Violation

Class Config should have an init method (...read more)

Ensure that a class has an __init__ method. This check is bypassed when the class is a data class (annotated with @dataclass).

View in Datadog  Leave us feedback  Documentation

@purple4reina purple4reina force-pushed the rey.abolofia/config-object branch 3 times, most recently from 7d2950e to dd6b1d2 Compare June 5, 2025 18:18
# int. let's special case that here, because it's sure to happen in
# customer code.
err = d.get("error")
if err and type(err) == bool:
Copy link
Contributor

Choose a reason for hiding this comment

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

Code Quality Violation

use isinstance() instead of type() (...read more)

Using type checks if an object o is exactly a given type. In contrast, isinstance checks if o is a given type, or any subclass of the given type, thus supporting inheritance. In addition,isinstance is generally faster than type.

View in Datadog  Leave us feedback  Documentation

@purple4reina purple4reina force-pushed the rey.abolofia/config-object branch 5 times, most recently from 37e4ccb to 6449589 Compare June 10, 2025 19:39
@purple4reina purple4reina force-pushed the rey.abolofia/config-object branch from 6449589 to 2957287 Compare June 10, 2025 19:56
@@ -102,7 +101,6 @@ def pop_node(module_name):
end_time_ns = time.time_ns()
node.end_time_ns = end_time_ns
if not import_stack: # import_stack empty, a root node has been found
global root_nodes
Copy link
Contributor Author

Choose a reason for hiding this comment

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

These globals are not required because the affected objects are lists.

@purple4reina purple4reina marked this pull request as ready for review June 10, 2025 21:11
@purple4reina purple4reina requested review from a team as code owners June 10, 2025 21:11
@purple4reina purple4reina force-pushed the rey.abolofia/config-object branch from f869908 to 7bc8751 Compare June 10, 2025 21:52
return [val.strip() for val in val.split(",") if val.strip()]


class Config:
Copy link
Contributor

Choose a reason for hiding this comment

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

Code Quality Violation

Class Config should have an init method (...read more)

Ensure that a class has an __init__ method. This check is bypassed when the class is a data class (annotated with @dataclass).

View in Datadog  Leave us feedback  Documentation

Copy link
Contributor

@joeyzhao2018 joeyzhao2018 left a comment

Choose a reason for hiding this comment

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

LGTM. Thank you for doing this.

@purple4reina purple4reina merged commit b3cf1c2 into main Jun 11, 2025
69 checks passed
@purple4reina purple4reina deleted the rey.abolofia/config-object branch June 11, 2025 15:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants