@@ -53,7 +53,7 @@ func NewApplicationsCollector(
5353 Help : "Buildpack used by an Application." ,
5454 ConstLabels : prometheus.Labels {"environment" : environment , "deployment" : deployment },
5555 },
56- []string {"application_id" , "application_name" , "buildpack_name" },
56+ []string {"application_id" , "application_name" , "buildpack_name" , "detected_buildpack" },
5757 )
5858
5959 applicationInstancesMetric := prometheus .NewGaugeVec (
@@ -242,30 +242,37 @@ func (c ApplicationsCollector) reportApp(application models.Application, objs *m
242242 return fmt .Errorf ("could not find org with guid '%s'" , orgRel .GUID )
243243 }
244244
245- appSum , ok := objs .AppSummaries [application .GUID ]
246- if ! ok {
247- return fmt .Errorf ("could not find app summary with guid '%s'" , application .GUID )
248- }
249-
250- // 1.
251- detectedBuildpack := appSum .DetectedBuildpack
252- if len (detectedBuildpack ) == 0 {
253- detectedBuildpack = appSum .Buildpack
254- }
255-
256- // 2.
257- buildpack := appSum .Buildpack
258- if len (buildpack ) == 0 {
259- buildpack = appSum .DetectedBuildpack
245+ detectedBuildpack := ""
246+ buildpack := ""
247+ stackGUID := ""
248+ for _ , stack := range objs .Stacks {
249+ if stack .Name == application .Lifecycle .Data .Stack {
250+ stackGUID = stack .GUID
251+ break
252+ }
260253 }
261-
262- // 3. Use the droplet data for the buildpack metric
263- for _ , bp := range application .Lifecycle .Data .Buildpacks {
264- c .applicationBuildpackMetric .WithLabelValues (
265- application .GUID ,
266- application .Name ,
267- bp ,
268- ).Set (float64 (1 ))
254+ if dropletGUID := application .Relationships [constant .RelationshipTypeCurrentDroplet ].GUID ; dropletGUID != "" {
255+ if droplet , ok := objs .Droplets [dropletGUID ]; ok {
256+ // 1.
257+ detectedBuildpack = droplet .Buildpacks [0 ].DetectOutput
258+ // 2.
259+ buildpack = droplet .Buildpacks [0 ].BuildpackName
260+ if len (detectedBuildpack ) == 0 {
261+ detectedBuildpack = buildpack
262+ }
263+ if len (buildpack ) == 0 {
264+ buildpack = detectedBuildpack
265+ }
266+ // 3.Use the droplet data for the buildpack metric
267+ for _ , bp := range droplet .Buildpacks {
268+ c .applicationBuildpackMetric .WithLabelValues (
269+ application .GUID ,
270+ application .Name ,
271+ bp .BuildpackName ,
272+ bp .DetectOutput ,
273+ ).Set (float64 (1 ))
274+ }
275+ }
269276 }
270277
271278 c .applicationInfoMetric .WithLabelValues (
@@ -277,7 +284,7 @@ func (c ApplicationsCollector) reportApp(application models.Application, objs *m
277284 organization .Name ,
278285 space .GUID ,
279286 space .Name ,
280- appSum . StackID ,
287+ stackGUID ,
281288 string (application .State ),
282289 ).Set (float64 (1 ))
283290
@@ -291,15 +298,14 @@ func (c ApplicationsCollector) reportApp(application models.Application, objs *m
291298 string (application .State ),
292299 ).Set (float64 (process .Instances .Value ))
293300
294- runningInstances := appSum .RunningInstances
295301 // Use bbs data if available
302+ runningInstances := 0
296303 if len (objs .ProcessActualLRPs ) > 0 {
297- runningsInstances := 0
298- lrps , ok := objs .ProcessActualLRPs [process .GUID ]
304+ LRPs , ok := objs .ProcessActualLRPs [process .GUID ]
299305 if ok {
300- for _ , lrp := range lrps {
306+ for _ , lrp := range LRPs {
301307 if lrp .State == "RUNNING" {
302- runningsInstances ++
308+ runningInstances ++
303309 }
304310 }
305311 }
0 commit comments