Skip to content

Commit

Permalink
add number of pending/suspended jobs per user
Browse files Browse the repository at this point in the history
  • Loading branch information
vpenso committed Oct 9, 2020
1 parent 87bd341 commit c60f0a3
Showing 1 changed file with 17 additions and 1 deletion.
18 changes: 17 additions & 1 deletion users.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ func UsersData() []byte {
}

type UserJobMetrics struct {
pending float64
running float64
suspended float64
}

func ParseUsersMetrics(input []byte) map[string]*UserJobMetrics {
Expand All @@ -52,39 +54,53 @@ func ParseUsersMetrics(input []byte) map[string]*UserJobMetrics {
user := strings.Split(line,"|")[1]
_,key := users[user]
if !key {
users[user] = &UserJobMetrics{0}
users[user] = &UserJobMetrics{0,0,0}
}
state := strings.Split(line,"|")[2]
state = strings.ToLower(state)
pending := regexp.MustCompile(`^pending`)
running := regexp.MustCompile(`^running`)
suspended := regexp.MustCompile(`^suspended`)
switch {
case pending.MatchString(state) == true:
users[user].pending++
case running.MatchString(state) == true:
users[user].running++
case suspended.MatchString(state) == true:
users[user].suspended++
}
}
}
return users
}

type UsersCollector struct {
pending *prometheus.Desc
running *prometheus.Desc
suspended *prometheus.Desc
}

func NewUsersCollector() *UsersCollector {
labels := []string{"user"}
return &UsersCollector {
pending: prometheus.NewDesc("slurm_user_jobs_pending", "Pending jobs for user", labels, nil),
running: prometheus.NewDesc("slurm_user_jobs_running", "Running jobs for user", labels, nil),
suspended: prometheus.NewDesc("slurm_user_jobs_suspended", "Suspended jobs for user", labels, nil),
}
}

func (uc *UsersCollector) Describe(ch chan<- *prometheus.Desc) {
ch <- uc.pending
ch <- uc.running
ch <- uc.suspended
}

func (uc *UsersCollector) Collect(ch chan<- prometheus.Metric) {
um := ParseUsersMetrics(UsersData())
for u := range um {
ch <- prometheus.MustNewConstMetric(uc.pending, prometheus.GaugeValue, um[u].pending, u)
ch <- prometheus.MustNewConstMetric(uc.running, prometheus.GaugeValue, um[u].running, u)
ch <- prometheus.MustNewConstMetric(uc.suspended, prometheus.GaugeValue, um[u].suspended, u)
}
}

0 comments on commit c60f0a3

Please sign in to comment.