diff options
| author | cedricnjanga | 2018-02-06 21:52:02 -0800 | 
|---|---|---|
| committer | Zog | 2018-02-13 08:53:59 +0100 | 
| commit | 7e7371087b61aaf8a128d5f5f5ec6c43c06fd4ca (patch) | |
| tree | 0cff9685542528291192f748348f3ab6eb8e3d39 | |
| parent | 54414ddb8970ee6133817777290153a713834285 (diff) | |
| download | chouette-core-7e7371087b61aaf8a128d5f5f5ec6c43c06fd4ca.tar.bz2 | |
Refs #5707 Add status to the application to track 'blocked objects'
| -rw-r--r-- | app/controllers/statuses_controller.rb | 21 | ||||
| -rw-r--r-- | app/models/compliance_check_set.rb | 2 | ||||
| -rw-r--r-- | app/models/import.rb | 2 | ||||
| -rw-r--r-- | app/models/referential.rb | 1 | ||||
| -rw-r--r-- | config/routes.rb | 2 | 
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 | 
