Files
LazyPM/pkg/task/metrics_summary.go
2026-03-24 12:31:15 +01:00

87 lines
2.1 KiB
Go

package task
import (
"github.com/LazyBachelor/LazyPM/internal/models"
)
func buildTaskStatsSummary(runs []models.TaskRunMetrics) models.TaskStatsSummary {
var summary models.TaskStatsSummary
if len(runs) == 0 {
return summary
}
summary.TotalRuns = len(runs)
for i, run := range runs {
// First run handling
if i == 0 || run.StartedAt.Before(summary.FirstRunStartedAt) {
summary.FirstRunStartedAt = run.StartedAt
}
if run.StartedAt.After(summary.LastRunStartedAt) {
summary.LastRunStartedAt = run.StartedAt
}
if run.EndedAt.After(summary.LastRunEndedAt) {
summary.LastRunEndedAt = run.EndedAt
summary.LastInterfaceType = run.InterfaceType
}
// Duration
summary.TotalDurationMs += run.DurationMs
// Completion
if run.Completed {
summary.CompletedRuns++
} else {
summary.IncompleteRuns++
}
switch run.RunOutcome {
case models.RunOutcomeInfraError:
summary.InfraFailures++
case models.RunOutcomeUserQuit:
summary.UserQuits++
}
// Validation
summary.ValidationAttempts += run.ValidationAttempts
summary.ValidationManualAttempts += run.ValidationManualAttempts
summary.ValidationAutoRefreshes += run.ValidationAutoRefreshes
summary.ValidationRefreshes += run.ValidationRefreshes
summary.ValidationSuccesses += run.ValidationSuccesses
summary.ValidationFailures += run.ValidationFailures
summary.ValidationChecksPassed += run.ValidationChecksPassed
summary.ValidationChecksFailed += run.ValidationChecksFailed
if run.AttemptsToFirstSuccess > 0 {
summary.RunsWithFirstSuccess++
summary.TotalAttemptsToFirstSuccess += run.AttemptsToFirstSuccess
summary.TotalTimeToFirstSuccessMs += run.TimeToFirstSuccessMs
}
// Questionnaire
if run.QuestionnaireCompleted {
summary.QuestionnairesCompleted++
}
if run.QuestionnaireUserQuit {
summary.QuestionnairesAbandoned++
}
// User actions
for _, log := range run.Logs {
if log.Level == "user_action" {
summary.TotalUserActions++
}
}
}
if summary.TotalRuns > 0 {
summary.AverageDurationMs =
summary.TotalDurationMs / int64(summary.TotalRuns)
}
return summary
}