def get_connected_nodes(self, filter_node: str = None, offset: int = 0, limit: int = common.database_limit, sort: Dict = None, search: Dict = None, select: Dict = None, filter_type: str = 'all') -> Dict: """ Return all connected nodes, including the master node :return: A dictionary containing data from each node """ def return_node(node_info: Dict) -> bool: """ Returns whether the node must be added to the result or not :param node_info: Node information :return: A boolean """ return (filter_node is None or node_info['name'] in filter_node) and ( filter_type == 'all' or node_info['type'] == filter_type) default_fields = self.to_dict()['info'].keys() if select is None: select = default_fields else: if not set(select).issubset(default_fields): raise exception.WazuhError(code=1724, extra_message=', '.join(set(select) - default_fields), extra_remediation=', '.join(default_fields)) if filter_type != 'all' and filter_type not in {'worker', 'master'}: raise exception.WazuhError(1728) if filter_node is not None: filter_node = set(filter_node) if isinstance(filter_node, list) else {filter_node} if not filter_node.issubset(set(itertools.chain(self.clients.keys(), [self.configuration['node_name']]))): raise exception.WazuhResourceNotFound(1730) res = [val.to_dict()['info'] for val in itertools.chain([self], self.clients.values()) if return_node(val.to_dict()['info'])] return utils.process_array([{k: v[k] for k in select} for v in res], search_text=search['value'] if search is not None else None, complementary_search=search['negation'] if search is not None else False, sort_by=sort['fields'] if sort is not None else None, sort_ascending=False if sort is not None and sort['order'] == 'desc' else True, allowed_sort_fields=default_fields, offset=offset, limit=limit)
def get_connected_nodes(self, filter_node: str = None, offset: int = 0, limit: int = common.database_limit, sort: Dict = None, search: Dict = None, select: Dict = None, filter_type: str = 'all') -> Dict: """Get all connected nodes, including the master node. Parameters ---------- filter_node : str, list Node to return. offset : int First element to return. limit : int Maximum number of elements to return. sort : dict Sorts the collection by a field or fields. search : dict Looks for elements with the specified string. select : dict Select which fields to return (separated by comma). filter_type : str Type of node (worker/master). Returns ------- dict Data from each node. """ def return_node(node_info: Dict) -> bool: """Return whether the node must be added to the result or not. Parameters ---------- node_info : dict Node information. Returns ------- bool Whether the node must be added to the result or not. """ return (filter_node is None or node_info['name'] in filter_node) and (filter_type == 'all' or node_info['type'] == filter_type) default_fields = self.to_dict()['info'].keys() if select is None: select = default_fields else: if not set(select).issubset(default_fields): raise exception.WazuhError( code=1724, extra_message=', '.join(set(select) - default_fields), extra_remediation=', '.join(default_fields)) if filter_type != 'all' and filter_type not in {'worker', 'master'}: raise exception.WazuhError(1728) if filter_node is not None: filter_node = set(filter_node) if isinstance( filter_node, list) else {filter_node} if not filter_node.issubset( set( itertools.chain(self.clients.keys(), [self.configuration['node_name']]))): raise exception.WazuhResourceNotFound(1730) res = [ val.to_dict()['info'] for val in itertools.chain([self], self.clients.values()) if return_node(val.to_dict()['info']) ] return utils.process_array( [{k: v[k] for k in select} for v in res], search_text=search['value'] if search is not None else None, complementary_search=search['negation'] if search is not None else False, sort_by=sort['fields'] if sort is not None else None, sort_ascending=False if sort is not None and sort['order'] == 'desc' else True, allowed_sort_fields=default_fields, offset=offset, limit=limit)