fix: enhance monitoring metrics with latest sample aggregation and derived metrics calculations
Backend CI / Backend (push) Successful in 21m2s

This commit is contained in:
2026-06-29 17:21:38 +08:00
parent b9b1db6e5d
commit 4040d22605
5 changed files with 356 additions and 89 deletions
@@ -1,6 +1,7 @@
package app
import (
"database/sql"
"testing"
"time"
@@ -234,3 +235,73 @@ func TestApplyDerivedRatesToOverviewSnapshotUsesAllSamplesForMentionRate(t *test
assert.InDelta(t, 0.25, snapshot.FirstRecommendRate.Float64, 0.0001)
assert.InDelta(t, 0.25, snapshot.PositiveMentionRate.Float64, 0.0001)
}
func TestBuildMonitoringDerivedMetricsUsesLatestSamplePerQuestionPlatform(t *testing.T) {
day := time.Date(2026, 6, 29, 0, 0, 0, 0, monitoringBusinessLocation())
questionID := int64(177)
samples := map[monitoringDerivedSampleKey]monitoringDerivedParseSample{}
upsertLatestMonitoringDerivedParseSample(samples, monitoringDerivedParseSample{
BusinessDate: day,
PlatformID: "doubao",
QuestionID: questionID,
EventAt: sql.NullTime{Time: day.Add(10 * time.Hour), Valid: true},
RunID: 2507,
Summary: monitoringAnswerParseSummary{
BrandMentioned: true,
BrandMentionPosition: "mentioned",
},
})
upsertLatestMonitoringDerivedParseSample(samples, monitoringDerivedParseSample{
BusinessDate: day,
PlatformID: "doubao",
QuestionID: questionID,
EventAt: sql.NullTime{Time: day.Add(11 * time.Hour), Valid: true},
RunID: 2628,
Summary: monitoringAnswerParseSummary{
BrandMentioned: false,
BrandMentionPosition: "not_mentioned",
},
})
upsertLatestMonitoringDerivedParseSample(samples, monitoringDerivedParseSample{
BusinessDate: day,
PlatformID: "qwen",
QuestionID: questionID,
EventAt: sql.NullTime{Time: day.Add(10*time.Hour + 30*time.Minute), Valid: true},
RunID: 2510,
Summary: monitoringAnswerParseSummary{
BrandMentioned: true,
BrandMentionPosition: "mentioned",
},
})
metrics := buildMonitoringDerivedMetricsFromLatestSamples(samples)
stats := metrics.ByDateQuestion["2026-06-29"][questionID]
require.True(t, stats.hasSamples())
assert.Equal(t, int64(2), stats.Total)
assert.Equal(t, int64(1), stats.MentionedCount)
require.NotNil(t, stats.mentionRate())
assert.InDelta(t, 0.5, *stats.mentionRate(), 0.0001)
}
func TestMonitoringDerivedPositiveMentionRequiresBrandMention(t *testing.T) {
var stats monitoringDerivedRateStats
stats.add(monitoringAnswerParseSummary{
BrandMentioned: false,
BrandMentionPosition: "not_mentioned",
SentimentLabel: "positive",
})
stats.add(monitoringAnswerParseSummary{
BrandMentioned: true,
BrandMentionPosition: "mentioned",
SentimentLabel: "positive",
})
assert.Equal(t, int64(2), stats.Total)
assert.Equal(t, int64(1), stats.MentionedCount)
assert.Equal(t, int64(1), stats.PositiveMentions)
require.NotNil(t, stats.positiveMentionRate())
assert.InDelta(t, 0.5, *stats.positiveMentionRate(), 0.0001)
}