@@ -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
3648func (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