topological_inventory-core 1.1.0 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14973202e680d9bf035a3c85d5ef856140bf11d934bfc488cbade6932c8239c1
4
- data.tar.gz: 7493112f3e945f0d0e20cb86385add9f45f623e2825c08b8a3a4ac2a62994822
3
+ metadata.gz: fc2335e206b9eba3ab955c62d29422156bb4053e737cd9aece9a5b91748b76ea
4
+ data.tar.gz: 163c7d564a74402c23b5001b885c2e83795263547592f83032c7514f771300a0
5
5
  SHA512:
6
- metadata.gz: '08de615e242bc7dd1ec6f4349386064855b947602986736a8095c3b4802adc0fbeabd5aeb03dcc3d965d3a882f8a989c646624482c45de5235a5457797cef871'
7
- data.tar.gz: fb1e4895ac6ecb98b6564ed411f5107417b5b2f68ee5a1346312f59b32598065d46d300ed158750fa0df2e85868958e7e347b2f82818e00d39db01cf1a414869
6
+ metadata.gz: c16a6361df474d38fc189a159f27a33ee3dd4b21d17cc0ae256128ae8ac6db0eb67d64b4e4103fff64fc8905169b7b86e1448e84df6d3ebf1391960fa721b8e0
7
+ data.tar.gz: 35e182d151981fa96c604c630c87686d3c0a1a65fc061789be277602c0b1b91e73d74e2fc3f5171b3754af0bf2cfba81a45bba20cbc6b9bd01579a222744fca2
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # TopologicalInventory
1
+ # Topological Inventory Core
2
2
 
3
3
  [![Build Status](https://travis-ci.org/RedHatInsights/topological_inventory-core.svg)](https://travis-ci.org/RedHatInsights/topological_inventory-core)
4
4
  [![Maintainability](https://api.codeclimate.com/v1/badges/34f9bd9412e35c1a36fd/maintainability)](https://codeclimate.com/github/RedHatInsights/topological_inventory-core/maintainability)
@@ -1,6 +1,8 @@
1
1
  default: &default
2
2
  adapter: postgresql
3
3
  encoding: utf8
4
+ host: localhost
5
+ port: 5432
4
6
  username: root
5
7
  pool: 5
6
8
  wait_timeout: 5
@@ -8,13 +10,13 @@ default: &default
8
10
 
9
11
  development:
10
12
  <<: *default
11
- database: topological_inventory_core_development
13
+ database: topological_inventory_development
12
14
  min_messages: notice
13
15
 
14
16
  test:
15
17
  <<: *default
16
- database: topological_inventory_core_test
18
+ database: topological_inventory_test
17
19
 
18
20
  production:
19
21
  <<: *default
20
- database: topological_inventory_core_production
22
+ database: topological_inventory_production
@@ -1,6 +1,11 @@
1
1
  class ExtractTasksSourceRefFromContext < ActiveRecord::Migration[5.2]
2
2
  def up
3
3
  Task.find_each do |task|
4
+ if task.context.is_a?(String)
5
+ say "Found legacy data in Task #{task.id}, converting String to Hash..."
6
+ task.context = JSON.parse(task.context)
7
+ end
8
+
4
9
  source_ref = task.context&.dig('service_instance', 'source_ref')
5
10
  next if source_ref.nil?
6
11
 
@@ -0,0 +1,5 @@
1
+ class AddSourceUpdatedAt < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :volumes, :source_updated_at, :timestamp
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddRequestIdToTask < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :tasks, :x_rh_insights_request, :string
4
+ end
5
+ end
@@ -0,0 +1,11 @@
1
+ class AddForwardableHeadersRemoveRequestIdOnTask < ActiveRecord::Migration[5.2]
2
+ def up
3
+ add_column :tasks, :forwardable_headers, :jsonb
4
+ remove_column :tasks, :x_rh_insights_request
5
+ end
6
+
7
+ def down
8
+ add_column :tasks, :x_rh_insights_request, :string
9
+ remove_column :tasks, :forwardable_headers
10
+ end
11
+ end
@@ -10,7 +10,7 @@
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 2020_04_14_123737) do
13
+ ActiveRecord::Schema.define(version: 2020_05_05_101547) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -1190,6 +1190,7 @@ ActiveRecord::Schema.define(version: 2020_04_14_123737) do
1190
1190
  t.string "target_source_ref"
1191
1191
  t.string "target_type"
1192
1192
  t.bigint "source_id"
1193
+ t.jsonb "forwardable_headers"
1193
1194
  t.index ["source_id"], name: "index_tasks_on_source_id"
1194
1195
  t.index ["target_type", "target_source_ref"], name: "index_tasks_on_target_type_and_target_source_ref"
1195
1196
  t.index ["tenant_id"], name: "index_tasks_on_tenant_id"
@@ -1327,6 +1328,7 @@ ActiveRecord::Schema.define(version: 2020_04_14_123737) do
1327
1328
  t.bigint "orchestration_stack_id"
1328
1329
  t.bigint "subscription_id"
1329
1330
  t.bigint "refresh_state_part_id"
1331
+ t.datetime "source_updated_at"
1330
1332
  t.index ["archived_at"], name: "index_volumes_on_archived_at"
1331
1333
  t.index ["last_seen_at"], name: "index_volumes_on_last_seen_at"
1332
1334
  t.index ["orchestration_stack_id"], name: "index_volumes_on_orchestration_stack_id"
@@ -1,5 +1,5 @@
1
1
  module TopologicalInventory
2
2
  module Core
3
- VERSION = '1.1.0'
3
+ VERSION = '1.1.5'
4
4
  end
5
5
  end
@@ -147,63 +147,70 @@ module TopologicalInventory
147
147
  return if src_refs.blank?
148
148
 
149
149
  # Updating Tasks
150
- # service_instance_tasks_update_effective()
151
- service_instance_tasks_update_ineffective(source, src_refs)
150
+ # service_instance_tasks_update_by_raw_sql(source)
151
+ service_instance_tasks_update_by_activerecord(tasks_collection, source, src_refs)
152
152
  end
153
153
 
154
- def task_update_values(svc_instance_id, external_url, status, finished_timestamp)
154
+ def task_update_values(svc_instance_id, source_ref, external_url, status, task_status, finished_timestamp, source_id)
155
155
  {
156
156
  :state => finished_timestamp.blank? ? 'running' : 'completed',
157
- :status => %w[error failed].include?(status) ? 'error' : 'ok', # TODO: ansible-tower specific, normalize in collector
157
+ :status => task_status,
158
158
  :context => {
159
- :remote_status => status,
160
159
  :service_instance => {
161
- :id => svc_instance_id,
162
- :url => external_url
160
+ :id => svc_instance_id,
161
+ :job_status => status,
162
+ :source_id => source_id,
163
+ :source_ref => source_ref,
164
+ :url => external_url
163
165
  }
164
166
  }
165
167
  }
166
168
  end
167
169
 
168
170
  # This method is updating one by one using ActiveRecord
169
- def service_instance_tasks_update_ineffective(source, svc_instances_source_ref)
171
+ def service_instance_tasks_update_by_activerecord(tasks_collection, source, svc_instances_source_ref)
170
172
  service_instances = ServiceInstance.where(:source_id => source.id, :source_ref => svc_instances_source_ref)
171
173
  tasks_by_source_ref = Task.where(:state => 'running', :target_type => 'ServiceInstance', :source_id => source.id, :target_source_ref => service_instances.pluck(:source_ref)).index_by(&:target_source_ref)
172
174
 
173
175
  service_instances.select(:id, :external_url, :source_ref, :extra).find_in_batches do |group|
174
176
  ActiveRecord::Base.transaction do
175
177
  group.each do |svc_instance|
176
- next if tasks_by_source_ref[svc_instance.source_ref].nil?
178
+ next if (task = tasks_by_source_ref[svc_instance.source_ref]).nil?
177
179
 
178
- values = task_update_values(svc_instance.id, svc_instance.external_url, svc_instance.extra['status'], svc_instance.extra['finished'])
179
- tasks_by_source_ref[svc_instance.source_ref].update(values)
180
+ values = task_update_values(svc_instance.id, svc_instance.source_ref, svc_instance.external_url, svc_instance.extra['status'], svc_instance.extra['task_status'], svc_instance.extra['finished'], source.id)
181
+ # 1) Updating Task
182
+ task.update(values)
183
+
184
+ # 2) Saving to updated records (will be published in Kafka)
185
+ # - see topological_inventory-persister:Workflow.send_task_updates_to_queue!
186
+ tasks_collection.updated_records << values.merge(:id => task.id, :forwardable_headers => task.forwardable_headers)
180
187
  end
181
188
  end
182
189
  end
183
190
  end
184
191
 
185
192
  # This method is bulk updating by raw SQL query
186
- def service_instance_tasks_update_effective
193
+ def service_instance_tasks_update_by_raw_sql(source)
187
194
  # Get running tasks
188
- tasks_values = Task.where(:state => 'running', :target_type => 'ServiceInstance', :source_id => source.id)
189
- .pluck(:id, :target_source_ref)
190
- tasks_id, tasks_source_ref = [], []
191
- tasks_values.each do |attrs|
192
- tasks_id << attrs[0]
193
- tasks_source_ref << attrs[1]
194
- end
195
+ tasks_source_ref = Task.where(:state => 'running', :target_type => 'ServiceInstance', :source_id => source.id)
196
+ .pluck(:target_source_ref)
197
+ return if tasks_source_ref.blank?
195
198
 
196
199
  # Load saved service instances (IDs needed)
197
- service_instances_values = ServiceInstance.where(:source_ref => tasks_source_ref).pluck(:id, :external_url, :source_ref, Arel.sql("extra->'finished'"), Arel.sql("extra->'status'"))
198
- return if service_instances_values.blank?
200
+ svc_instances_values = ServiceInstance.where(:source_ref => tasks_source_ref)
201
+ .pluck(:id, :external_url, :source_ref,
202
+ Arel.sql("extra->'finished'"),
203
+ Arel.sql("extra->'status'"),
204
+ Arel.sql("extra->'task_status'"))
205
+ return if svc_instances_values.blank?
199
206
 
200
207
  sql_update_values = []
201
208
 
202
209
  # Preparing SQL update values from loaded ServiceInstances
203
- service_instances_values.each do |attrs|
204
- id, external_url, source_ref, finished_timestamp, status = attrs[0], attrs[1], attrs[2], attrs[3], attrs[4]
210
+ svc_instances_values.each do |attrs|
211
+ id, external_url, source_ref, finished_timestamp, status, task_status = attrs[0], attrs[1], attrs[2], attrs[3], attrs[4], attrs[5]
205
212
 
206
- values = task_update_values(id, external_url, status, finished_timestamp)
213
+ values = task_update_values(id, external_url, status, task_status, finished_timestamp)
207
214
  sql_update_values << "('#{source_ref}', '#{values[:state]}', '#{values[:status]}', '#{values[:context].to_json}'::json)"
208
215
  end
209
216
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: topological_inventory-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Grare
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-22 00:00:00.000000000 Z
11
+ date: 2020-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: acts_as_tenant
@@ -136,20 +136,48 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.8'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.69.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.69.0
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-performance
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '1.3'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '1.3'
139
167
  - !ruby/object:Gem::Dependency
140
168
  name: simplecov
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
- - - ">="
171
+ - - "~>"
144
172
  - !ruby/object:Gem::Version
145
- version: '0'
173
+ version: 0.17.1
146
174
  type: :development
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
- - - ">="
178
+ - - "~>"
151
179
  - !ruby/object:Gem::Version
152
- version: '0'
180
+ version: 0.17.1
153
181
  - !ruby/object:Gem::Dependency
154
182
  name: webmock
155
183
  requirement: !ruby/object:Gem::Requirement
@@ -354,6 +382,9 @@ files:
354
382
  - db/migrate/20200317082640_add_tracking_timestamps_to_refresh_state.rb
355
383
  - db/migrate/20200403114310_add_target_and_source_to_task.rb
356
384
  - db/migrate/20200414123737_extract_tasks_source_ref_from_context.rb
385
+ - db/migrate/20200421141934_add_source_updated_at.rb
386
+ - db/migrate/20200428090420_add_request_id_to_task.rb
387
+ - db/migrate/20200505101547_add_forwardable_headers_remove_request_id_on_task.rb
357
388
  - db/schema.rb
358
389
  - db/seeds.rb
359
390
  - lib/tasks/topological_inventory_tasks.rake
@@ -385,7 +416,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
385
416
  - !ruby/object:Gem::Version
386
417
  version: '0'
387
418
  requirements: []
388
- rubygems_version: 3.1.2
419
+ rubygems_version: 3.0.3
389
420
  signing_key:
390
421
  specification_version: 4
391
422
  summary: Core Models and Schema for the Topological Inventory Service.