def ajax_save_treestate(): path_id = request.get_str_input_mandatory("path") current_ex_level_str, path = path_id.split(":", 1) current_ex_level = int(current_ex_level_str) if user.bi_expansion_level != current_ex_level: user.set_tree_states("bi", {}) user.set_tree_state("bi", path, request.var("state") == "open") user.save_tree_states() user.bi_expansion_level = current_ex_level
def _load_tree_state(self): self._treestate = user.get_tree_states("bi") if self._expansion_level != user.bi_expansion_level: self._treestate = {} user.set_tree_states("bi", self._treestate) user.save_tree_states()
def render_tree_json(row): expansion_level = request.get_integer_input_mandatory("expansion_level", 999) treestate = user.get_tree_states("bi") if expansion_level != user.bi_expansion_level: treestate = {} user.set_tree_states("bi", treestate) user.save_tree_states() def render_node_json(tree, show_host): is_leaf = len(tree) == 3 if is_leaf: service = tree[2].get("service") if not service: title = _("Host status") else: title = service else: title = tree[2]["title"] json_node = { "title": title, # 2 -> This element is currently in a scheduled downtime # 1 -> One of the subelements is in a scheduled downtime "in_downtime": tree[0]["in_downtime"], "acknowledged": tree[0]["acknowledged"], "in_service_period": tree[0]["in_service_period"], } if is_leaf: site, hostname = tree[2]["host"] json_node["site"] = site json_node["hostname"] = hostname # Check if we have an assumed state: comparing assumed state (tree[1]) with state (tree[0]) if tree[1] and tree[0] != tree[1]: json_node["assumed"] = True effective_state = tree[1] else: json_node["assumed"] = False effective_state = tree[0] json_node["state"] = effective_state["state"] json_node["output"] = compute_output_message(effective_state, tree[2]) return json_node def render_subtree_json(node, path, show_host): json_node = render_node_json(node, show_host) is_leaf = len(node) == 3 is_next_level_open = len(path) <= expansion_level if not is_leaf and is_next_level_open: json_node["nodes"] = [] for child_node in node[3]: if not child_node[2].get("hidden"): new_path = path + [child_node[2]["title"]] json_node["nodes"].append(render_subtree_json(child_node, new_path, show_host)) return json_node root_node = row["aggr_treestate"] affected_hosts = row["aggr_hosts"] return "", render_subtree_json(root_node, [root_node[2]["title"]], len(affected_hosts) > 1)