From 6aa1082ae6ce6c79dbad4ca366e95ef5fdee1545 Mon Sep 17 00:00:00 2001
From: Matthew Kocher <matthew.kocher@broadcom.com>
Date: Wed, 14 Feb 2024 19:48:50 +0000
Subject: [PATCH] Process stats presenter includes cpu_entitlement

Co-authored-by: Matthew Kocher <matthew.kocher@broadcom.com>
---
 app/presenters/v3/process_stats_presenter.rb  |  1 +
 spec/request/processes_spec.rb                | 21 +++++++++++++++++--
 .../v3/process_stats_presenter_spec.rb        |  7 +++++++
 3 files changed, 27 insertions(+), 2 deletions(-)

diff --git a/app/presenters/v3/process_stats_presenter.rb b/app/presenters/v3/process_stats_presenter.rb
index 6bfcae98105..574d39c7386 100644
--- a/app/presenters/v3/process_stats_presenter.rb
+++ b/app/presenters/v3/process_stats_presenter.rb
@@ -76,6 +76,7 @@ def add_usage_info(presented_stats, stats)
                                       {
                                         time: stats[:stats][:usage][:time],
                                         cpu: stats[:stats][:usage][:cpu],
+                                        cpu_entitlement: stats[:stats][:usage][:cpu_entitlement],
                                         mem: stats[:stats][:usage][:mem],
                                         disk: stats[:stats][:usage][:disk],
                                         log_rate: stats[:stats][:usage][:log_rate]
diff --git a/spec/request/processes_spec.rb b/spec/request/processes_spec.rb
index 8d811498223..88647114944 100644
--- a/spec/request/processes_spec.rb
+++ b/spec/request/processes_spec.rb
@@ -536,7 +536,8 @@
             fds_quota: process.file_descriptors,
             usage: {
               time: usage_time,
-              cpu: 80,
+              cpu: 0.8,
+              cpu_entitlement: 0.1,
               mem: 128,
               disk: 1024,
               log_rate: 1024
@@ -560,7 +561,8 @@
           'details' => 'some-details',
           'usage' => {
             'time' => usage_time,
-            'cpu' => 80,
+            'cpu' => 0.8,
+            'cpu_entitlement' => 0.1,
             'mem' => 128,
             'disk' => 1024,
             'log_rate' => 1024
@@ -606,6 +608,21 @@
           expect(parsed_response).to be_a_response_like(expected_response)
         end
       end
+
+      context 'cpu entitlement usage is not available' do
+        before do
+          stats_for_process[0][:stats][:usage][:cpu_entitlement] = nil
+        end
+
+        it 'returns cpu entitlement as null' do
+          get "/v3/processes/#{process.guid}/stats", nil, developer_headers
+
+          parsed_response = MultiJson.load(last_response.body)
+
+          expect(last_response.status).to eq(200)
+          expect(parsed_response['resources'][0]['usage']['cpu_entitlement']).to be_nil
+        end
+      end
     end
 
     describe 'GET /v3/apps/:guid/processes/:type/stats' do
diff --git a/spec/unit/presenters/v3/process_stats_presenter_spec.rb b/spec/unit/presenters/v3/process_stats_presenter_spec.rb
index 0de03b59a05..66d136774da 100644
--- a/spec/unit/presenters/v3/process_stats_presenter_spec.rb
+++ b/spec/unit/presenters/v3/process_stats_presenter_spec.rb
@@ -74,6 +74,7 @@ module VCAP::CloudController::Presenters::V3
               usage: {
                 time: '2015-12-08 16:54:48 -0800',
                 cpu: 80,
+                cpu_entitlement: 85,
                 mem: 128,
                 disk: 1024,
                 log_rate: 2048
@@ -97,6 +98,7 @@ module VCAP::CloudController::Presenters::V3
               usage: {
                 time: '2015-03-13 16:54:48 -0800',
                 cpu: 70,
+                cpu_entitlement: 75,
                 mem: 128,
                 disk: 1024,
                 log_rate: 7168
@@ -133,6 +135,7 @@ module VCAP::CloudController::Presenters::V3
         expect(result[0][:fds_quota]).to eq(process.file_descriptors)
         expect(result[0][:usage]).to eq({ time: '2015-12-08 16:54:48 -0800',
                                           cpu: 80,
+                                          cpu_entitlement: 85,
                                           mem: 128,
                                           disk: 1024,
                                           log_rate: 2048 })
@@ -148,6 +151,7 @@ module VCAP::CloudController::Presenters::V3
         expect(result[1][:uptime]).to eq(42)
         expect(result[1][:usage]).to eq({ time: '2015-03-13 16:54:48 -0800',
                                           cpu: 70,
+                                          cpu_entitlement: 75,
                                           mem: 128,
                                           disk: 1024,
                                           log_rate: 7168 })
@@ -183,6 +187,7 @@ module VCAP::CloudController::Presenters::V3
                 usage: {
                   time: '2015-12-08 16:54:48 -0800',
                   cpu: 80,
+                  cpu_entitlement: 85,
                   mem: 128,
                   disk: 1024,
                   log_rate: 2048
@@ -221,6 +226,7 @@ module VCAP::CloudController::Presenters::V3
                 usage: {
                   time: '2015-12-08 16:54:48 -0800',
                   cpu: 80,
+                  cpu_entitlement: 85,
                   mem: 128,
                   disk: 1024,
                   log_rate: 2048
@@ -289,6 +295,7 @@ module VCAP::CloudController::Presenters::V3
           expect(result[0][:fds_quota]).to eq(process.file_descriptors)
           expect(result[0][:usage]).to eq({ time: '2015-12-08 16:54:48 -0800',
                                             cpu: 80,
+                                            cpu_entitlement: 85,
                                             mem: 128,
                                             disk: 1024,
                                             log_rate: 2048 })