aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/statuses_controller.rb21
-rw-r--r--app/models/compliance_check_set.rb2
-rw-r--r--app/models/import.rb2
-rw-r--r--app/models/referential.rb1
-rw-r--r--config/routes.rb2
5 files changed, 28 insertions, 0 deletions
diff --git a/app/controllers/statuses_controller.rb b/app/controllers/statuses_controller.rb
new file mode 100644
index 000000000..81e668ad4
--- /dev/null
+++ b/app/controllers/statuses_controller.rb
@@ -0,0 +1,21 @@
+class StatusesController < ChouetteController
+ respond_to :json
+
+ def index
+
+ status = {
+ status: global_status,
+ referentials_blocked: Referential.blocked.count,
+ imports_blocked: Import.blocked.count,
+ compliance_check_sets_blocked: ComplianceCheckSet.blocked.count
+ }
+ render json: status.to_json
+ end
+
+ private
+
+ def global_status
+ blocked_items = Referential.blocked.count + Import.blocked.count + ComplianceCheckSet.blocked.count
+ blocked_items > 0 ? 'ko' : 'ok'
+ end
+end \ No newline at end of file
diff --git a/app/models/compliance_check_set.rb b/app/models/compliance_check_set.rb
index 3ea832048..289fc134f 100644
--- a/app/models/compliance_check_set.rb
+++ b/app/models/compliance_check_set.rb
@@ -19,6 +19,8 @@ class ComplianceCheckSet < ActiveRecord::Base
where('created_at BETWEEN :begin AND :end', begin: period_range.begin, end: period_range.end)
end
+ scope :blocked, -> { where('created_at < ? AND status = ?', 4.hours.ago, 'running') }
+
def self.finished_statuses
%w(successful failed warning aborted canceled)
end
diff --git a/app/models/import.rb b/app/models/import.rb
index 049a65f40..d8e763bf3 100644
--- a/app/models/import.rb
+++ b/app/models/import.rb
@@ -13,6 +13,8 @@ class Import < ActiveRecord::Base
where('started_at BETWEEN :begin AND :end', begin: period_range.begin, end: period_range.end)
end
+ scope :blocked, -> { where('created_at < ? AND status = ?', 4.hours.ago, 'running') }
+
extend Enumerize
enumerize :status, in: %w(new pending successful warning failed running aborted canceled), scope: true, default: :new
diff --git a/app/models/referential.rb b/app/models/referential.rb
index f64db4ebf..509e0412f 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -62,6 +62,7 @@ class Referential < ActiveRecord::Base
scope :order_by_validity_period, ->(dir) { joins(:metadatas).order("unnest(periodes) #{dir}") }
scope :order_by_lines, ->(dir) { joins(:metadatas).group("referentials.id").order("sum(array_length(referential_metadata.line_ids,1)) #{dir}") }
scope :not_in_referential_suite, -> { where referential_suite_id: nil }
+ scope :blocked, -> { where('ready = ? AND created_at < ?', false, 4.hours.ago) }
def save_with_table_lock_timeout(options = {})
save_without_table_lock_timeout(options)
diff --git a/config/routes.rb b/config/routes.rb
index 2715ca428..0b657b028 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -256,4 +256,6 @@ ChouetteIhm::Application.routes.draw do
match '/422', to: 'errors#server_error', via: :all, as: 'unprocessable_entity'
match '/500', to: 'errors#server_error', via: :all, as: 'server_error'
+ match '/status', to: 'statuses#index', via: :get
+
end