Skip to content

Commit

Permalink
fix: don't render providers (#3194)
Browse files Browse the repository at this point in the history
  • Loading branch information
talboren authored Jan 28, 2025
1 parent 46fd49c commit 5006c4f
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 22 deletions.
5 changes: 3 additions & 2 deletions keep/iohandler/iohandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ def _render(self, key: str, safe=False, default="", additional_context=None):
)
safe = False

context = self.context_manager.get_full_context()
context = self.context_manager.get_full_context(exclude_providers=True)

if additional_context:
context.update(additional_context)
Expand Down Expand Up @@ -608,7 +608,8 @@ def render_recursively(
rendered = html.unescape(rendered)

# If no more changes or no more mustache tags, we're done
if rendered == current or "{{" not in rendered:
# we don't want to render providers. ever, so this is a hack for it for now
if rendered == current or "{{" not in rendered or "providers." in rendered:
return rendered

current = rendered
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "keep"
version = "0.35.3"
version = "0.35.4"
description = "Alerting. for developers, by developers."
authors = ["Keep Alerting LTD"]
packages = [{include = "keep"}]
Expand Down
38 changes: 19 additions & 19 deletions tests/test_alert_evaluation.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ def test_stateless_alerts_firing(db_session, context, severity, if_condition, va
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context["steps"]["this"]["results"][0]["value"] = value
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
keep_provider = KeepProvider(context_manager, "test", {})
result = keep_provider._notify(**kwargs)

Expand Down Expand Up @@ -204,7 +204,7 @@ def test_stateless_alerts_resolved(
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context["steps"]["this"]["results"][0]["value"] = firing_value
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
keep_provider = KeepProvider(context_manager, "test", {})
# First trigger the alert with firing value
result = keep_provider._notify(**kwargs)
Expand All @@ -221,7 +221,7 @@ def test_stateless_alerts_resolved(

# Now update with resolved value
context["steps"]["this"]["results"][0]["value"] = resolved_value
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
result = keep_provider._notify(**kwargs)
# Verify alert is resolved
assert len(result) == 1
Expand Down Expand Up @@ -255,7 +255,7 @@ def test_statless_alerts_multiple_alerts(db_session, context):
}
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
provider = KeepProvider(context_manager, "test", {})
result = provider._notify(**kwargs)
assert len(result) == 3
Expand Down Expand Up @@ -308,7 +308,7 @@ def test_stateless_alerts_multiple_alerts_resolved(db_session, context):
# First create firing alerts
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
provider = KeepProvider(context_manager, "test", {})
result = provider._notify(**kwargs)
assert len(result) == 3
Expand Down Expand Up @@ -371,7 +371,7 @@ def test_stateful_alerts_firing(db_session, context):
# First create pending alerts
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
provider = KeepProvider(context_manager, "test", {})

# Get initial state
Expand Down Expand Up @@ -429,7 +429,7 @@ def test_stateful_alerts_resolved(db_session, context):
# First create pending alerts
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
provider = KeepProvider(context_manager, "test", {})

# Get initial state
Expand Down Expand Up @@ -502,7 +502,7 @@ def test_stateful_alerts_multiple_alerts(db_session, context):
with freeze_time("2024-01-26 10:00:00") as frozen_time:
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
provider = KeepProvider(context_manager, "test", {})
result = provider._notify(**kwargs)
assert len(result) == 3
Expand All @@ -514,7 +514,7 @@ def test_stateful_alerts_multiple_alerts(db_session, context):
# now create few more alerts
more_alerts = genereate_multi_dict("6")
context["steps"] = more_alerts
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
result = provider._notify(**kwargs)
assert len(result) == 6

Expand Down Expand Up @@ -570,7 +570,7 @@ def test_stateful_alerts_multiple_alerts_2(db_session, context):
with freeze_time("2024-01-26 10:00:00") as frozen_time:
context_manager = ContextManager(tenant_id="test", workflow_id="test-workflow")
context_manager.context = context
context_manager.get_full_context = lambda: context
context_manager.get_full_context = lambda exclude_providers: context
provider = KeepProvider(context_manager, "test", {})
result = provider._notify(**kwargs)
assert len(result) == 3
Expand Down Expand Up @@ -643,14 +643,14 @@ def test_state_alerts_multiple_firing_transitions(db_session):
tenant_id="test", workflow_id="test-workflow-1"
)
context_manager1.context = context1
context_manager1.get_full_context = lambda: context1
context_manager1.get_full_context = lambda exclude_providers: context1
provider1 = KeepProvider(context_manager1, "test", {})

context_manager2 = ContextManager(
tenant_id="test", workflow_id="test-workflow-2"
)
context_manager2.context = context2
context_manager2.get_full_context = lambda: context2
context_manager2.get_full_context = lambda exclude_providers: context2
provider2 = KeepProvider(context_manager2, "test", {})

# create 3 alerts
Expand Down Expand Up @@ -737,12 +737,12 @@ def test_make_sure_two_different_workflows_have_different_fingerprints(

context_manager1 = ContextManager(tenant_id="test", workflow_id="test-workflow-1")
context_manager1.context = context
context_manager1.get_full_context = lambda: context
context_manager1.get_full_context = lambda exclude_providers: context
provider1 = KeepProvider(context_manager1, "test", {})

context_manager2 = ContextManager(tenant_id="test", workflow_id="test-workflow-2")
context_manager2.context = context
context_manager2.get_full_context = lambda: context
context_manager2.get_full_context = lambda exclude_providers: context
provider2 = KeepProvider(context_manager2, "test", {})

result1 = provider1._notify(**kwargs1)
Expand Down Expand Up @@ -787,7 +787,7 @@ def test_state_alerts_staggered_resolution(db_session):
tenant_id="test", workflow_id="test-workflow-1"
)
context_manager1.context = context1
context_manager1.get_full_context = lambda: context1
context_manager1.get_full_context = lambda exclude_providers: context1
provider1 = KeepProvider(context_manager1, "test", {})

result1 = provider1._notify(**kwargs1)
Expand All @@ -805,7 +805,7 @@ def test_state_alerts_staggered_resolution(db_session):
if alert["metric"]["job"] != "vmagentstaggered"
]
context_manager1.context = context1
context_manager1.get_full_context = lambda: context1
context_manager1.get_full_context = lambda exclude_providers: context1
result1 = provider1._notify(**kwargs1)
assert len(result1) == 3
for alert in result1:
Expand Down Expand Up @@ -845,7 +845,7 @@ def test_state_alerts_flapping(db_session):
tenant_id="test", workflow_id="test-workflow-1"
)
context_manager1.context = context1
context_manager1.get_full_context = lambda: context1
context_manager1.get_full_context = lambda exclude_providers: context1
provider1 = KeepProvider(context_manager1, "test", {})

result1 = provider1._notify(**kwargs1)
Expand All @@ -867,7 +867,7 @@ def test_state_alerts_flapping(db_session):
if alert["metric"]["job"] != "vmagentflapping"
]
context_manager1.context = context1
context_manager1.get_full_context = lambda: context1
context_manager1.get_full_context = lambda exclude_providers: context1
result1 = provider1._notify(**kwargs1)
# so now we have 2 alerts pending and 1 alert resolved
assert len(result1) == 3
Expand All @@ -881,7 +881,7 @@ def test_state_alerts_flapping(db_session):
frozen_time.tick(delta=timedelta(minutes=1))
context1["steps"]["this"]["results"].append(removed_alert)
context_manager1.context = context1
context_manager1.get_full_context = lambda: context1
context_manager1.get_full_context = lambda exclude_providers: context1
# it should be 2 firing and 1 pending
result1 = provider1._notify(**kwargs1)
assert len(result1) == 3
Expand Down
10 changes: 10 additions & 0 deletions tests/test_iohandler.py
Original file line number Diff line number Diff line change
Expand Up @@ -876,6 +876,16 @@ def test_recursive_rendering_max_iterations(context_manager):
), "Expected no change due to max iterations limit"


def test_dont_render_providers(context_manager):
context_manager.providers_context = {
"keephq": '{"auth": "bla"}',
}
iohandler = IOHandler(context_manager)
template = "{{ providers.keephq }}"
result = iohandler.render(template)
assert result == "", "Expected empty string, but got {result}"


def test_render_with_consts(context_manager):
iohandler = IOHandler(context_manager)
context_manager.alert = AlertDto(
Expand Down

0 comments on commit 5006c4f

Please sign in to comment.