def _page_menu( self, acktime: float, failed_notifications: LivestatusResponse, breadcrumb: Breadcrumb ) -> PageMenu: confirm_url = make_simple_link( make_confirm_link( url=makeactionuri( request, transactions, [("acktime", str(acktime)), ("_confirm", "1")] ), message=_("Do you really want to acknowledge all failed notifications up to %s?") % cmk.utils.render.date_and_time(acktime), ) ) return PageMenu( dropdowns=[ PageMenuDropdown( name="actions", title=_("Actions"), topics=[ PageMenuTopic( title=_("Actions"), entries=[ PageMenuEntry( title=_("Confirm"), icon_name="save", item=confirm_url, is_shortcut=True, is_suggested=True, is_enabled=bool(failed_notifications), ), ], ), ], ), ], breadcrumb=breadcrumb, )
def _search_folder_page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="hosts", title=_("Hosts"), topics=[ PageMenuTopic( title=_("On selected hosts"), entries=list( self._page_menu_entries_selected_hosts()), ), make_checkbox_selection_topic(), ], ), PageMenuDropdown( name="search", title=_("Search"), topics=[ PageMenuTopic( title=_("Search hosts"), entries=[ PageMenuEntry( title=_("Refine search"), icon_name="search", item=make_simple_link( self._folder.url([("mode", "search") ])), is_shortcut=True, ), ], ), ], ), ], breadcrumb=breadcrumb, )
def page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="connections", title=_("Connections"), topics=[ PageMenuTopic( title=_("Add connection"), entries=[ PageMenuEntry( title=_("Add connection"), icon_name="new", item=make_simple_link( watolib.folder_preserving_link([ ("mode", "edit_ldap_connection") ])), is_shortcut=True, is_suggested=True, ), ], ), ], ), PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Setup"), entries=list(self._page_menu_entries_related()), ), ], ), ], breadcrumb=breadcrumb, )
def _log_list_page_menu(breadcrumb: Breadcrumb) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="logs", title=_("Logs"), topics=[ PageMenuTopic( title=_("Acknowledge"), entries=list(_page_menu_entry_acknowledge()), ), ], ), PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Setup"), entries=[ PageMenuEntry( title=_("Analyze patterns"), icon_name="analyze", item=make_simple_link( makeuri_contextless( request, [("mode", "pattern_editor")], filename="wato.py", )), ), ], ), ], ), ], breadcrumb=breadcrumb, )
def page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="attributes", title=_("Attributes"), topics=[ PageMenuTopic( title=_("Create"), entries=[ PageMenuEntry( title=_("Add attribute"), icon_name="new", item=make_simple_link( watolib.folder_preserving_link([ ("mode", "edit_%s_attr" % self._type) ])), ), ], ), ], ), PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Setup"), entries=list(self._page_menu_entries_related()), ), ], ), ], breadcrumb=breadcrumb, )
def page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: menu = make_simple_form_page_menu(breadcrumb, form_name="value_editor", button_name="save") reset_possible = self._config_variable.allow_reset( ) and self._is_configured() default_values = watolib.ABCConfigDomain.get_all_default_globals() defvalue = default_values[self._varname] value = self._current_settings.get( self._varname, self._global_settings.get(self._varname, defvalue)) menu.dropdowns[0].topics[0].entries.append( PageMenuEntry( title=_("Remove explicit setting") if value == defvalue else _("Reset to default"), icon_name="reset", item=make_form_submit_link(form_name="value_editor", button_name="_reset"), is_enabled=reset_possible, is_shortcut=True, is_suggested=True, )) return menu
def page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: menu = PageMenu( dropdowns=[ PageMenuDropdown( name="roles", title=_("Roles"), topics=[ PageMenuTopic( title=_("Overview"), entries=[ PageMenuEntry( title=_("Permission matrix"), icon_name="matrix", item=make_simple_link( watolib.folder_preserving_link([("mode", "role_matrix")])), ), ], ), ], ), ], breadcrumb=breadcrumb, ) return menu
def _page_menu(self, breadcrumb: Breadcrumb, crash_info: CrashInfo) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="crash_reports", title=_("Crash reports"), topics=[ PageMenuTopic( title=_("This crash report"), entries=[ PageMenuEntry( title=_("Download"), icon_name="download", item=make_simple_link( makeuri(request, [], filename="download_crash_report.py") ), is_shortcut=True, is_suggested=True, ), ], ), ], ), PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Monitoring"), entries=list(self._page_menu_entries_related_monitoring(crash_info)), ), ], ), ], breadcrumb=breadcrumb, )
def page_menu(self, breadcrumb) -> PageMenu: menu = make_simple_form_page_menu(breadcrumb, form_name="diagnostics", button_name="_collect_dump", save_title=_("Collect dump")) menu.dropdowns.insert( 1, PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Setup"), entries=[ PageMenuEntry( title=_("Analyze configuration"), icon_name="analyze_config", item=make_simple_link("wato.py?mode=analyze_config"), ), ], ), ], )) return menu
def _page_menu_entry_acknowledge( site: Optional[config.SiteId] = None, host_name: Optional[HostName] = None, int_filename: Optional[str] = None) -> Iterator[PageMenuEntry]: if not config.user.may("general.act") or (host_name and not may_see(site, host_name)): return if int_filename: label = _("Clear log") else: label = _("Clear logs") urivars: HTTPVariables = [('_ack', '1')] if int_filename: urivars.append(("file", int_filename)) yield PageMenuEntry( title=label, icon_name="delete", item=make_simple_link(html.makeactionuri(urivars)), is_shortcut=True, is_suggested=True, )
def page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: menu = make_simple_form_page_menu(_("Host"), breadcrumb, form_name="rename_host", button_name="rename", save_title=_("Rename")) host_renaming_job = RenameHostsBackgroundJob() actions_dropdown = menu.dropdowns[0] actions_dropdown.topics.append( PageMenuTopic( title=_("Last result"), entries=[ PageMenuEntry( title=_("Show last rename result"), icon_name="background_job_details", item=make_simple_link(host_renaming_job.detail_url()), is_enabled=host_renaming_job.is_available(), ), ], )) menu.dropdowns.append( PageMenuDropdown( name="hosts", title=_("Hosts"), topics=[ PageMenuTopic( title=_("For this host"), entries=list( page_menu_host_entries(self.name(), self._host)), ), ], )) return menu
def page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="hosts", title=_("Hosts"), topics=[ self._page_menu_save_topic(), PageMenuTopic( title=_("For this host"), entries=list( page_menu_host_entries(self.name(), self._host)), ), PageMenuTopic( title=_("For all hosts on site %s") % self._host.site_id(), entries=[ PageMenuEntry( title=_("Update DNS cache"), icon_name="update", item=make_simple_link( html.makeactionuri([ ("_update_dns_cache", "1") ])), shortcut_title=_("Update site DNS cache"), is_shortcut=True, is_suggested=True, ), ], ), ], ), ], breadcrumb=breadcrumb, )
def page_menu_host_entries(mode_name: str, host: CREHost) -> Iterator[PageMenuEntry]: if mode_name != "edit_host": yield PageMenuEntry( title=_("Properties"), icon_name="edit", item=make_simple_link( watolib.folder_preserving_link([("mode", "edit_host"), ("host", host.name())])), ) if mode_name != "inventory": yield PageMenuEntry( title=_("Service configuration"), icon_name="services", item=make_simple_link( watolib.folder_preserving_link([("mode", "inventory"), ("host", host.name())])), ) if mode_name != "diag_host" and not host.is_cluster(): yield PageMenuEntry( title=_("Connection tests"), icon_name="diagnose", item=make_simple_link( watolib.folder_preserving_link([("mode", "diag_host"), ("host", host.name())])), ) if mode_name != "object_parameters" and user.may("wato.rulesets"): yield PageMenuEntry( title=_("Effective parameters"), icon_name="rulesets", item=make_simple_link( watolib.folder_preserving_link([("mode", "object_parameters"), ("host", host.name())])), ) if mode_name == "object_parameters" or mode_name == "edit_host" and user.may( "wato.rulesets"): yield PageMenuEntry( title=_("Rules"), icon_name="rulesets", item=make_simple_link( makeuri_contextless( request, [ ("mode", "rule_search"), ("filled_in", "search"), ("search_p_ruleset_deprecated", "OFF"), ("search_p_rule_host_list_USE", "ON"), ("search_p_rule_host_list", host.name()), ], filename="wato.py", )), ) yield make_host_status_link(host_name=host.name(), view_name="hoststatus") if user.may("wato.rulesets") and host.is_cluster(): yield PageMenuEntry( title=_("Clustered services"), icon_name="rulesets", item=make_simple_link( watolib.folder_preserving_link([("mode", "edit_ruleset"), ("varname", "clustered_services")])), ) if watolib.has_agent_bakery() and user.may("wato.download_agents"): yield PageMenuEntry( title=_("Monitoring agent"), icon_name="agents", item=make_simple_link( watolib.folder_preserving_link([("mode", "agent_of_host"), ("host", host.name())])), ) if mode_name == "edit_host" and not host.locked(): if user.may("wato.rename_hosts"): yield PageMenuEntry( title=_("Rename"), icon_name="rename_host", item=make_simple_link( watolib.folder_preserving_link([("mode", "rename_host"), ("host", host.name())])), ) if user.may("wato.manage_hosts") and user.may("wato.clone_hosts"): yield PageMenuEntry( title=_("Clone"), icon_name="insert", item=make_simple_link(host.clone_url()), ) yield PageMenuEntry( title=_("Delete"), icon_name="delete", item=make_simple_link( make_confirm_link( url=makeactionuri(request, transactions, [("delete", "1")]), message=_( "Do you really want to delete the host <tt>%s</tt>?") % host.name(), )), ) if user.may("wato.auditlog"): yield PageMenuEntry( title=_("Audit log"), icon_name="auditlog", item=make_simple_link( make_object_audit_log_url(host.object_ref())), )
def _page_menu( self, breadcrumb: Breadcrumb, site_id: SiteId, host_name: HostName, service_description: str, ) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="robotmk_logs", title=_("RobotMK logs"), topics=[ PageMenuTopic( title=_("This log"), entries=[ PageMenuEntry( title=_("Download"), icon_name="download", item=make_simple_link( makeuri( request, [ ("report_type", self._report_type()), ("site", site_id), ("host", host_name), ("service", service_description), ], filename= "download_robotmk_report.py", )), is_shortcut=True, is_suggested=True, ), ], ), PageMenuTopic( title=_("Other logs for this service"), entries=[ PageMenuEntry( title=_("Last error log") if self._is_last_log() else _("Last log"), icon_name="robotmk_error" if self._is_last_log() else "robotmk", item=make_simple_link( makeuri( request, [ ( "report_type", "robotmk_error" if self._is_last_log() else "robotmk", ), ("site", site_id), ("host", host_name), ("service", service_description), ], filename="robotmk.py", )), is_shortcut=True, is_suggested=True, ), ], ), ], ), ], breadcrumb=breadcrumb, )
def _page_menu_entries_filter(self) -> Iterator[PageMenuEntry]: yield PageMenuEntry( title="", icon_name="trans", item=PageMenuSearch(), )
def _page_menu_entries_related(self) -> Iterator[PageMenuEntry]: yield PageMenuEntry( title=_("Sites"), icon_name="sites", item=make_simple_link("wato.py?mode=sites"), )
def _show_file_page_menu(breadcrumb: Breadcrumb, site_id: SiteId, host_name: HostName, int_filename: str) -> PageMenu: menu = PageMenu( dropdowns=[ PageMenuDropdown( name="logs", title=_("Logs"), topics=[ PageMenuTopic( title=_("This log file"), entries=list( _page_menu_entry_acknowledge( site_id, host_name, int_filename)), ), PageMenuTopic( title=_("Log files"), entries=[ PageMenuEntry( title=_("Log files of host %s") % host_name, icon_name="logwatch", item=make_simple_link( makeuri(request, [("file", "")])), ), PageMenuEntry( title=_("All log files"), icon_name="logwatch", item=make_simple_link( makeuri(request, [("site", ""), ("host", ""), ("file", "")])), ), ], ), ], ), PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Monitoring"), entries=[ PageMenuEntry( title=_("Services of host"), icon_name="services", item=make_simple_link( services_url(site_id, host_name)), ), ], ), PageMenuTopic( title=_("Setup"), entries=[ PageMenuEntry( title=_("Analyze host patterns"), icon_name="analyze", item=make_simple_link( analyse_url(site_id, host_name)), ), ], ), ], ), ], breadcrumb=breadcrumb, ) _extend_display_dropdown(menu) return menu
def _host_log_list_page_menu(breadcrumb: Breadcrumb, site_id: SiteId, host_name: HostName) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="logs", title=_("Logs"), topics=[ PageMenuTopic( title=_("Current log files"), entries=list( _page_menu_entry_acknowledge(site_id, host_name)), ), PageMenuTopic( title=_("Log files"), entries=[ PageMenuEntry( title=_("All log files"), icon_name="logwatch", item=make_simple_link( makeuri( request, [("site", ""), ("host", ""), ("file", "")], )), ), ], ), ], ), PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Monitoring"), entries=[ PageMenuEntry( title=_("Services of host"), icon_name="services", item=make_simple_link( services_url(site_id, host_name)), ), ], ), PageMenuTopic( title=_("Setup"), entries=[ PageMenuEntry( title=_("Analyze host patterns"), icon_name="analyze", item=make_simple_link( analyse_url(site_id, host_name)), ), ], ), ], ), ], breadcrumb=breadcrumb, )
def _page_menu_entries_related(self) -> Iterator[PageMenuEntry]: yield PageMenuEntry( title=_("Users"), icon_name="users", item=make_simple_link(watolib.folder_preserving_link([("mode", "users")])), )
def _page_menu_entries_search(self) -> Iterator[PageMenuEntry]: yield PageMenuEntry( title=_("Search hosts"), icon_name="search", item=make_simple_link(watolib.folder_preserving_link([("mode", "search")])), )
def _page_menu_entries_selected_hosts(self) -> Iterator[PageMenuEntry]: if not config.user.may("wato.edit_hosts") and not config.user.may("wato.manage_hosts"): return hostnames = sorted(self._folder.hosts().keys(), key=utils.key_num_split) search_text = html.request.var("search") # Remember if that host has a target folder (i.e. was imported with # a folder information but not yet moved to that folder). If at least # one host has a target folder, then we show an additional bulk action. at_least_one_imported = False for hostname in hostnames: if search_text and (search_text.lower() not in hostname.lower()): continue host = self._folder.host(hostname) effective = host.effective_attributes() if effective.get("imported_folder"): at_least_one_imported = True if not self._folder.locked_hosts(): if config.user.may("wato.manage_hosts"): yield PageMenuEntry( title=_("Delete hosts"), icon_name="delete", item=make_form_submit_link( form_name="hosts", button_name="_bulk_delete", ), ) if config.user.may("wato.edit_hosts"): yield PageMenuEntry( title=_("Edit attributes"), icon_name="edit", item=make_form_submit_link( form_name="hosts", button_name="_bulk_edit", ), ) yield PageMenuEntry( title=_("Remove explicit attribute settings"), icon_name="cleanup", item=make_form_submit_link( form_name="hosts", button_name="_bulk_cleanup", ), ) if config.user.may("wato.services"): yield PageMenuEntry( title=_("Discover services"), icon_name="services", item=make_form_submit_link( form_name="hosts", button_name="_bulk_inventory", ), ) if not self._folder.locked_hosts(): if config.user.may("wato.parentscan"): yield PageMenuEntry( title=_("Detect network parent hosts"), icon_name="parentscan", item=make_form_submit_link( form_name="hosts", button_name="_parentscan", ), ) if config.user.may("wato.edit_hosts") and config.user.may("wato.move_hosts"): yield PageMenuEntry( title=_("Move to other folder"), icon_name="move", name="move_rules", item=PageMenuPopup(self._render_bulk_move_form()), ) if at_least_one_imported: yield PageMenuEntry( title=_("Move to target folders"), icon_name="move", item=make_form_submit_link( form_name="hosts", button_name="_bulk_movetotarget", ), )
def page_menu(self, breadcrumb: Breadcrumb) -> PageMenu: return PageMenu( dropdowns=[ PageMenuDropdown( name="users", title=_("Users"), topics=[ PageMenuTopic( title=_("Add user"), entries=[ PageMenuEntry( title=_("Add user"), icon_name="new", item=make_simple_link( watolib.folder_preserving_link([("mode", "edit_user")])), is_shortcut=True, is_suggested=True, ), ], ), PageMenuTopic( title=_("On selected users"), entries=[ PageMenuEntry( title=_("Delete users"), shortcut_title=_("Delete selected users"), icon_name="delete", item=make_confirmed_form_submit_link( form_name="bulk_delete_form", button_name="_bulk_delete_users", message=_( "Do you really want to delete the selected users?"), ), is_shortcut=True, is_suggested=True, ), ], ), PageMenuTopic( title=_("Synchronized users"), entries=list(self._page_menu_entries_synchronized_users()), ), PageMenuTopic( title=_("Notify users"), entries=list(self._page_menu_entries_notify_users()), ), ], ), PageMenuDropdown( name="related", title=_("Related"), topics=[ PageMenuTopic( title=_("Setup"), entries=list(self._page_menu_entries_related()), ), ], ), ], breadcrumb=breadcrumb, )
def page_menu_host_entries(mode_name: str, host: CREHost) -> Iterator[PageMenuEntry]: if mode_name != "edit_host": yield PageMenuEntry( title=_("Properties"), icon_name="edit", item=make_simple_link( watolib.folder_preserving_link([("mode", "edit_host"), ("host", host.name())])), ) if mode_name != "inventory": yield PageMenuEntry( title=_("Service configuration"), icon_name="services", item=make_simple_link( watolib.folder_preserving_link([("mode", "inventory"), ("host", host.name())])), ) if mode_name != "diag_host" and not host.is_cluster(): yield PageMenuEntry( title=_("Connection tests"), icon_name="diagnose", item=make_simple_link( watolib.folder_preserving_link([("mode", "diag_host"), ("host", host.name())])), ) if mode_name != "object_parameters" and config.user.may('wato.rulesets'): yield PageMenuEntry( title=_("Effective parameters"), icon_name="rulesets", item=make_simple_link( watolib.folder_preserving_link([("mode", "object_parameters"), ("host", host.name())])), ) yield make_host_status_link(host_name=host.name(), view_name="hoststatus") if config.user.may('wato.rulesets') and host.is_cluster(): yield PageMenuEntry( title=_("Clustered services"), icon_name="rulesets", item=make_simple_link( watolib.folder_preserving_link([("mode", "edit_ruleset"), ("varname", "clustered_services")])), ) if watolib.has_agent_bakery() and config.user.may('wato.download_agents'): yield PageMenuEntry( title=_("Monitoring agent"), icon_name="agents", item=make_simple_link( watolib.folder_preserving_link([("mode", "agent_of_host"), ("host", host.name())])), ) if mode_name == "edit_host" and not host.locked(): if config.user.may("wato.rename_hosts"): yield PageMenuEntry( title=_("Rename"), icon_name="rename_host", item=make_simple_link( watolib.folder_preserving_link([("mode", "rename_host"), ("host", host.name())])), ) if config.user.may("wato.manage_hosts") and config.user.may("wato.clone_hosts"): yield PageMenuEntry( title=_("Clone"), icon_name="insert", item=make_simple_link(host.clone_url()), ) yield PageMenuEntry( title=_("Delete"), icon_name="delete", item=make_simple_link(html.makeactionuri([("delete", "1")])), )
def _page_menu_entries_selected_hosts(self) -> Iterator[PageMenuEntry]: if not config.user.may("wato.edit_hosts") and not config.user.may("wato.manage_hosts"): return hostnames = sorted(self._folder.hosts().keys(), key=utils.key_num_split) is_enabled = bool(self._folder.has_hosts()) search_text = html.request.var("search") # Remember if that host has a target folder (i.e. was imported with # a folder information but not yet moved to that folder). If at least # one host has a target folder, then we show an additional bulk action. at_least_one_imported = False for hostname in hostnames: if search_text and (search_text.lower() not in hostname.lower()): continue host = self._folder.host(hostname) effective = host.effective_attributes() if effective.get("imported_folder"): at_least_one_imported = True if not self._folder.locked_hosts(): if config.user.may("wato.manage_hosts"): yield PageMenuEntry( title=_("Delete hosts"), icon_name="delete", item=make_confirmed_form_submit_link( form_name="hosts", button_name="_bulk_delete", message=_("Do you really want to delete the selected hosts?"), ), is_enabled=is_enabled, ) if config.user.may("wato.edit_hosts"): yield PageMenuEntry( title=_("Edit attributes"), icon_name="edit", item=make_form_submit_link( form_name="hosts", button_name="_bulk_edit", ), is_enabled=is_enabled, ) yield PageMenuEntry( title=_("Remove explicit attribute settings"), icon_name="cleanup", item=make_form_submit_link( form_name="hosts", button_name="_bulk_cleanup", ), is_enabled=is_enabled, ) if config.user.may("wato.services"): yield PageMenuEntry( title=_("Discover services"), icon_name="services", item=make_form_submit_link( form_name="hosts", button_name="_bulk_inventory", ), is_enabled=is_enabled, ) if not self._folder.locked_hosts(): if config.user.may("wato.parentscan"): yield PageMenuEntry( title=_("Detect network parent hosts"), icon_name="parentscan", item=make_form_submit_link( form_name="hosts", button_name="_parentscan", ), is_enabled=is_enabled, ) if config.user.may("wato.edit_hosts") and config.user.may("wato.move_hosts"): yield PageMenuEntry( title=_("Move to other folder"), icon_name="move", name="move_rules", item=PageMenuPopup(self._render_bulk_move_form()), is_enabled=is_enabled, ) if at_least_one_imported: yield PageMenuEntry( title=_("Move to target folders"), icon_name="move", item=make_confirmed_form_submit_link( form_name="hosts", button_name="_bulk_movetotarget", message=_('You are going to move the selected hosts to folders ' 'representing their original folder location in the system ' 'you did the import from. Please make sure that you have ' 'done an <b>inventory</b> before moving the hosts.'), ), is_enabled=is_enabled, )