From 7b01551d305b822d513f81479b9041253ea8f84e Mon Sep 17 00:00:00 2001 From: Thomas Baer <thomas.baer@slub-dresden.de> Date: Wed, 18 Sep 2024 12:50:57 +0200 Subject: [PATCH] Unique --- extract_logs.py | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/extract_logs.py b/extract_logs.py index 16e8b06..d1971fd 100644 --- a/extract_logs.py +++ b/extract_logs.py @@ -34,9 +34,9 @@ def process_file(filename): filename (str): Der Pfad zur zu verarbeitenden Log-Datei. Returns: - pandas.DataFrame: Ein DataFrame mit den extrahierten URLs. + pandas.DataFrame: Ein DataFrame mit den einzigartigen, extrahierten URLs. """ - urls = [] + unique_urls = set() with open(filename, "r") as file: for line in file: if "o.a.s.c.S.Request" in line and "params=" in line: @@ -47,17 +47,17 @@ def process_file(filename): if ( clean_query_string ): # Nur hinzufügen, wenn es relevante Parameter gibt - urls.append(f"/select?{clean_query_string}") - return pd.DataFrame(urls, columns=["url"]) + unique_urls.add(f"/select?{clean_query_string}") + return pd.DataFrame(list(unique_urls), columns=["url"]) def extract_urls_from_logs(): """ - Extrahiert bereinigte URLs aus allen Solr-Log-Dateien im 'logs/' Verzeichnis und + Extrahiert bereinigte, einzigartige URLs aus allen Solr-Log-Dateien im 'logs/' Verzeichnis und speichert sie in einer Parquet-Datei mit Snappy-Kompression. Returns: - int: Die Gesamtanzahl der extrahierten URLs. + int: Die Gesamtanzahl der extrahierten einzigartigen URLs. """ log_dir = "logs/" log_pattern = re.compile(r"solr\.log\.\d+") @@ -76,7 +76,7 @@ def extract_urls_from_logs(): schema = pa.schema([("url", pa.string())]) writer = pq.ParquetWriter(output_file, schema, compression="snappy") - total_urls = 0 + all_unique_urls = set() with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor: futures = { executor.submit(process_file, file): file for file in files_to_process @@ -88,21 +88,30 @@ def extract_urls_from_logs(): file = futures[future] try: df = future.result() - total_urls += len(df) - table = pa.Table.from_pandas(df) - writer.write_table(table) + new_unique_urls = set(df["url"]) - all_unique_urls + all_unique_urls.update(new_unique_urls) + if new_unique_urls: + table = pa.Table.from_pandas( + pd.DataFrame(list(new_unique_urls), columns=["url"]) + ) + writer.write_table(table) pbar.update(1) - pbar.set_postfix({"Datei": os.path.basename(file), "URLs": len(df)}) + pbar.set_postfix( + { + "Datei": os.path.basename(file), + "Neue einzigartige URLs": len(new_unique_urls), + } + ) except Exception as exc: print(f"{file} generierte eine Ausnahme: {exc}") writer.close() - return total_urls + return len(all_unique_urls) if __name__ == "__main__": - # Führe die Extraktion aus und gib die Gesamtanzahl der extrahierten URLs aus - total_urls = extract_urls_from_logs() + # Führe die Extraktion aus und gib die Gesamtanzahl der extrahierten einzigartigen URLs aus + total_unique_urls = extract_urls_from_logs() print( - f"{total_urls} bereinigte URLs wurden extrahiert und in das Parquet-File gespeichert." + f"{total_unique_urls} bereinigte, einzigartige URLs wurden extrahiert und in das Parquet-File gespeichert." ) -- GitLab