fix(tempo): only log red team execution time, use pre-computed duration
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Two bugs fixed:
1. Blue team evaluation was also sent to Tempo. Only operator (red team)
execution time should be logged — blue team time is tracked internally
in Aegis but does NOT represent billable operator work. Added a
whitelist (_TEMPO_ACTIVITY_TYPES = {"red_team_execution"}).
2. _calculate_duration() re-computed duration from red_started_at to
datetime.utcnow() at call time, without subtracting paused seconds.
This caused inflated times (e.g. 45 min instead of 5 min) when there
was any delay between the workflow transition and the Tempo call.
Now the duration_seconds already computed by _create_phase_worklog
(gross elapsed - paused) is passed directly to auto_log_test_worklog
and used as-is, so Aegis and Tempo always agree on the duration.
Also: use red_started_at as the worklog date (not submission timestamp)
so the Tempo entry reflects when the work actually happened.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -327,10 +327,11 @@ def _create_phase_worklog(
|
||||
test.id, activity_type, duration_seconds, wl.id,
|
||||
)
|
||||
|
||||
# Sync to Tempo if enabled
|
||||
# Sync to Tempo: only red_team_execution, using the already-computed
|
||||
# duration so the Tempo entry is identical to the Aegis worklog.
|
||||
try:
|
||||
from app.services.tempo_service import auto_log_test_worklog
|
||||
auto_log_test_worklog(db, test, user, activity_type)
|
||||
auto_log_test_worklog(db, test, user, activity_type, duration_seconds)
|
||||
except Exception as e:
|
||||
logger.warning("Tempo sync failed for worklog: %s", e, exc_info=True)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user