def grr_list_artifacts_impl() -> pd.DataFrame: """Lists all registered GRR artifacts. Returns: A list of artifact descriptors. """ df = convert.from_sequence(grr_colab.list_artifacts()) priority_columns = [ 'artifact.name', 'artifact.doc', 'artifact.supported_os', 'artifact.labels', ] df = convert.reindex_dataframe(df, priority_columns=priority_columns) return df
def grr_search_clients_impl( ip: Optional[Text] = None, mac: Optional[Text] = None, host: Optional[Text] = None, user: Optional[Text] = None, version: Optional[Text] = None, labels: Optional[List[Text]] = None) -> pd.DataFrame: """Searches for clients with specified keywords. Args: ip: IP address. mac: MAC address. host: Hostname. user: Username. version: Client version. labels: List of client labels. Returns: List of clients. """ clients = grr_colab.Client.search(ip=ip, mac=mac, host=host, user=user, version=version, labels=labels) clients_data = [_._client.data for _ in clients] # pylint: disable=protected-access df = convert.from_sequence(clients_data) _add_last_seen_column(df) _add_online_status_columns(df) priority_columns = [ 'online.pretty', 'online', 'client_id', 'last_seen_ago', 'last_seen_at.pretty', 'knowledge_base.fqdn', 'os_info.version' ] df = convert.reindex_dataframe(df, priority_columns=priority_columns) if 'last_seen_at' in df.columns: return df.sort_values(by='last_seen_at', ascending=False).reset_index(drop=True) return df