@@ -9,7 +9,8 @@ type MetricsCollectorResourceUsage struct {
99 CollectorProcessorGeneral
1010
1111 prometheus struct {
12- resourceUsageBuild * prometheus.GaugeVec
12+ resourceUsageBuild * prometheus.GaugeVec
13+ resourceUsageLicense * prometheus.GaugeVec
1314 }
1415}
1516
@@ -26,18 +27,96 @@ func (m *MetricsCollectorResourceUsage) Setup(collector *CollectorGeneral) {
2627 },
2728 )
2829
30+
31+ m .prometheus .resourceUsageLicense = prometheus .NewGaugeVec (
32+ prometheus.GaugeOpts {
33+ Name : "azure_devops_resourceusage_license" ,
34+ Help : "Azure DevOps resource usage for license informations" ,
35+ },
36+ []string {
37+ "name" ,
38+ },
39+ )
40+
2941 prometheus .MustRegister (m .prometheus .resourceUsageBuild )
42+ prometheus .MustRegister (m .prometheus .resourceUsageLicense )
3043}
3144
3245func (m * MetricsCollectorResourceUsage ) Reset () {
3346 m .prometheus .resourceUsageBuild .Reset ()
47+ m .prometheus .resourceUsageLicense .Reset ()
3448}
3549
3650func (m * MetricsCollectorResourceUsage ) Collect (ctx context.Context , callback chan <- func ()) {
37- m .CollectResourceUsage (ctx , callback )
51+ m .CollectResourceUsageBuild (ctx , callback )
52+ m .CollectResourceUsageAgent (ctx , callback )
53+ }
54+
55+ func (m * MetricsCollectorResourceUsage ) CollectResourceUsageAgent (ctx context.Context , callback chan <- func ()) {
56+ resourceUsage , err := AzureDevopsClient .GetResourceUsageAgent ()
57+ if err != nil {
58+ Logger .Errorf ("call[GetResourceUsageAgent]: %v" , err )
59+ return
60+ }
61+
62+ resourceUsageMetric := NewMetricCollectorList ()
63+
64+ licenseDetails := resourceUsage .Data .Provider .TaskHubLicenseDetails
65+
66+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
67+ "name" : "FreeLicenseCount" ,
68+ }, licenseDetails .FreeLicenseCount )
69+
70+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
71+ "name" : "FreeHostedLicenseCount" ,
72+ }, licenseDetails .FreeHostedLicenseCount )
73+
74+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
75+ "name" : "EnterpriseUsersCount" ,
76+ }, licenseDetails .EnterpriseUsersCount )
77+
78+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
79+ "name" : "EnterpriseUsersCount" ,
80+ }, licenseDetails .EnterpriseUsersCount )
81+
82+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
83+ "name" : "PurchasedHostedLicenseCount" ,
84+ }, licenseDetails .PurchasedHostedLicenseCount )
85+
86+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
87+ "name" : "PurchasedHostedLicenseCount" ,
88+ }, licenseDetails .PurchasedHostedLicenseCount )
89+
90+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
91+ "name" : "TotalLicenseCount" ,
92+ }, licenseDetails .TotalLicenseCount )
93+
94+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
95+ "name" : "MsdnUsersCount" ,
96+ }, licenseDetails .MsdnUsersCount )
97+
98+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
99+ "name" : "HostedAgentMinutesFreeCount" ,
100+ }, licenseDetails .HostedAgentMinutesFreeCount )
101+
102+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
103+ "name" : "HostedAgentMinutesUsedCount" ,
104+ }, licenseDetails .HostedAgentMinutesUsedCount )
105+
106+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
107+ "name" : "TotalPrivateLicenseCount" ,
108+ }, licenseDetails .TotalPrivateLicenseCount )
109+
110+ resourceUsageMetric .AddIfNotNil (prometheus.Labels {
111+ "name" : "TotalHostedLicenseCount" ,
112+ }, licenseDetails .TotalHostedLicenseCount )
113+
114+ callback <- func () {
115+ resourceUsageMetric .GaugeSet (m .prometheus .resourceUsageLicense )
116+ }
38117}
39118
40- func (m * MetricsCollectorResourceUsage ) CollectResourceUsage (ctx context.Context , callback chan <- func ()) {
119+ func (m * MetricsCollectorResourceUsage ) CollectResourceUsageBuild (ctx context.Context , callback chan <- func ()) {
41120 resourceUsage , err := AzureDevopsClient .GetResourceUsageBuild ()
42121 if err != nil {
43122 Logger .Errorf ("call[GetResourceUsageBuild]: %v" , err )
0 commit comments