From b22b6bb007023baaeebe84a4db786d7c76f82ee7 Mon Sep 17 00:00:00 2001 From: Alyx Holms Date: Thu, 17 Oct 2024 11:55:51 -0600 Subject: [PATCH] BED-4947: Fix Last Analysis Run At Bug (#907) * fix: logic bug causing last analysis run at to update every time we changed status * fix: test was reliant on bug, fixed test to be in line with reality --- cmd/api/src/database/datapipestatus.go | 16 +++++++++++----- cmd/api/src/database/datapipestatus_test.go | 2 +- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/cmd/api/src/database/datapipestatus.go b/cmd/api/src/database/datapipestatus.go index ab8144469d..e003066c48 100644 --- a/cmd/api/src/database/datapipestatus.go +++ b/cmd/api/src/database/datapipestatus.go @@ -25,16 +25,22 @@ import ( ) func (s *BloodhoundDB) SetDatapipeStatus(ctx context.Context, status model.DatapipeStatus, updateAnalysisTime bool) error { - - updateSql := "UPDATE datapipe_status SET status = ?, updated_at = ?, last_analysis_run_at = ?" now := time.Now().UTC() + // All queries will update the status and table update time + updateSql := "UPDATE datapipe_status SET status = ?, updated_at = ?" - if updateAnalysisTime { + if status == model.DatapipeStatusAnalyzing { + // Updates last run anytime we start analysis + updateSql += ", last_analysis_run_at = ?;" + return s.db.WithContext(ctx).Exec(updateSql, status, now, now).Error + } else if updateAnalysisTime { + // Updates last completed when analysis is set to complete updateSql += ", last_complete_analysis_at = ?;" - return s.db.WithContext(ctx).Exec(updateSql, status, now, now, now).Error + return s.db.WithContext(ctx).Exec(updateSql, status, now, now).Error } else { + // Otherwise, only update status and last update to the table updateSql += ";" - return s.db.WithContext(ctx).Exec(updateSql, status, now, now).Error + return s.db.WithContext(ctx).Exec(updateSql, status, now).Error } } diff --git a/cmd/api/src/database/datapipestatus_test.go b/cmd/api/src/database/datapipestatus_test.go index 5ce3c71d67..5b5d12f919 100644 --- a/cmd/api/src/database/datapipestatus_test.go +++ b/cmd/api/src/database/datapipestatus_test.go @@ -47,7 +47,7 @@ func TestDatapipeStatus(t *testing.T) { // when `SetDatapipeStatus` is called with `true` for the `updateAnalysisTime` parameter, assert that the time is no longer null require.True(t, status.LastCompleteAnalysisAt.IsZero()) - err = db.SetDatapipeStatus(testCtx, model.DatapipeStatusAnalyzing, true) + err = db.SetDatapipeStatus(testCtx, model.DatapipeStatusIdle, true) require.Nil(t, err) status, err = db.GetDatapipeStatus(testCtx) require.Nil(t, err)