Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/controllers/projects/deployments_controller.rb16
-rw-r--r--config/routes/project.rb2
-rw-r--r--db/migrate/20170327091750_add_created_at_index_to_deployments.rb11
-rw-r--r--db/schema.rb3
-rw-r--r--spec/controllers/projects/deployments_controller_spec.rb50
5 files changed, 81 insertions, 1 deletions
diff --git a/app/controllers/projects/deployments_controller.rb b/app/controllers/projects/deployments_controller.rb
new file mode 100644
index 00000000000..4606ddd62cc
--- /dev/null
+++ b/app/controllers/projects/deployments_controller.rb
@@ -0,0 +1,16 @@
+class Projects::DeploymentsController < Projects::ApplicationController
+ before_action :authorize_read_deployment!
+
+ def index
+ deployments = environment.deployments.where('created_at > ?', 8.hours.ago)
+ .map { |d| d.slice(:id, :iid, :created_at, :sha, :ref, :tag) }
+
+ render json: { deployments: deployments }
+ end
+
+ private
+
+ def environment
+ @environment ||= project.environments.find(params[:environment_id])
+ end
+end
diff --git a/config/routes/project.rb b/config/routes/project.rb
index 823e0614aeb..39144b74629 100644
--- a/config/routes/project.rb
+++ b/config/routes/project.rb
@@ -168,6 +168,8 @@ constraints(ProjectUrlConstrainer.new) do
collection do
get :folder, path: 'folders/:id'
end
+
+ resources :deployments, only: [:index]
end
resource :cycle_analytics, only: [:show]
diff --git a/db/migrate/20170327091750_add_created_at_index_to_deployments.rb b/db/migrate/20170327091750_add_created_at_index_to_deployments.rb
new file mode 100644
index 00000000000..cc615208c41
--- /dev/null
+++ b/db/migrate/20170327091750_add_created_at_index_to_deployments.rb
@@ -0,0 +1,11 @@
+class AddCreatedAtIndexToDeployments < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ DOWNTIME = false
+
+ disable_ddl_transaction!
+
+ def change
+ add_concurrent_index :deployments, :created_at
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index f476637ceb2..fe4c5c3f356 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20170317203554) do
+ActiveRecord::Schema.define(version: 20170327091750) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -346,6 +346,7 @@ ActiveRecord::Schema.define(version: 20170317203554) do
t.string "on_stop"
end
+ add_index "deployments", ["created_at"], name: "index_deployments_on_created_at", using: :btree
add_index "deployments", ["project_id", "environment_id", "iid"], name: "index_deployments_on_project_id_and_environment_id_and_iid", using: :btree
add_index "deployments", ["project_id", "iid"], name: "index_deployments_on_project_id_and_iid", unique: true, using: :btree
diff --git a/spec/controllers/projects/deployments_controller_spec.rb b/spec/controllers/projects/deployments_controller_spec.rb
new file mode 100644
index 00000000000..97a9fb8ae61
--- /dev/null
+++ b/spec/controllers/projects/deployments_controller_spec.rb
@@ -0,0 +1,50 @@
+require 'spec_helper'
+
+describe Projects::DeploymentsController do
+ include ApiHelpers
+
+ let(:user) { create(:user) }
+ let(:project) { create(:empty_project) }
+ let(:environment) { create(:environment, name: 'production', project: project) }
+ let(:deployment) { create(:deployment, project: project, environment: environment) }
+
+ before do
+ project.team << [user, :master]
+
+ sign_in(user)
+ end
+
+ describe 'GET #index' do
+ it 'returns list of deployments withing last 8 hours' do
+ create(:deployment, environment: environment, created_at: 9.hours.ago)
+ create(:deployment, environment: environment, created_at: 7.hours.ago)
+ create(:deployment, environment: environment)
+
+ get :index, environment_params
+
+ expect(response).to be_ok
+
+ expect(json_response['deployments'].count).to eq(2)
+ end
+
+ it 'returns a list with deployments information' do
+ deployment = create(:deployment, environment: environment)
+
+ get :index, environment_params
+ expect(response).to be_ok
+
+ deployments = json_response['deployments']
+ deployment_info = deployments.first.with_indifferent_access
+ created_at = deployment_info.delete(:created_at).to_time.utc
+
+ expect(deployments.count).to eq(1)
+ expect(deployment_info).to include(:id, :iid, :sha, :ref, :tag)
+ expect(deployment).to have_attributes(deployment_info)
+ expect(deployment.created_at).to be_within(1.second).of(created_at)
+ end
+ end
+
+ def environment_params(opts={})
+ opts.reverse_merge(namespace_id: project.namespace, project_id: project, environment_id: environment.id)
+ end
+end