test: add timestamps to MockLog for consistency and clarity
Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -114,21 +114,25 @@ class TestMetricsCountingBugFixes:
|
|||||||
This simulates the bug where metrics show incorrect counts because
|
This simulates the bug where metrics show incorrect counts because
|
||||||
they count all logs instead of just the latest per step.
|
they count all logs instead of just the latest per step.
|
||||||
"""
|
"""
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
class MockLog:
|
class MockLog:
|
||||||
def __init__(self, step_name, status):
|
def __init__(self, step_name, status, timestamp):
|
||||||
self.step_name = step_name
|
self.step_name = step_name
|
||||||
self.status = status
|
self.status = status
|
||||||
|
self.timestamp = timestamp
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
# Simulate logs ordered by timestamp desc (latest first)
|
# Simulate logs ordered by timestamp desc (latest first)
|
||||||
logs = [
|
logs = [
|
||||||
# Latest status for each step (all success)
|
# Latest status for each step (all success)
|
||||||
MockLog("hash_file", "success"),
|
MockLog("hash_file", "success", now - timedelta(minutes=1)),
|
||||||
MockLog("create_file_record", "success"),
|
MockLog("create_file_record", "success", now - timedelta(minutes=2)),
|
||||||
MockLog("extract_metadata_with_gpt", "success"),
|
MockLog("extract_metadata_with_gpt", "success", now - timedelta(minutes=3)),
|
||||||
# Older in_progress logs that should be ignored
|
# Older in_progress logs that should be ignored
|
||||||
MockLog("hash_file", "in_progress"),
|
MockLog("hash_file", "in_progress", now - timedelta(minutes=5)),
|
||||||
MockLog("create_file_record", "in_progress"),
|
MockLog("create_file_record", "in_progress", now - timedelta(minutes=6)),
|
||||||
MockLog("extract_metadata_with_gpt", "in_progress"),
|
MockLog("extract_metadata_with_gpt", "in_progress", now - timedelta(minutes=7)),
|
||||||
]
|
]
|
||||||
|
|
||||||
summary = _compute_step_summary(logs)
|
summary = _compute_step_summary(logs)
|
||||||
@@ -144,24 +148,28 @@ class TestMetricsCountingBugFixes:
|
|||||||
Test that upload tasks are only counted once per destination,
|
Test that upload tasks are only counted once per destination,
|
||||||
using the latest status.
|
using the latest status.
|
||||||
"""
|
"""
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
class MockLog:
|
class MockLog:
|
||||||
def __init__(self, step_name, status):
|
def __init__(self, step_name, status, timestamp):
|
||||||
self.step_name = step_name
|
self.step_name = step_name
|
||||||
self.status = status
|
self.status = status
|
||||||
|
self.timestamp = timestamp
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
# Logs ordered by timestamp desc (latest first)
|
# Logs ordered by timestamp desc (latest first)
|
||||||
logs = [
|
logs = [
|
||||||
# Latest status for uploads
|
# Latest status for uploads
|
||||||
MockLog("upload_to_dropbox", "success"),
|
MockLog("upload_to_dropbox", "success", now - timedelta(minutes=1)),
|
||||||
MockLog("upload_to_s3", "success"),
|
MockLog("upload_to_s3", "success", now - timedelta(minutes=2)),
|
||||||
MockLog("upload_to_nextcloud", "success"),
|
MockLog("upload_to_nextcloud", "success", now - timedelta(minutes=3)),
|
||||||
# Queue logs (older, should use upload_to_ as latest)
|
# Queue logs (older, should use upload_to_ as latest)
|
||||||
MockLog("queue_dropbox", "success"),
|
MockLog("queue_dropbox", "success", now - timedelta(minutes=4)),
|
||||||
MockLog("queue_s3", "in_progress"),
|
MockLog("queue_s3", "in_progress", now - timedelta(minutes=5)),
|
||||||
MockLog("queue_nextcloud", "success"),
|
MockLog("queue_nextcloud", "success", now - timedelta(minutes=6)),
|
||||||
# Even older in_progress logs
|
# Even older in_progress logs
|
||||||
MockLog("upload_to_dropbox", "in_progress"),
|
MockLog("upload_to_dropbox", "in_progress", now - timedelta(minutes=7)),
|
||||||
MockLog("upload_to_s3", "in_progress"),
|
MockLog("upload_to_s3", "in_progress", now - timedelta(minutes=8)),
|
||||||
]
|
]
|
||||||
|
|
||||||
summary = _compute_step_summary(logs)
|
summary = _compute_step_summary(logs)
|
||||||
@@ -177,24 +185,29 @@ class TestMetricsCountingBugFixes:
|
|||||||
Test the scenario from the issue: File with 6 actual uploads
|
Test the scenario from the issue: File with 6 actual uploads
|
||||||
should show 6, not 12.
|
should show 6, not 12.
|
||||||
"""
|
"""
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
class MockLog:
|
class MockLog:
|
||||||
def __init__(self, step_name, status):
|
def __init__(self, step_name, status, timestamp):
|
||||||
self.step_name = step_name
|
self.step_name = step_name
|
||||||
self.status = status
|
self.status = status
|
||||||
|
self.timestamp = timestamp
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
# Simulate 6 successful uploads with their queue steps
|
# Simulate 6 successful uploads with their queue steps
|
||||||
logs = []
|
logs = []
|
||||||
services = ["dropbox", "s3", "nextcloud", "google_drive", "onedrive", "webdav"]
|
services = ["dropbox", "s3", "nextcloud", "google_drive", "onedrive", "webdav"]
|
||||||
|
|
||||||
# Add latest status (all success)
|
# Add latest status (all success) - most recent
|
||||||
for service in services:
|
for i, service in enumerate(services):
|
||||||
logs.append(MockLog(f"upload_to_{service}", "success"))
|
logs.append(MockLog(f"upload_to_{service}", "success", now - timedelta(minutes=i*2)))
|
||||||
logs.append(MockLog(f"queue_{service}", "success"))
|
logs.append(MockLog(f"queue_{service}", "success", now - timedelta(minutes=i*2+1)))
|
||||||
|
|
||||||
# Add some older in_progress logs
|
# Add some older in_progress logs
|
||||||
for service in services:
|
base_offset = len(services) * 2
|
||||||
logs.append(MockLog(f"upload_to_{service}", "in_progress"))
|
for i, service in enumerate(services):
|
||||||
logs.append(MockLog(f"queue_{service}", "in_progress"))
|
logs.append(MockLog(f"upload_to_{service}", "in_progress", now - timedelta(minutes=base_offset+i*2)))
|
||||||
|
logs.append(MockLog(f"queue_{service}", "in_progress", now - timedelta(minutes=base_offset+i*2+1)))
|
||||||
|
|
||||||
summary = _compute_step_summary(logs)
|
summary = _compute_step_summary(logs)
|
||||||
|
|
||||||
@@ -208,19 +221,23 @@ class TestMetricsCountingBugFixes:
|
|||||||
"""
|
"""
|
||||||
Test that upload metrics correctly reflect mixed statuses.
|
Test that upload metrics correctly reflect mixed statuses.
|
||||||
"""
|
"""
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
class MockLog:
|
class MockLog:
|
||||||
def __init__(self, step_name, status):
|
def __init__(self, step_name, status, timestamp):
|
||||||
self.step_name = step_name
|
self.step_name = step_name
|
||||||
self.status = status
|
self.status = status
|
||||||
|
self.timestamp = timestamp
|
||||||
|
|
||||||
|
now = datetime.now()
|
||||||
logs = [
|
logs = [
|
||||||
# Latest statuses
|
# Latest statuses (ordered by timestamp desc)
|
||||||
MockLog("upload_to_dropbox", "success"),
|
MockLog("upload_to_dropbox", "success", now - timedelta(minutes=1)),
|
||||||
MockLog("upload_to_s3", "failure"),
|
MockLog("upload_to_s3", "failure", now - timedelta(minutes=2)),
|
||||||
MockLog("upload_to_nextcloud", "in_progress"),
|
MockLog("upload_to_nextcloud", "in_progress", now - timedelta(minutes=3)),
|
||||||
MockLog("queue_dropbox", "success"),
|
MockLog("queue_dropbox", "success", now - timedelta(minutes=4)),
|
||||||
MockLog("queue_s3", "success"),
|
MockLog("queue_s3", "success", now - timedelta(minutes=5)),
|
||||||
MockLog("queue_nextcloud", "success"),
|
MockLog("queue_nextcloud", "success", now - timedelta(minutes=6)),
|
||||||
]
|
]
|
||||||
|
|
||||||
summary = _compute_step_summary(logs)
|
summary = _compute_step_summary(logs)
|
||||||
|
|||||||
Reference in New Issue
Block a user