def singlehost_table( view, columns, query, only_sites, limit, all_active_filters, joinbyname, bygroup ): filterheaders = "".join(get_livestatus_filter_headers(view.context, all_active_filters)) host_columns = [c for c in columns if c.startswith("host_")] rows = [] bi_manager = BIManager() bi_manager.status_fetcher.set_assumed_states(user.bi_assumptions) bi_aggregation_filter = compute_bi_aggregation_filter(view.context, all_active_filters) required_aggregations = bi_manager.computer.get_required_aggregations(bi_aggregation_filter) bi_manager.status_fetcher.update_states_filtered( filterheaders, only_sites, limit, host_columns, bygroup, required_aggregations ) aggregation_results = bi_manager.computer.compute_results(required_aggregations) legacy_results = bi_manager.computer.convert_to_legacy_results( aggregation_results, bi_aggregation_filter ) for site_host_name, values in bi_manager.status_fetcher.states.items(): for legacy_result in legacy_results: if site_host_name in legacy_result["aggr_hosts"]: # Combine bi columns + extra livestatus columns + bi computation columns into one row row = values._asdict() row.update(row["remaining_row_keys"]) del row["remaining_row_keys"] row.update(legacy_result) row["site"] = site_host_name[0] rows.append(row) return rows
def _get_hostnames_from_filters( self, context: VisualContext, filters: List[Filter] ) -> Set[HostName]: filter_headers = "".join(get_livestatus_filter_headers(context, filters)) query = "GET hosts\nColumns: name" if filter_headers: query += "\n%s" % filter_headers site = request.var("site") with sites.only_sites(None if site is None else SiteId(site)): return {HostName(x) for x in sites.live().query_column_unique(query)}
def _get_filter_headers(self) -> FilterHeader: view, filters = get_topology_view_and_filters() return "".join(get_livestatus_filter_headers(view.context, filters))