notebookVb

This commit is contained in:
administrator
2026-05-25 06:51:07 +02:00
parent db84c3e501
commit 1a08b4a8cd
2 changed files with 42 additions and 5 deletions
+21 -4
View File
@@ -15,6 +15,7 @@ Bezpečné pro souběžný běh na více strojích (ON CONFLICT v SQL).
import os
import sys
import time
import shutil
import socket
import logging
@@ -203,6 +204,8 @@ def process(conn, hostname):
log.info(f"Přeskočeno (již v DB): {stats['preskoceno']}")
continue
t_start = time.perf_counter()
try:
velikost = source.stat().st_size
hash_val = compute_blake3(source)
@@ -211,13 +214,18 @@ def process(conn, hostname):
stats["chyb"] += 1
continue
t_hash = time.perf_counter()
zaloha_id = known_hashes.get(hash_val)
if zaloha_id is not None:
# Hash známý z prefetch — duplikát, jen zapíšeme zdroj
stats["duplicit"] += 1
vel_mb = velikost / (1024 * 1024)
log.info(
f"DUPLIKÁT {source.name} "
f"({vel_mb:.1f} MB, hash={t_hash - t_start:.2f}s)"
)
else:
# Nový hash — zkopírovat a zapsat do zaloha_obrazku
dest = dest_path_for(source, hostname)
try:
copy_to_backup(source, dest)
@@ -226,21 +234,30 @@ def process(conn, hostname):
stats["chyb"] += 1
continue
t_copy = time.perf_counter()
cur = conn.cursor()
cur.execute(SQL_INSERT_ZALOHA, (hash_val, str(dest), source.name, velikost))
row = cur.fetchone()
if row:
zaloha_id = row[0]
else:
# Jiný stroj vložil mezitím stejný hash — ON CONFLICT, získáme existující ID
cur.execute(SQL_GET_ZALOHA_ID, (hash_val,))
zaloha_id = cur.fetchone()[0]
cur.close()
conn.commit()
t_db = time.perf_counter()
known_hashes[hash_val] = zaloha_id
stats["kopirovano"] += 1
log.info(f"ZKOPÍROVÁNO [{stats['kopirovano']:>6}] {source}")
vel_mb = velikost / (1024 * 1024)
log.info(
f"ZKOPÍROVÁNO [{stats['kopirovano']:>6}] {source.name} "
f"({vel_mb:.1f} MB, hash={t_hash - t_start:.2f}s "
f"copy={t_copy - t_hash:.2f}s db={t_db - t_copy:.2f}s "
f"celkem={t_db - t_start:.2f}s)"
)
pending_zdroje.append((hostname, src_str, source.name, velikost, hash_val, zaloha_id))
known_sources.add(src_str)
@@ -14,6 +14,7 @@ Bezpečné pro souběžný běh na více strojích (ON CONFLICT v SQL).
import os
import sys
import time
import shutil
import socket
import string
@@ -210,6 +211,8 @@ def process(conn, hostname, drives):
log.info(f"Přeskočeno (již v DB): {stats['preskoceno']}")
continue
t_start = time.perf_counter()
try:
velikost = source.stat().st_size
hash_val = compute_blake3(source)
@@ -218,10 +221,17 @@ def process(conn, hostname, drives):
stats["chyb"] += 1
continue
t_hash = time.perf_counter()
zaloha_id = known_hashes.get(hash_val)
if zaloha_id is not None:
stats["duplicit"] += 1
vel_mb = velikost / (1024 * 1024)
log.info(
f"DUPLIKÁT {source.name} "
f"({vel_mb:.1f} MB, hash={t_hash - t_start:.2f}s)"
)
else:
dest = dest_path_for(source, hostname)
try:
@@ -231,6 +241,8 @@ def process(conn, hostname, drives):
stats["chyb"] += 1
continue
t_copy = time.perf_counter()
cur = conn.cursor()
cur.execute(SQL_INSERT_ZALOHA, (hash_val, str(dest), source.name, velikost))
row = cur.fetchone()
@@ -242,9 +254,17 @@ def process(conn, hostname, drives):
cur.close()
conn.commit()
t_db = time.perf_counter()
known_hashes[hash_val] = zaloha_id
stats["kopirovano"] += 1
log.info(f"ZKOPÍROVÁNO [{stats['kopirovano']:>6}] {source}")
vel_mb = velikost / (1024 * 1024)
log.info(
f"ZKOPÍROVÁNO [{stats['kopirovano']:>6}] {source.name} "
f"({vel_mb:.1f} MB, hash={t_hash - t_start:.2f}s "
f"copy={t_copy - t_hash:.2f}s db={t_db - t_copy:.2f}s "
f"celkem={t_db - t_start:.2f}s)"
)
pending_zdroje.append((hostname, src_str, source.name, velikost, hash_val, zaloha_id))
known_sources.add(src_str)