Skip to content

Commit a70194f

Browse files
committed
Guard against testcase having no timestamp
1 parent ce7c010 commit a70194f

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

src/clusterfuzz/_internal/common/testcase_utils.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ def emit_testcase_triage_duration_metric(testcase_id: int, step: str):
4646
return
4747

4848
from_fuzzer = not get_testcase_upload_metadata(testcase_id)
49+
50+
if not testcase.get_age_in_seconds():
51+
logs.warning(f'No timestamp associated to testcase {testcase_id},'
52+
' failed to emit TESTCASE_TRIAGE_DURATION metric.')
53+
return
54+
4955
testcase_age_in_hours = testcase.get_age_in_seconds() / (60 * 60)
5056

5157
logs.info('Emiting TESTCASE_TRIAGE_DURATION metric for testcase '

src/clusterfuzz/_internal/cron/triage.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,8 @@ def _check_and_update_similar_bug(testcase, issue_tracker):
256256

257257
def _emit_bug_filing_from_testcase_elapsed_time_metric(testcase):
258258
testcase_age = testcase.get_age_in_seconds()
259+
if not testcase_age:
260+
return
259261
monitoring_metrics.BUG_FILING_FROM_TESTCASE_ELAPSED_TIME.add(
260262
testcase_age,
261263
labels={
@@ -346,7 +348,7 @@ def _emit_untriaged_testcase_count_metric():
346348
def _emit_untriaged_testcase_age_metric(testcase: data_types.Testcase,
347349
step: str):
348350
"""Emmits a metric to track age of untriaged testcases."""
349-
if not testcase.timestamp:
351+
if not testcase.get_age_in_seconds():
350352
return
351353

352354
logs.info(f'Emiting UNTRIAGED_TESTCASE_AGE for testcase {testcase.key.id()} '
@@ -435,11 +437,12 @@ def main():
435437
# Require that all tasks like minimizaton, regression testing, etc have
436438
# finished.
437439
if not critical_tasks_completed:
438-
status = PENDING_ANALYZE if testcase.analyze_pending else PENDING_CRITICAL_TASKS
440+
status = PENDING_CRITICAL_TASKS
441+
if testcase.analyze_pending:
442+
status = PENDING_ANALYZE
439443
_emit_untriaged_testcase_age_metric(testcase, status)
440444
_set_testcase_stuck_state(testcase, True)
441-
_increment_untriaged_testcase_count(testcase.job_type,
442-
status)
445+
_increment_untriaged_testcase_count(testcase.job_type, status)
443446
logs.info(
444447
f'Skipping testcase {testcase_id}, critical tasks still pending.')
445448
continue

src/clusterfuzz/_internal/datastore/data_types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,6 +693,8 @@ def get_created_time(self) -> ndb.DateTimeProperty:
693693

694694
def get_age_in_seconds(self):
695695
current_time = datetime.datetime.utcnow()
696+
if not self.get_created_time():
697+
return None
696698
testcase_age = current_time - self.get_created_time()
697699
return testcase_age.total_seconds()
698700

0 commit comments

Comments
 (0)