summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects/deployments_controller.rb1
-rw-r--r--app/models/deployment.rb5
-rw-r--r--spec/controllers/projects/deployments_controller_spec.rb4
-rw-r--r--spec/models/deployment_spec.rb27
4 files changed, 33 insertions, 4 deletions
diff --git a/app/controllers/projects/deployments_controller.rb b/app/controllers/projects/deployments_controller.rb
index 581639e5f48..d3363deb354 100644
--- a/app/controllers/projects/deployments_controller.rb
+++ b/app/controllers/projects/deployments_controller.rb
@@ -5,7 +5,6 @@ class Projects::DeploymentsController < Projects::ApplicationController
@metrics = deployment.metrics(1.hour)
if @metrics&.any?
- @metrics[:deployment_time] = deployment.created_at.utc.to_i
render json: @metrics, status: :ok
else
head :no_content
diff --git a/app/models/deployment.rb b/app/models/deployment.rb
index aeef71742af..bed5e271cd9 100644
--- a/app/models/deployment.rb
+++ b/app/models/deployment.rb
@@ -105,10 +105,13 @@ class Deployment < ActiveRecord::Base
def metrics(timeframe)
return {} unless has_metrics?
+
half_timeframe = timeframe / 2
timeframe_start = created_at - half_timeframe
timeframe_end = created_at + half_timeframe
- project.monitoring_service.metrics(environment, timeframe_start: timeframe_start, timeframe_end: timeframe_end)
+
+ metrics = project.monitoring_service.metrics(environment, timeframe_start: timeframe_start, timeframe_end: timeframe_end)
+ metrics&.merge(deployment_time: created_at.to_i) || {}
end
private
diff --git a/spec/controllers/projects/deployments_controller_spec.rb b/spec/controllers/projects/deployments_controller_spec.rb
index e36a9b77824..76fe80bcf53 100644
--- a/spec/controllers/projects/deployments_controller_spec.rb
+++ b/spec/controllers/projects/deployments_controller_spec.rb
@@ -23,7 +23,8 @@ describe Projects::DeploymentsController do
before do
expect(deployment).to receive(:metrics).and_return(nil)
end
- it 'returns a metrics JSON document' do
+
+ it 'returns a empty response 204 resposne' do
get :metrics, deployment_params
expect(response).to have_http_status(204)
expect(response.body).to eq('')
@@ -49,7 +50,6 @@ describe Projects::DeploymentsController do
expect(response).to be_ok
expect(json_response['success']).to be(true)
expect(json_response['metrics']).to eq({})
- expect(json_response['deployment_time']).to eq(deployment.created_at.utc.to_i)
expect(json_response['last_update']).to eq(42)
end
end
diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb
index 080ff2f3f43..212fcd884a8 100644
--- a/spec/models/deployment_spec.rb
+++ b/spec/models/deployment_spec.rb
@@ -49,6 +49,33 @@ describe Deployment, models: true do
end
end
+ describe '#metrics' do
+ let(:deployment) { create(:deployment) }
+
+ subject { deployment.metrics(1.hour) }
+
+ context 'metrics are disabled' do
+ it { is_expected.to eq({}) }
+ end
+
+ context 'metrics are enabled' do
+ let(:simple_metrics) do
+ {
+ success: true,
+ metrics: {},
+ last_update: 42
+ }
+ end
+
+ before do
+ allow(deployment.project).to receive_message_chain(:monitoring_service, :metrics)
+ .with(any_args).and_return(simple_metrics)
+ end
+
+ it { is_expected.to eq(simple_metrics.merge(deployment_time: deployment.created_at.utc.to_i)) }
+ end
+ end
+
describe '#stop_action' do
let(:build) { create(:ci_build) }