This repository was archived by the owner on Nov 15, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 33
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #27 from israel-hdez/worker-update-avails
Extending event catcher and adding targeted refresh for availabilities
- Loading branch information
Showing
17 changed files
with
832 additions
and
30 deletions.
There are no files selected for viewing
20 changes: 20 additions & 0 deletions
20
app/models/manageiq/providers/hawkular/inventory/availability_updates.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
module ManageIQ::Providers | ||
class Hawkular::Inventory::AvailabilityUpdates | ||
attr_reader :targets | ||
|
||
delegate :select, :to => :targets | ||
delegate :<<, :to => :targets | ||
|
||
def initialize(targets) | ||
@targets = targets | ||
end | ||
|
||
def name | ||
"Collection of availabilities to update on inventory entities" | ||
end | ||
|
||
def id | ||
"Collection: #{@targets.map(&:manager_ref)}" | ||
end | ||
end | ||
end |
11 changes: 11 additions & 0 deletions
11
app/models/manageiq/providers/hawkular/inventory/collector/availability_updates.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
module ManageIQ::Providers | ||
class Hawkular::Inventory::Collector::AvailabilityUpdates < ManagerRefresh::Inventory::Collector | ||
def deployment_updates | ||
@target.select { |item| item.association == :middleware_deployments } | ||
end | ||
|
||
def server_updates | ||
@target.select { |item| item.association == :middleware_servers } | ||
end | ||
end | ||
end |
24 changes: 24 additions & 0 deletions
24
app/models/manageiq/providers/hawkular/inventory/parser/availability_updates.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
module ManageIQ::Providers | ||
class Hawkular::Inventory::Parser::AvailabilityUpdates < ManagerRefresh::Inventory::Parser | ||
def parse | ||
fetch_server_availabilities | ||
fetch_deployment_availabilities | ||
end | ||
|
||
private | ||
|
||
def fetch_server_availabilities | ||
collector.server_updates.each do |item| | ||
server = persister.middleware_servers.find_or_build(item.manager_ref[:ems_ref]) | ||
server.properties = item.options | ||
end | ||
end | ||
|
||
def fetch_deployment_availabilities | ||
collector.deployment_updates.each do |item| | ||
deployment = persister.middleware_deployments.find_or_build(item.manager_ref[:ems_ref]) | ||
deployment.status = item.options[:status] | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
40 changes: 40 additions & 0 deletions
40
app/models/manageiq/providers/hawkular/inventory/persister/availability_updates.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
module ManageIQ::Providers | ||
class Hawkular::Inventory::Persister::AvailabilityUpdates < Hawkular::Inventory::Persister::MiddlewareManager | ||
def self.save_deployments(ems, collection) | ||
::ActiveRecord::Base.transaction do | ||
collection.to_a.each do |item| | ||
deployment = ems.middleware_deployments.find_by(:ems_ref => item.manager_uuid) | ||
next unless deployment # if deployment is not found in the database, it is ignored. | ||
|
||
$mw_log.debug("EMS_#{ems.id}(Persister::AvailabilityUpdates): " \ | ||
"Updating status #{deployment.status} -> #{item.status} for deployment #{deployment.ems_ref}") | ||
|
||
deployment.status = item.status | ||
deployment.save! | ||
end | ||
end | ||
end | ||
|
||
def self.save_servers(ems, collection) | ||
::ActiveRecord::Base.transaction do | ||
collection.to_a.each do |item| | ||
data_to_update = item.properties.try(:slice, 'Server State', 'Availability', 'Calculated Server State') | ||
next if data_to_update.blank? | ||
|
||
server = ems.middleware_servers.find_by(:ems_ref => item.manager_uuid) | ||
next unless server # if no matching server is in the database, there is nothing to update | ||
|
||
$mw_log.debug("EMS_#{ems.id}(Persister::AvailabilityUpdates): " \ | ||
"Updating status to #{item.properties} for server #{server.ems_ref}") | ||
|
||
server.properties = {} if server.properties.blank? | ||
server.properties.merge!(data_to_update) | ||
server.save! | ||
end | ||
end | ||
end | ||
|
||
has_middleware_manager_deployments(:custom_save_block => method(:save_deployments)) | ||
has_middleware_manager_servers(:custom_save_block => method(:save_servers)) | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
app/models/manageiq/providers/hawkular/middleware_manager/middleware_deployment.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 2 additions & 0 deletions
2
app/models/manageiq/providers/hawkular/middleware_manager/middleware_server.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
27 changes: 27 additions & 0 deletions
27
app/models/manageiq/providers/hawkular/middleware_manager/refresher.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,32 @@ | ||
module ManageIQ::Providers::Hawkular | ||
class MiddlewareManager::Refresher < ManageIQ::Providers::BaseManager::Refresher | ||
include ::EmsRefresh::Refreshers::EmsRefresherMixin | ||
|
||
def preprocess_targets | ||
@targets_by_ems_id.each do |ems_id, targets| | ||
if targets.any? { |t| t.kind_of?(ExtManagementSystem) } | ||
# If the EMS is in the list of targets, full graph refresh is done. | ||
ems = @ems_by_ems_id[ems_id] | ||
_log.info "Defaulting to full refresh for EMS: [#{ems.name}], id: [#{ems.id}]." if targets.length > 1 | ||
targets.clear << ems | ||
elsif targets.any? | ||
# Assuming availabilities are being refreshed (since there is no other | ||
# kind of refresh for Hawkular) | ||
|
||
# Filter out duplicated entities | ||
# The reverse is to keep the most up-to-date data | ||
uniq_targets = targets.reverse.uniq do |item| | ||
{ | ||
:association => item.association, | ||
:ems_ref => item.manager_ref[:ems_ref] | ||
} | ||
end | ||
|
||
# Compact all availability updates into one target | ||
targets.clear | ||
targets << ::ManageIQ::Providers::Hawkular::Inventory::AvailabilityUpdates.new(uniq_targets) | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
RSpec.shared_context 'targeted_avail_updates' do | ||
let(:ems_hawkular) { FactoryGirl.create(:ems_hawkular) } | ||
let(:target) { ::ManageIQ::Providers::Hawkular::Inventory::AvailabilityUpdates.new([]) } | ||
let(:persister) { ::ManageIQ::Providers::Hawkular::Inventory::Persister::AvailabilityUpdates.new(ems_hawkular, target) } | ||
let(:collector) { ::ManageIQ::Providers::Hawkular::Inventory::Collector::AvailabilityUpdates.new(ems_hawkular, target) } | ||
let(:parser) do | ||
parser = described_class.new | ||
parser.collector = collector | ||
parser.persister = persister | ||
parser | ||
end | ||
end |
Oops, something went wrong.