Skip to content

Commit

Permalink
feat(metrics): merge utask_task_state and utask_task_state_per_resolv…
Browse files Browse the repository at this point in the history
…er_group metrics

Signed-off-by: Thomas Bétrancourt <thomas@betrancourt.net>
  • Loading branch information
rclsilver committed Jun 27, 2023
1 parent 83f72f1 commit 814b9f0
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 14 deletions.
14 changes: 2 additions & 12 deletions api/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,28 +17,18 @@ import (
)

var (
metrics = promauto.NewGaugeVec(prometheus.GaugeOpts{Name: "utask_task_state"}, []string{"status"})
metricsResolverGroup = promauto.NewGaugeVec(prometheus.GaugeOpts{Name: "utask_task_state_per_resolver_group"}, []string{"status", "group"})
metrics = promauto.NewGaugeVec(prometheus.GaugeOpts{Name: "utask_task_state"}, []string{"status", "group"})
)

func updateMetrics(dbp zesty.DBProvider) {
// utask_task_state
stats, err := task.LoadStateCount(dbp, nil)
if err != nil {
logrus.Warn(err)
}
for state, count := range stats {
metrics.WithLabelValues(state).Set(count)
}

// utask_task_state_per_resolver_group
statsResolverGroup, err := task.LoadStateCountResolverGroup(dbp)
if err != nil {
logrus.Warn(err)
}
for group, groupStats := range statsResolverGroup {
for state, count := range groupStats {
metricsResolverGroup.WithLabelValues(state, group).Set(count)
metrics.WithLabelValues(state, group).Set(count)
}
}
}
Expand Down
9 changes: 8 additions & 1 deletion models/task/stats.go
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,14 @@ func LoadStateCount(dbp zesty.DBProvider, tags map[string]string) (sc map[string
func LoadStateCountResolverGroup(dbp zesty.DBProvider) (sc map[string]map[string]float64, err error) {
defer errors.DeferredAnnotatef(&err, "Failed to load task stats")

subQuery := sqlgenerator.PGsql.Select(`t."id"`, `t."state"`, `coalesce(nullif(t."resolver_groups", 'null'::jsonb), nullif(tt."allowed_resolver_groups", 'null'::jsonb)) as "groups"`).
subQuery := sqlgenerator.PGsql.Select(
`t."id"`,
`t."state"`,
`coalesce(
nullif(t."resolver_groups", 'null'::jsonb),
nullif(tt."allowed_resolver_groups", 'null'::jsonb),
'[""]'::jsonb
) as "groups"`).
From(`"task" t`).
LeftJoin(`"task_template" tt ON t."id_template" = tt."id"`)

Expand Down
14 changes: 13 additions & 1 deletion models/task/stats_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ func TestLoadStateCountResolverGroup(t *testing.T) {
dbp, err := zesty.NewDBProvider(utask.DBName)
assert.NoError(t, err)

err = task.DeleteAllTasks(dbp)
assert.NoError(t, err)

tests := []struct {
name string
tasks map[string][]string
Expand All @@ -119,7 +122,16 @@ func TestLoadStateCountResolverGroup(t *testing.T) {
"no-group",
map[string][]string{"task": nil},
map[string][]string{"task": nil},
map[string]map[string]float64{},
map[string]map[string]float64{
"": {
task.StateTODO: 1,
task.StateBlocked: 0,
task.StateRunning: 0,
task.StateWontfix: 0,
task.StateDone: 0,
task.StateCancelled: 0,
},
},
},
{
"no-override",
Expand Down
28 changes: 28 additions & 0 deletions models/task/task_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package task

import (
"github.com/loopfz/gadgeto/zesty"
"github.com/ovh/utask/db/pgjuju"
)

func DeleteAllTasks(dbp zesty.DBProvider) error {
var tasks []*Task

query, params, err := tSelector.ToSql()
if err != nil {
return err
}

_, err = dbp.DB().Select(&tasks, query, params...)
if err != nil {
return pgjuju.Interpret(err)
}

for _, tsk := range tasks {
if err := tsk.Delete(dbp); err != nil {
return err
}
}

return nil
}

0 comments on commit 814b9f0

Please sign in to comment.