Skip to content

Commit cda7883

Browse files
feat(team): add pagerduty_team_member_info metric to expose team members and their roles (#51)
1 parent 93ed478 commit cda7883

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ This will run the container locally, mapping container port 8080 to local port 8
9090
| `pagerduty_stats` | Collector | Collector stats |
9191
| `pagerduty_api_counter` | Collector | PagerDuty api call counter |
9292
| `pagerduty_team_info` | Team | Team information |
93+
| `pagerduty_team_member_info` | Team | Team members and their team role |
9394
| `pagerduty_user_info` | User | User information |
9495
| `pagerduty_service_info` | Service | Service (per team) information |
9596
| `pagerduty_maintenancewindow_info` | MaintenanceWindow | Maintenance window information |
@@ -129,3 +130,9 @@ bottomk(1,
129130
) - time() > 0
130131
)
131132
```
133+
134+
Team members
135+
```
136+
pagerduty_team_member_info{teamID="$TEAM_ID"}
137+
* on(userID) group_left(userName) pagerduty_user_info
138+
```

metrics_team.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ type MetricsCollectorTeam struct {
1212
collector.Processor
1313

1414
prometheus struct {
15-
team *prometheus.GaugeVec
15+
team *prometheus.GaugeVec
16+
teamMember *prometheus.GaugeVec
1617
}
1718
}
1819

@@ -31,6 +32,17 @@ func (m *MetricsCollectorTeam) Setup(collector *collector.Collector) {
3132
},
3233
)
3334
m.Collector.RegisterMetricList("pagerduty_team_info", m.prometheus.team, true)
35+
36+
m.prometheus.teamMember = prometheus.NewGaugeVec(
37+
prometheus.GaugeOpts{
38+
Name: "pagerduty_team_member_info",
39+
Help: "PagerDuty team member information",
40+
},
41+
[]string{
42+
"teamID", "userID", "role",
43+
},
44+
)
45+
m.Collector.RegisterMetricList("pagerduty_team_member_info", m.prometheus.teamMember, true)
3446
}
3547

3648
func (m *MetricsCollectorTeam) Reset() {
@@ -42,6 +54,7 @@ func (m *MetricsCollectorTeam) Collect(callback chan<- func()) {
4254
listOpts.Offset = 0
4355

4456
teamMetricList := m.Collector.GetMetricList("pagerduty_team_info")
57+
teamMembersMetricList := m.Collector.GetMetricList("pagerduty_team_member_info")
4558

4659
for {
4760
m.Logger().Debug("fetch teams", slog.Uint64("offset", uint64(listOpts.Offset)), slog.Uint64("limit", uint64(listOpts.Limit)))
@@ -59,6 +72,20 @@ func (m *MetricsCollectorTeam) Collect(callback chan<- func()) {
5972
"teamName": team.Name,
6073
"teamUrl": team.HTMLURL,
6174
})
75+
76+
members, err := PagerDutyClient.ListTeamMembersPaginated(m.Context(), team.ID)
77+
PrometheusPagerDutyApiCounter.WithLabelValues("ListTeamMemberships").Inc()
78+
if err != nil {
79+
m.Logger().Errorf("error fetching team members for team %s: %v", team.ID, err)
80+
break
81+
}
82+
for _, member := range members {
83+
teamMembersMetricList.AddInfo(prometheus.Labels{
84+
"teamID": team.ID,
85+
"userID": member.User.ID,
86+
"role": member.Role,
87+
})
88+
}
6289
}
6390

6491
listOpts.Offset += list.Limit

0 commit comments

Comments
 (0)