added some nice graphs to the tasks
This commit is contained in:
95
logic/stats/tasks.go
Normal file
95
logic/stats/tasks.go
Normal file
@@ -0,0 +1,95 @@
|
||||
package stats
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
. "git.andr3h3nriqu3s.com/andr3/fyp/logic/db_types"
|
||||
. "git.andr3h3nriqu3s.com/andr3/fyp/logic/tasks/utils"
|
||||
. "git.andr3h3nriqu3s.com/andr3/fyp/logic/utils"
|
||||
)
|
||||
|
||||
func handleTasksStats(handle *Handle) {
|
||||
type ModelTasksStatsRequest struct {
|
||||
ModelId string `json:"model_id" validate:"required"`
|
||||
}
|
||||
PostAuthJson(handle, "/stats/task/model/day", User_Normal, func(c *Context, dat *ModelTasksStatsRequest) *Error {
|
||||
model, err := GetBaseModel(c, dat.ModelId)
|
||||
if err == ModelNotFoundError {
|
||||
return c.JsonBadRequest("Model not found!")
|
||||
} else if err != nil {
|
||||
return c.E500M("Failed to get model", err)
|
||||
}
|
||||
|
||||
now := time.Now()
|
||||
now = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, now.Location())
|
||||
|
||||
tasks, err := GetDbMultitple[Task](c, "tasks where model_id=$1 and created_on > $2 order by created_on asc;", model.Id, now)
|
||||
if err != nil {
|
||||
return c.E500M("Failed to get task informations", err)
|
||||
}
|
||||
|
||||
type DataPoint struct {
|
||||
Non_classfication_tasks_su int `json:"nc_success"`
|
||||
Non_classfication_tasks_err int `json:"nc_error"`
|
||||
|
||||
Classfication_su int `json:"c_success"`
|
||||
Classfication_fal int `json:"c_failure"`
|
||||
Classfication_un int `json:"c_unknown"`
|
||||
Classfication_err int `json:"c_error"`
|
||||
Classfication_pre int `json:"c_pre_running"`
|
||||
Classfication_running int `json:"c_running"`
|
||||
}
|
||||
|
||||
total := DataPoint{}
|
||||
hours := make([]DataPoint, 24)
|
||||
|
||||
for i := 0; i < 24; i++ {
|
||||
hours[i] = DataPoint{}
|
||||
}
|
||||
|
||||
for i := range tasks {
|
||||
task := tasks[i]
|
||||
hour := task.CreatedOn.Hour()
|
||||
if task.TaskType == int(TASK_TYPE_CLASSIFICATION) {
|
||||
if task.Status == 4 {
|
||||
if task.UserConfirmed == 1 {
|
||||
total.Classfication_su += 1
|
||||
hours[hour].Classfication_su += 1
|
||||
} else if task.UserConfirmed == -1 {
|
||||
total.Classfication_fal += 1
|
||||
hours[hour].Classfication_fal += 1
|
||||
} else {
|
||||
total.Classfication_un += 1
|
||||
hours[hour].Classfication_un += 1
|
||||
}
|
||||
} else if task.Status < 0 {
|
||||
total.Classfication_err += 1
|
||||
hours[hour].Classfication_err += 1
|
||||
} else if task.Status < 2 {
|
||||
total.Classfication_pre += 1
|
||||
hours[hour].Classfication_pre += 1
|
||||
} else if task.Status < 4 {
|
||||
total.Classfication_running += 1
|
||||
hours[hour].Classfication_running += 1
|
||||
}
|
||||
} else {
|
||||
if task.Status >= 0 {
|
||||
total.Non_classfication_tasks_su += 1
|
||||
hours[hour].Non_classfication_tasks_su += 1
|
||||
} else {
|
||||
total.Non_classfication_tasks_err += 1
|
||||
hours[hour].Non_classfication_tasks_err += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data := struct {
|
||||
Total DataPoint `json:"total"`
|
||||
Hours []DataPoint `json:"hours"`
|
||||
}{
|
||||
Total: total,
|
||||
Hours: hours,
|
||||
}
|
||||
return c.SendJSON(data)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user