summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorToon Claes <toon@gitlab.com>2017-04-05 16:36:14 +0200
committerKamil Trzcinski <ayufan@ayufan.eu>2017-04-06 23:50:37 +0200
commit9e89c93e167d66644fd771b106be5ce01b899fcf (patch)
tree2d27a9b525f0cd61dc565b132eafe6ba5cbdf2e4
parent26e24bbe533aaca94a7290509e2d608747b316fa (diff)
downloadgitlab-ce-9e89c93e167d66644fd771b106be5ce01b899fcf.tar.gz
Enable polling for pipelines table other pages
Also poll for pipeline changes on: - Pipeline table on commit page - Pipeline table on merge request page - Pipeline table on new merge request page
-rw-r--r--app/controllers/projects/commit_controller.rb2
-rwxr-xr-xapp/controllers/projects/merge_requests_controller.rb4
-rw-r--r--app/services/ci/expire_pipeline_cache_service.rb33
-rw-r--r--lib/gitlab/etag_caching/middleware.rb12
-rw-r--r--spec/services/ci/expire_pipeline_cache_service_spec.rb6
5 files changed, 54 insertions, 3 deletions
diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb
index cc67f688d51..f453822bed6 100644
--- a/app/controllers/projects/commit_controller.rb
+++ b/app/controllers/projects/commit_controller.rb
@@ -35,6 +35,8 @@ class Projects::CommitController < Projects::ApplicationController
respond_to do |format|
format.html
format.json do
+ Gitlab::PollingInterval.set_header(response, interval: 10_000)
+
render json: PipelineSerializer
.new(project: @project, user: @current_user)
.represent(@pipelines)
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index c337534b297..c107b3ffa88 100755
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -233,6 +233,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
end
format.json do
+ Gitlab::PollingInterval.set_header(response, interval: 10_000)
+
render json: PipelineSerializer
.new(project: @project, user: @current_user)
.represent(@pipelines)
@@ -246,6 +248,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
format.json do
define_pipelines_vars
+ Gitlab::PollingInterval.set_header(response, interval: 10_000)
+
render json: {
pipelines: PipelineSerializer
.new(project: @project, user: @current_user)
diff --git a/app/services/ci/expire_pipeline_cache_service.rb b/app/services/ci/expire_pipeline_cache_service.rb
index 95afe72e735..983b30056e3 100644
--- a/app/services/ci/expire_pipeline_cache_service.rb
+++ b/app/services/ci/expire_pipeline_cache_service.rb
@@ -1,9 +1,15 @@
module Ci
class ExpirePipelineCacheService < BaseService
+ attr_reader :pipeline
+
def execute(pipeline)
@pipeline = pipeline
+ store = Gitlab::EtagCaching::Store.new
- Gitlab::EtagCaching::Store.new.touch(project_pipelines_path)
+ store.touch(project_pipelines_path)
+ store.touch(commit_pipelines_path)
+ store.touch(new_merge_request_pipelines_path)
+ merge_requests_pipelines_paths.each { |path| store.touch(path) }
end
private
@@ -14,5 +20,30 @@ module Ci
project,
format: :json)
end
+
+ def commit_pipelines_path
+ Gitlab::Routing.url_helpers.pipelines_namespace_project_commit_path(
+ project.namespace,
+ project,
+ pipeline.commit.id,
+ format: :json)
+ end
+
+ def new_merge_request_pipelines_path
+ Gitlab::Routing.url_helpers.new_namespace_project_merge_request_path(
+ project.namespace,
+ project,
+ format: :json)
+ end
+
+ def merge_requests_pipelines_paths
+ pipeline.merge_requests.collect do |merge_request|
+ Gitlab::Routing.url_helpers.pipelines_namespace_project_merge_request_path(
+ project.namespace,
+ project,
+ merge_request,
+ format: :json)
+ end
+ end
end
end
diff --git a/lib/gitlab/etag_caching/middleware.rb b/lib/gitlab/etag_caching/middleware.rb
index 971e2d9f9cd..11167632e07 100644
--- a/lib/gitlab/etag_caching/middleware.rb
+++ b/lib/gitlab/etag_caching/middleware.rb
@@ -14,6 +14,18 @@ module Gitlab
{
regexp: %r(^(?!.*(#{RESERVED_WORDS})).*/pipelines\.json\z),
name: 'project_pipelines'
+ },
+ {
+ regexp: %r(^(?!.*(#{RESERVED_WORDS})).*/commit/\s+/pipelines\.json\z),
+ name: 'commit_pipelines'
+ },
+ {
+ regexp: %r(^(?!.*(#{RESERVED_WORDS})).*/merge_requests/new\.json\z),
+ name: 'new_merge_request_pipelines'
+ },
+ {
+ regexp: %r(^(?!.*(#{RESERVED_WORDS})).*/merge_requests/\d+/pipelines\.json\z),
+ name: 'merge_request_pipelines'
}
].freeze
diff --git a/spec/services/ci/expire_pipeline_cache_service_spec.rb b/spec/services/ci/expire_pipeline_cache_service_spec.rb
index b8250f99c5a..3c735872c30 100644
--- a/spec/services/ci/expire_pipeline_cache_service_spec.rb
+++ b/spec/services/ci/expire_pipeline_cache_service_spec.rb
@@ -8,9 +8,11 @@ describe Ci::ExpirePipelineCacheService, services: true do
describe '#execute' do
it 'invalidate Etag caching for project pipelines path' do
- path = "/#{project.full_path}/pipelines.json"
+ pipelines_path = "/#{project.full_path}/pipelines.json"
+ new_mr_pipelines_path = "/#{project.full_path}/merge_requests/new.json"
- expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(path)
+ expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(pipelines_path)
+ expect_any_instance_of(Gitlab::EtagCaching::Store).to receive(:touch).with(new_mr_pipelines_path)
subject.execute(pipeline)
end