Skip to content

Commit e699382

Browse files
committed
Don't look up K_CE_OVERRIDES in every call.
1 parent 572de12 commit e699382

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

eoapi_notifier/outputs/cloudevents.py

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,9 @@ def __init__(self, config: CloudEventsConfig) -> None:
9292
super().__init__(config)
9393
self.config: CloudEventsConfig = config
9494
self._client: httpx.AsyncClient | None = None
95+
# Cache for K_CE_OVERRIDES to avoid repeated JSON parsing
96+
self._cached_k_ce_overrides: str | None = None
97+
self._cached_ce_extensions: dict[str, str] = {}
9598

9699
async def start(self) -> None:
97100
"""Start the HTTP client."""
@@ -197,22 +200,42 @@ async def send_event(self, event: NotificationEvent) -> bool:
197200
)
198201
return False
199202

203+
def _get_cached_ce_extensions(self) -> dict[str, str]:
204+
"""Get cached CloudEvents extensions from K_CE_OVERRIDES.
205+
206+
Parsing only happens if the environment variable has changed.
207+
"""
208+
current_overrides = os.getenv("K_CE_OVERRIDES")
209+
210+
# If the environment variable hasn't changed, return cached result
211+
if current_overrides == self._cached_k_ce_overrides:
212+
return self._cached_ce_extensions
213+
214+
# Environment variable changed or first time - re-parse
215+
self._cached_k_ce_overrides = current_overrides
216+
217+
if current_overrides:
218+
try:
219+
overrides_data = json.loads(current_overrides)
220+
self._cached_ce_extensions = overrides_data.get("extensions", {})
221+
except json.JSONDecodeError:
222+
self.logger.warning(
223+
"Invalid K_CE_OVERRIDES JSON, ignoring: %s", current_overrides
224+
)
225+
self._cached_ce_extensions = {}
226+
else:
227+
self._cached_ce_extensions = {}
228+
229+
return self._cached_ce_extensions
230+
200231
def _convert_to_cloudevent(self, event: NotificationEvent) -> CloudEvent:
201232
"""Convert NotificationEvent to CloudEvent."""
202233
# Use config values which now include environment overrides
203234
source = self.config.source
204235
event_type_base = self.config.event_type
205236

206-
# Apply KNative CE overrides if present
207-
ce_extensions = {}
208-
if k_ce_overrides := os.getenv("K_CE_OVERRIDES"):
209-
try:
210-
overrides_data = json.loads(k_ce_overrides)
211-
ce_extensions = overrides_data.get("extensions", {})
212-
except json.JSONDecodeError:
213-
self.logger.warning(
214-
"Invalid K_CE_OVERRIDES JSON, ignoring: %s", k_ce_overrides
215-
)
237+
# Get cached KNative CE overrides, parsing only if environment variable changed
238+
ce_extensions = self._get_cached_ce_extensions()
216239

217240
# Map operation to event type suffix
218241
operation_map = {"INSERT": "created", "UPDATE": "updated", "DELETE": "deleted"}

0 commit comments

Comments
 (0)