I can confirm that: The BI is now completely broken. That’s quite an achievement — managing to go an entire year without releasing a fix for a problem, only to end up making it stop working altogether.
I tested it on a CheckMK instance without my BI fix just to be sure — turns out it wasn’t me who broke it, it was the CheckMK team.
I rolled back to p38 and will wait until it’s fixed — or I’ll fix it myself.
Exception: KeyError (site)
Traceback:
File "/omd/sites/sitename/lib/python3/cmk/gui/wsgi/applications/checkmk.py", line 188, in _process_request
resp = page_handler()
File "/omd/sites/sitename/lib/python3/cmk/gui/wsgi/applications/utils.py", line 113, in _call_auth
func()
File "/omd/sites/sitename/lib/python3/cmk/gui/pages.py", line 187, in wrapper
return hc().handle_page()
File "/omd/sites/sitename/lib/python3/cmk/gui/pages.py", line 51, in handle_page
self.page()
File "/omd/sites/sitename/lib/python3/cmk/gui/pages.py", line 146, in <lambda>
"page": lambda self: self._wrapped_callable[0](),
File "/omd/sites/sitename/lib/python3/cmk/gui/views/page_show_view.py", line 100, in page_show_view
process_view(GUIViewRenderer(view, show_buttons=True))
File "/omd/sites/sitename/lib/python3/cmk/gui/views/page_show_view.py", line 174, in process_view
_process_regular_view(view_renderer)
File "/omd/sites/sitename/lib/python3/cmk/gui/views/page_show_view.py", line 192, in _process_regular_view
_show_view(view_renderer, unfiltered_amount_of_rows, rows)
File "/omd/sites/sitename/lib/python3/cmk/gui/views/page_show_view.py", line 412, in _show_view
view_renderer.render(
File "/omd/sites/sitename/lib/python3/cmk/gui/view_renderer.py", line 271, in render
layout.render(
File "/omd/sites/sitename/lib/python3/cmk/gui/views/layout/layouts.py", line 773, in render
cell.paint(row, render_link_to_view)
File "/omd/sites/sitename/lib/python3/cmk/gui/painter/v0/base.py", line 699, in paint
tdclass, content = self.render(row, link_renderer)
File "/omd/sites/sitename/lib/python3/cmk/gui/painter/v0/base.py", line 537, in render
tdclass, content = self.render_content(row)
File "/omd/sites/sitename/lib/python3/cmk/gui/painter/v0/base.py", line 691, in render_content
return painter.render(row, self)
File "/omd/sites/sitename/lib/python3/cmk/gui/bi/view.py", line 852, in render
return paint_aggregated_tree_state(row)
File "/omd/sites/sitename/lib/python3/cmk/gui/bi/view.py", line 829, in paint_aggregated_tree_state
return renderer.css_class(), renderer.render()
File "/omd/sites/sitename/lib/python3/cmk/gui/bi/foldable_tree_renderer.py", line 67, in render
self._show_tree()
File "/omd/sites/sitename/lib/python3/cmk/gui/bi/foldable_tree_renderer.py", line 96, in _show_tree
self._show_subtree(
File "/omd/sites/sitename/lib/python3/cmk/gui/bi/foldable_tree_renderer.py", line 248, in _show_subtree
with self._show_node(tree, show_host, mousecode=mc, img_class=css_class):
File "/omd/sites/sitename/lib/python3.12/contextlib.py", line 144, in __exit__
next(self.gen)
File "/omd/sites/sitename/lib/python3/cmk/gui/bi/foldable_tree_renderer.py", line 387, in _show_node
must_escape=not active_config.sites[self._row["site"]].get("is_trusted", False),
Local Variables:
{'addclass': [],
'class_': ['content', 'state', 'state0'],
'effective_state': {'acknowledged': False,
'in_downtime': False,
'in_service_period': True,
'output': '',
'state': 0},
'icon_name': None,
'icon_title': None,
'img_class': 'closed',
'mousecode': 'cmk.bi.toggle_subtree(this, 1);',
'self': <cmk.gui.bi.foldable_tree_renderer.FoldableTreeRendererTree object at 0x7f9aa2ca3a70>,
'show_host': False,
'tree': ({'acknowledged': False,
'in_downtime': False,
'in_service_period': True,
'output': '',
'state': 0},
None,
{'aggr_group_tree': ['Hosts'],
'aggr_type': 'multi',
'aggregation_id': 'default_aggregation',
'docu_url': '',
'downtime_aggr_warn': False,
'frozen_marker': None,
'node_visualization': {'ignore_rule_styles': False,
'layout_id': 'builtin_default',
'line_style': 'round'},
'nodes': [{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'}],
'reqhosts': [('Max recursion depth reached',
'Max recursion depth reached')],
'rule_id': 'host',
'rule_layout_style': {'style_config': {}, 'type': 'none'},
'title': 'Host 2k19nfs',
'type': 2,
'use_hard_states': False},
[({'acknowledged': 'Max recursion depth reached',
'in_downtime': 'Max recursion depth reached',
'in_service_period': 'Max recursion depth reached',
'output': 'Max recursion depth reached',
'state': 'Max recursion depth reached'},
None,
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
['Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached']),
({'acknowledged': 'Max recursion depth reached',
'in_downtime': 'Max recursion depth reached',
'in_service_period': 'Max recursion depth reached',
'output': 'Max recursion depth reached',
'state': 'Max recursion depth reached'},
None,
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
['Max recursion depth reached', 'Max recursion depth reached']),
({'acknowledged': 'Max recursion depth reached',
'in_downtime': 'Max recursion depth reached',
'in_service_period': 'Max recursion depth reached',
'output': 'Max recursion depth reached',
'state': 'Max recursion depth reached'},
None,
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
['Max recursion depth reached']),
({'acknowledged': 'Max recursion depth reached',
'in_downtime': 'Max recursion depth reached',
'in_service_period': 'Max recursion depth reached',
'output': 'Max recursion depth reached',
'state': 'Max recursion depth reached'},
None,
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
['Max recursion depth reached', 'Max recursion depth reached']),
({'acknowledged': 'Max recursion depth reached',
'in_downtime': 'Max recursion depth reached',
'in_service_period': 'Max recursion depth reached',
'output': 'Max recursion depth reached',
'state': 'Max recursion depth reached'},
None,
{'docu_url': 'Max recursion depth reached',
'frozen_marker': 'Max recursion depth reached',
'nodes': 'Max recursion depth reached',
'reqhosts': 'Max recursion depth reached',
'rule_id': 'Max recursion depth reached',
'rule_layout_style': 'Max recursion depth reached',
'title': 'Max recursion depth reached',
'type': 'Max recursion depth reached'},
['Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached',
'Max recursion depth reached'])])}