Skip to content

Commit

Permalink
Add ApmConfig.calculate_is_legacy
Browse files Browse the repository at this point in the history
  • Loading branch information
tammy-baylis-swi committed Jan 29, 2025
1 parent 2e02c7d commit 52231f7
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 2 deletions.
19 changes: 17 additions & 2 deletions solarwinds_apm/apm_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,20 @@ def _get_extension_components(
noop_extension.OboeAPIOptions,
)

@classmethod
def calculate_is_legacy(cls) -> bool:
"""Checks if agent is running in a legacy environment.
Order of precedence: Environment Variable > config file > default False
"""
is_legacy = False
cnf_dict = cls.get_cnf_dict()
if cnf_dict:
is_legacy = cls.convert_to_bool(cnf_dict.get("legacy", is_legacy))
is_legacy = cls.convert_to_bool(
os.environ.get("SW_APM_LEGACY", is_legacy)
)
return is_legacy

@classmethod
def calculate_is_lambda(cls) -> bool:
"""Checks if agent is running in an AWS Lambda environment."""
Expand Down Expand Up @@ -730,13 +744,14 @@ def get(self, key: str, default: Any = None):
)
return value if value is not None else default

def get_cnf_dict(self) -> Any:
@classmethod
def get_cnf_dict(cls) -> Any:
"""Load Python dict from confg file (json), if any"""
cnf_filepath = os.environ.get("SW_APM_CONFIG_FILE")
cnf_dict = None

if not cnf_filepath:
cnf_filepath = self._CONFIG_FILE_DEFAULT
cnf_filepath = cls._CONFIG_FILE_DEFAULT
if not os.path.isfile(cnf_filepath):
logger.debug("No config file at %s; skipping", cnf_filepath)
return cnf_dict
Expand Down
72 changes: 72 additions & 0 deletions tests/unit/test_apm_config/test_apm_config_is_legacy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# © 2025 SolarWinds Worldwide, LLC. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at:http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

import os
import pytest

from solarwinds_apm.apm_config import SolarWindsApmConfig

class TestSolarWindsApmConfigIsLegacy:
def test_calculate_is_legacy_default(self, mocker):
mocker.patch(
"solarwinds_apm.apm_config.SolarWindsApmConfig.get_cnf_dict",
return_value={}
)
assert SolarWindsApmConfig.calculate_is_legacy() is False

def test_calculate_is_legacy_with_env_var_false(self, mocker):
mocker.patch.dict(os.environ, {"SW_APM_LEGACY": "false"})
assert SolarWindsApmConfig.calculate_is_legacy() is False

def test_calculate_is_legacy_with_env_var_true(self, mocker):
mocker.patch.dict(os.environ, {"SW_APM_LEGACY": "true"})
assert SolarWindsApmConfig.calculate_is_legacy() is True

def test_calculate_is_legacy_with_config_false(self, mocker):
mocker.patch(
"solarwinds_apm.apm_config.SolarWindsApmConfig.get_cnf_dict",
return_value={"legacy": "false"},
)
assert SolarWindsApmConfig.calculate_is_legacy() is False

def test_calculate_is_legacy_with_config_true(self, mocker):
mocker.patch(
"solarwinds_apm.apm_config.SolarWindsApmConfig.get_cnf_dict",
return_value={"legacy": "true"},
)
assert SolarWindsApmConfig.calculate_is_legacy() is True

def test_calculate_is_legacy_with_config_false_env_var_false(self, mocker):
mocker.patch.dict(os.environ, {"SW_APM_LEGACY": "false"})
mocker.patch(
"solarwinds_apm.apm_config.SolarWindsApmConfig.get_cnf_dict",
return_value={"legacy": "false"},
)
assert SolarWindsApmConfig.calculate_is_legacy() is False

def test_calculate_is_legacy_with_config_false_env_var_true(self, mocker):
mocker.patch.dict(os.environ, {"SW_APM_LEGACY": "true"})
mocker.patch(
"solarwinds_apm.apm_config.SolarWindsApmConfig.get_cnf_dict",
return_value={"legacy": "false"},
)
assert SolarWindsApmConfig.calculate_is_legacy() is True

def test_calculate_is_legacy_with_config_true_env_var_false(self, mocker):
mocker.patch.dict(os.environ, {"SW_APM_LEGACY": "false"})
mocker.patch(
"solarwinds_apm.apm_config.SolarWindsApmConfig.get_cnf_dict",
return_value={"legacy": "true"},
)
assert SolarWindsApmConfig.calculate_is_legacy() is False

def test_calculate_is_legacy_with_config_true_env_var_true(self, mocker):
mocker.patch.dict(os.environ, {"SW_APM_LEGACY": "true"})
mocker.patch(
"solarwinds_apm.apm_config.SolarWindsApmConfig.get_cnf_dict",
return_value={"legacy": "true"},
)
assert SolarWindsApmConfig.calculate_is_legacy() is True

0 comments on commit 52231f7

Please sign in to comment.