Rollout edit monitor to 10% users
Simplified the logic in whether to enable edit monitor by passing the
rollout percentage directly instead of reading from a env variable as
now we do not rely on any env var to control the rollout precentage.
Test: atest edit_monitor_utils_test
Bug: 365617369
Change-Id: Ia04d5737dafe2c9715a02f84eb5d75ba6119ceb4
diff --git a/tools/edit_monitor/daemon_manager.py b/tools/edit_monitor/daemon_manager.py
index 9a0abb6..2775b58 100644
--- a/tools/edit_monitor/daemon_manager.py
+++ b/tools/edit_monitor/daemon_manager.py
@@ -84,7 +84,7 @@
"edit_monitor",
self.user_name,
"ENABLE_EDIT_MONITOR",
- "EDIT_MONITOR_ROLLOUT_PERCENTAGE",
+ 10,
):
logging.warning("Edit monitor is disabled, exiting...")
return
diff --git a/tools/edit_monitor/utils.py b/tools/edit_monitor/utils.py
index 1a3275c..b88949d 100644
--- a/tools/edit_monitor/utils.py
+++ b/tools/edit_monitor/utils.py
@@ -21,7 +21,7 @@
feature_name: str,
user_name: str,
enable_flag: str = None,
- rollout_flag: str = None,
+ rollout_percent: int = 100,
) -> bool:
"""Determine whether the given feature is enabled.
@@ -46,26 +46,8 @@
logging.info("feature: %s is enabled", feature_name)
return True
- if not rollout_flag:
- return True
-
hash_object = hashlib.sha256()
hash_object.update((user_name + feature_name).encode("utf-8"))
hash_number = int(hash_object.hexdigest(), 16) % 100
- roll_out_percentage = os.environ.get(rollout_flag, "0")
- try:
- percentage = int(roll_out_percentage)
- if percentage < 0 or percentage > 100:
- logging.warning(
- "Rollout percentage: %s out of range, disable the feature.",
- roll_out_percentage,
- )
- return False
- return hash_number < percentage
- except ValueError:
- logging.warning(
- "Invalid rollout percentage: %s, disable the feature.",
- roll_out_percentage,
- )
- return False
+ return hash_number < rollout_percent
diff --git a/tools/edit_monitor/utils_test.py b/tools/edit_monitor/utils_test.py
index 7d7e4b2..1c30aa1 100644
--- a/tools/edit_monitor/utils_test.py
+++ b/tools/edit_monitor/utils_test.py
@@ -46,60 +46,23 @@
)
)
- @mock.patch.dict(
- os.environ, {ROLLOUT_TEST_FEATURE_FLAG: 'invalid'}, clear=True
- )
- def test_feature_disabled_with_invalid_rollout_percentage(self):
- self.assertFalse(
- utils.is_feature_enabled(
- TEST_FEATURE,
- TEST_USER,
- ENABLE_TEST_FEATURE_FLAG,
- ROLLOUT_TEST_FEATURE_FLAG,
- )
- )
-
- @mock.patch.dict(os.environ, {ROLLOUT_TEST_FEATURE_FLAG: '101'}, clear=True)
- def test_feature_disabled_with_rollout_percentage_too_high(self):
- self.assertFalse(
- utils.is_feature_enabled(
- TEST_FEATURE,
- TEST_USER,
- ENABLE_TEST_FEATURE_FLAG,
- ROLLOUT_TEST_FEATURE_FLAG,
- )
- )
-
- @mock.patch.dict(os.environ, {ROLLOUT_TEST_FEATURE_FLAG: '-1'}, clear=True)
- def test_feature_disabled_with_rollout_percentage_too_low(self):
- self.assertFalse(
- utils.is_feature_enabled(
- TEST_FEATURE,
- TEST_USER,
- ENABLE_TEST_FEATURE_FLAG,
- ROLLOUT_TEST_FEATURE_FLAG,
- )
- )
-
- @mock.patch.dict(os.environ, {ROLLOUT_TEST_FEATURE_FLAG: '90'}, clear=True)
def test_feature_enabled_with_rollout_percentage(self):
self.assertTrue(
utils.is_feature_enabled(
TEST_FEATURE,
TEST_USER,
ENABLE_TEST_FEATURE_FLAG,
- ROLLOUT_TEST_FEATURE_FLAG,
+ 90,
)
)
- @mock.patch.dict(os.environ, {ROLLOUT_TEST_FEATURE_FLAG: '10'}, clear=True)
def test_feature_disabled_with_rollout_percentage(self):
self.assertFalse(
utils.is_feature_enabled(
TEST_FEATURE,
TEST_USER,
ENABLE_TEST_FEATURE_FLAG,
- ROLLOUT_TEST_FEATURE_FLAG,
+ 10,
)
)