Files
LazyPM/pkg/task/metrics_summary.go
2026-03-03 13:39:20 +01:00

72 lines
1.6 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++
}
// Validation
summary.ValidationAttempts += run.ValidationAttempts
summary.ValidationSuccesses += run.ValidationSuccesses
summary.ValidationFailures += run.ValidationFailures
summary.ValidationChecksPassed += run.ValidationChecksPassed
summary.ValidationChecksFailed += run.ValidationChecksFailed
// 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
}