@@ -26,14 +26,17 @@ import (
2626 "yunion.io/x/pkg/errors"
2727 "yunion.io/x/pkg/gotypes"
2828 "yunion.io/x/pkg/util/httputils"
29+ "yunion.io/x/pkg/util/version"
2930 "yunion.io/x/pkg/utils"
3031
3132 "yunion.io/x/onecloud/pkg/apis"
33+ compute_api "yunion.io/x/onecloud/pkg/apis/compute"
3234 api "yunion.io/x/onecloud/pkg/apis/identity"
3335 "yunion.io/x/onecloud/pkg/cloudcommon/tsdb"
3436 "yunion.io/x/onecloud/pkg/cloudmon/options"
3537 "yunion.io/x/onecloud/pkg/mcclient"
3638 "yunion.io/x/onecloud/pkg/mcclient/auth"
39+ "yunion.io/x/onecloud/pkg/mcclient/modules/compute"
3740 "yunion.io/x/onecloud/pkg/mcclient/modules/identity"
3841 "yunion.io/x/onecloud/pkg/util/influxdb"
3942)
@@ -67,7 +70,13 @@ func CollectServiceMetrics(ctx context.Context, userCred mcclient.TokenCredentia
6770 return
6871 }
6972 s := auth .GetAdminSession (ctx , options .Options .CommonOptions .Region )
70- err := func () error {
73+ urls , err := tsdb .GetDefaultServiceSourceURLs (s , options .Options .SessionEndpointType )
74+ if err != nil {
75+ return
76+ }
77+
78+ tk := auth .AdminCredential ().GetTokenString ()
79+ err = func () error {
7180 endpoints , err := getEndpoints (ctx , s )
7281 if err != nil {
7382 return errors .Wrapf (err , "getEndpoints" )
@@ -83,7 +92,6 @@ func CollectServiceMetrics(ctx context.Context, userCred mcclient.TokenCredentia
8392 continue
8493 }
8594 url := httputils .JoinPath (ep .Url , "version" )
86- tk := auth .AdminCredential ().GetTokenString ()
8795 hdr := http.Header {}
8896 hdr .Set ("X-Auth-Token" , tk )
8997 resp , err := httputils .Request (
@@ -106,15 +114,48 @@ func CollectServiceMetrics(ctx context.Context, userCred mcclient.TokenCredentia
106114 }
107115 metrics = append (metrics , part ... )
108116 }
109- urls , err := tsdb .GetDefaultServiceSourceURLs (s , options .Options .SessionEndpointType )
110- if err != nil {
111- return errors .Wrap (err , "GetServiceURLs" )
112- }
113117 return influxdb .SendMetrics (urls , SYSTEM_METRIC_DATABASE , metrics , false )
114118 }()
115119 if err != nil {
116120 log .Errorf ("collect service metric error: %v" , err )
117121 }
122+ params := compute_api.HostListInput {}
123+ limit := 20
124+ params .Limit = & limit
125+ params .Brand = []string {compute_api .CLOUD_PROVIDER_ONECLOUD }
126+ params .Scope = "system"
127+ params .Status = []string {compute_api .HOST_STATUS_RUNNING }
128+ details := false
129+ params .Details = & details
130+ hosts := []compute_api.HostDetails {}
131+ for {
132+ offset := len (hosts )
133+ params .Offset = & offset
134+ resp , err := compute .Hosts .List (s , jsonutils .Marshal (params ))
135+ if err != nil {
136+ return
137+ }
138+ part := []compute_api.HostDetails {}
139+ err = jsonutils .Update (& part , resp .Data )
140+ if err != nil {
141+ return
142+ }
143+ hosts = append (hosts , part ... )
144+ if len (hosts ) >= resp .Total {
145+ break
146+ }
147+ }
148+ metrics := []influxdb.SMetricData {}
149+ for _ , host := range hosts {
150+ service := fmt .Sprintf ("host-%s" , host .Name )
151+ part , err := collectWorkerMetrics (ctx , host .ManagerUri , service , version .GetShortString (), tk )
152+ if err != nil {
153+ log .Errorf ("collect host %s metric error: %v" , service , err )
154+ continue
155+ }
156+ metrics = append (metrics , part ... )
157+ }
158+ influxdb .SendMetrics (urls , SYSTEM_METRIC_DATABASE , metrics , false )
118159}
119160
120161func collectStatsMetrics (ctx context.Context , ep api.EndpointDetails , version , token string ) ([]influxdb.SMetricData , error ) {
@@ -257,8 +298,8 @@ func collectStatsMetrics(ctx context.Context, ep api.EndpointDetails, version, t
257298 return result , nil
258299}
259300
260- func collectWorkerMetrics (ctx context.Context , ep api. EndpointDetails , version , token string ) ([]influxdb.SMetricData , error ) {
261- statsUrl := httputils .JoinPath (ep . Url , "worker_stats" )
301+ func collectWorkerMetrics (ctx context.Context , url , service , version , token string ) ([]influxdb.SMetricData , error ) {
302+ statsUrl := httputils .JoinPath (url , "worker_stats" )
262303 hdr := http.Header {}
263304 hdr .Set ("X-Auth-Token" , token )
264305 _ , ret , err := httputils .JSONRequest (
@@ -301,7 +342,7 @@ func collectWorkerMetrics(ctx context.Context, ep api.EndpointDetails, version,
301342 },
302343 {
303344 Key : "service" ,
304- Value : ep . ServiceName ,
345+ Value : service ,
305346 },
306347 {
307348 Key : "worker_name" ,
@@ -484,7 +525,7 @@ func collectServiceMetrics(ctx context.Context, ep api.EndpointDetails, version,
484525 errs = append (errs , err )
485526 }
486527 ret = append (ret , stats ... )
487- worker , err := collectWorkerMetrics (ctx , ep , version , token )
528+ worker , err := collectWorkerMetrics (ctx , ep . Url , ep . ServiceName , version , token )
488529 if err != nil {
489530 errs = append (errs , err )
490531 }
0 commit comments