fix: enhance monitoring metrics with latest sample aggregation and derived metrics calculations
Backend CI / Backend (push) Successful in 21m2s
Backend CI / Backend (push) Successful in 21m2s
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user