server: infer archive collected_at from source events
This commit is contained in:
@@ -1589,7 +1589,29 @@ func applyArchiveSourceMetadata(result *models.AnalysisResult) {
|
||||
result.SourceType = models.SourceTypeArchive
|
||||
result.Protocol = ""
|
||||
result.TargetHost = ""
|
||||
result.CollectedAt = time.Now().UTC()
|
||||
if result.CollectedAt.IsZero() {
|
||||
result.CollectedAt = inferArchiveCollectedAt(result)
|
||||
}
|
||||
}
|
||||
|
||||
func inferArchiveCollectedAt(result *models.AnalysisResult) time.Time {
|
||||
if result == nil {
|
||||
return time.Now().UTC()
|
||||
}
|
||||
|
||||
var latest time.Time
|
||||
for _, event := range result.Events {
|
||||
if event.Timestamp.IsZero() {
|
||||
continue
|
||||
}
|
||||
if latest.IsZero() || event.Timestamp.After(latest) {
|
||||
latest = event.Timestamp
|
||||
}
|
||||
}
|
||||
if !latest.IsZero() {
|
||||
return latest.UTC()
|
||||
}
|
||||
return time.Now().UTC()
|
||||
}
|
||||
|
||||
func applyCollectSourceMetadata(result *models.AnalysisResult, req CollectRequest) {
|
||||
|
||||
@@ -30,6 +30,36 @@ func TestApplyArchiveSourceMetadata(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyArchiveSourceMetadata_PreservesExistingCollectedAt(t *testing.T) {
|
||||
expected := time.Date(2026, 2, 10, 15, 30, 0, 0, time.UTC)
|
||||
result := &models.AnalysisResult{
|
||||
CollectedAt: expected,
|
||||
}
|
||||
|
||||
applyArchiveSourceMetadata(result)
|
||||
|
||||
if !result.CollectedAt.Equal(expected) {
|
||||
t.Fatalf("expected collected_at to be preserved: got %s want %s", result.CollectedAt, expected)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyArchiveSourceMetadata_InferCollectedAtFromEvents(t *testing.T) {
|
||||
oldTs := time.Date(2026, 2, 10, 13, 0, 0, 0, time.UTC)
|
||||
newTs := time.Date(2026, 2, 10, 15, 30, 0, 0, time.UTC)
|
||||
result := &models.AnalysisResult{
|
||||
Events: []models.Event{
|
||||
{Timestamp: oldTs},
|
||||
{Timestamp: newTs},
|
||||
},
|
||||
}
|
||||
|
||||
applyArchiveSourceMetadata(result)
|
||||
|
||||
if !result.CollectedAt.Equal(newTs) {
|
||||
t.Fatalf("expected collected_at from latest event: got %s want %s", result.CollectedAt, newTs)
|
||||
}
|
||||
}
|
||||
|
||||
func TestApplyCollectSourceMetadata(t *testing.T) {
|
||||
req := CollectRequest{
|
||||
Host: "bmc-api.local",
|
||||
|
||||
Reference in New Issue
Block a user