refactor for separation of concern for better readabiliy and maintainability
This commit is contained in:
72
pkg/task/metrics_summary.go
Normal file
72
pkg/task/metrics_summary.go
Normal file
@@ -0,0 +1,72 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user