foreman_rh_cloud 11.1.0 → 11.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/foreman_rh_cloud/locale/en/foreman_rh_cloud.js +248 -161
  3. data/app/assets/javascripts/foreman_rh_cloud/locale/fr/foreman_rh_cloud.js +393 -306
  4. data/app/assets/javascripts/foreman_rh_cloud/locale/ja/foreman_rh_cloud.js +393 -306
  5. data/app/assets/javascripts/foreman_rh_cloud/locale/ka/foreman_rh_cloud.js +393 -306
  6. data/app/assets/javascripts/foreman_rh_cloud/locale/ko/foreman_rh_cloud.js +589 -0
  7. data/app/assets/javascripts/foreman_rh_cloud/locale/zh_CN/foreman_rh_cloud.js +393 -306
  8. data/app/controllers/insights_cloud/api/machine_telemetries_controller.rb +9 -1
  9. data/app/services/foreman_rh_cloud/cloud_request_forwarder.rb +4 -2
  10. data/app/services/foreman_rh_cloud/hits_uploader.rb +3 -8
  11. data/app/services/foreman_rh_cloud/rules_ingester.rb +61 -0
  12. data/app/services/foreman_rh_cloud/template_renderer_helper.rb +1 -1
  13. data/config/routes.rb +10 -4
  14. data/db/seeds.d/189_add_host_inventory_param.rb +7 -0
  15. data/lib/foreman_inventory_upload/async/upload_report_job.rb +1 -1
  16. data/lib/foreman_inventory_upload/generators/queries.rb +1 -1
  17. data/lib/foreman_rh_cloud/version.rb +1 -1
  18. data/lib/insights_cloud.rb +4 -0
  19. data/lib/tasks/insights.rake +10 -7
  20. data/lib/tasks/rh_cloud_inventory.rake +8 -3
  21. data/locale/Makefile +12 -2
  22. data/locale/en/LC_MESSAGES/foreman_rh_cloud.mo +0 -0
  23. data/locale/en/foreman_rh_cloud.po +111 -22
  24. data/locale/foreman_rh_cloud.pot +217 -96
  25. data/locale/fr/LC_MESSAGES/foreman_rh_cloud.mo +0 -0
  26. data/locale/fr/foreman_rh_cloud.po +106 -19
  27. data/locale/ja/LC_MESSAGES/foreman_rh_cloud.mo +0 -0
  28. data/locale/ja/foreman_rh_cloud.po +106 -19
  29. data/locale/ka/LC_MESSAGES/foreman_rh_cloud.mo +0 -0
  30. data/locale/ka/foreman_rh_cloud.po +106 -19
  31. data/locale/ko/LC_MESSAGES/foreman_rh_cloud.mo +0 -0
  32. data/locale/ko/foreman_rh_cloud.po +591 -0
  33. data/locale/zh_CN/LC_MESSAGES/foreman_rh_cloud.mo +0 -0
  34. data/locale/zh_CN/foreman_rh_cloud.po +106 -19
  35. data/package.json +1 -1
  36. data/test/unit/services/foreman_rh_cloud/cloud_request_forwarder_test.rb +24 -0
  37. data/test/unit/services/foreman_rh_cloud/hits_uploader_test.rb +13 -2
  38. data/test/unit/services/foreman_rh_cloud/rules_ingester_test.rb +60 -0
  39. data/test/unit/slice_generator_test.rb +24 -2
  40. data/webpack/InsightsCloudSync/Components/RemediationModal/RemediationModal.js +5 -1
  41. metadata +10 -3
@@ -16,7 +16,15 @@ module InsightsCloud::Api
16
16
  # The method that "proxies" requests over to Cloud
17
17
  def forward_request
18
18
  certs = candlepin_id_cert @organization
19
- @cloud_response = ::ForemanRhCloud::CloudRequestForwarder.new.forward_request(request, controller_name, @branch_id, certs)
19
+ begin
20
+ @cloud_response = ::ForemanRhCloud::CloudRequestForwarder.new.forward_request(request, controller_name, @branch_id, certs)
21
+ rescue RestClient::Exception => e
22
+ logger.info("Forwarding request failed with exception: #{e}")
23
+ return render json: { error: e }, status: :bad_gateway
24
+ rescue RestClient::Timeout => e
25
+ logger.info("Forwarding request failed with timeout: #{e}")
26
+ return render json: { error: e }, status: :gateway_timeout
27
+ end
20
28
 
21
29
  if @cloud_response.code == 401
22
30
  return render json: {
@@ -17,7 +17,7 @@ module ForemanRhCloud
17
17
  logger.debug("Sending request to: #{request_opts[:url]}")
18
18
 
19
19
  execute_cloud_request(request_opts)
20
- rescue RestClient::Exception => error_response
20
+ rescue RestClient::ExceptionWithResponse => error_response
21
21
  error_response.response
22
22
  end
23
23
 
@@ -52,7 +52,9 @@ module ForemanRhCloud
52
52
 
53
53
  def prepare_forward_params(original_request, branch_id)
54
54
  forward_params = original_request.query_parameters
55
- if original_request.user_agent && !original_request.user_agent.include?('redhat_access_cfme')
55
+ compliance_request = original_request.path.match?(/compliance\/v2(\/.*)?/)
56
+ user_agent = original_request.user_agent.present? && !original_request.user_agent.include?('redhat_access_cfme')
57
+ if user_agent && !compliance_request
56
58
  forward_params = forward_params.merge(:branch_id => branch_id)
57
59
  end
58
60
 
@@ -35,14 +35,9 @@ module ForemanRhCloud
35
35
 
36
36
  def update_rules_and_resolutions
37
37
  return if @payload[:rules].blank?
38
- # rubocop:disable Rails/SkipsModelValidations
39
- ::InsightsRule.upsert_all(@payload[:rules], unique_by: :rule_id)
40
- rules = @payload[:rules].map { |rule| rule[:rule_id] }
41
-
42
- return if @payload[:resolutions].blank?
43
- ::InsightsResolution.where(rule_id: rules).delete_all
44
- ::InsightsResolution.insert_all(@payload[:resolutions])
45
- # rubocop:enable Rails/SkipsModelValidations
38
+ rule_ids = @payload[:rules].map { |rule| rule[:rule_id] }
39
+ has_missing_rules = InsightsRule.where(rule_id: rule_ids).count != rule_ids.count
40
+ RulesIngester.new.ingest_rules_and_resolutions! if has_missing_rules
46
41
  end
47
42
 
48
43
  def update_details
@@ -0,0 +1,61 @@
1
+ module ForemanRhCloud
2
+ class RulesIngester
3
+ def ingest_rules_and_resolutions!
4
+ rules, resolutions = fetch_rules_and_resolutions
5
+ # rubocop:disable Rails/SkipsModelValidations
6
+ ::InsightsRule.upsert_all(rules, unique_by: :rule_id)
7
+ ::InsightsResolution.delete_all
8
+ ::InsightsResolution.insert_all(resolutions)
9
+ # rubocop:enable Rails/SkipsModelValidations
10
+ end
11
+
12
+ private
13
+
14
+ def fetch_rules_data
15
+ advisor_url = "#{ForemanRhCloud.on_premise_url}/r/insights/v1/static/release/content.json"
16
+ JSON.parse(Net::HTTP.get(URI.parse(advisor_url)), symbolize_names: true)
17
+ end
18
+
19
+ def fetch_rules_and_resolutions
20
+ rules = fetch_rules_data.values.map do |rule|
21
+ next unless rule[:active]
22
+ next if rule[:playbooks].blank?
23
+ rule.slice(:description, :category,
24
+ :impact_name, :summary, :generic, :reason,
25
+ :rec_likelihood, :rec_impact, :reboot_required,
26
+ :more_info, :rule_id, :playbooks)
27
+ end
28
+ rules.compact!
29
+
30
+ resolutions = rules.flat_map do |rule|
31
+ rule[:playbooks].map do |fix_type, playbook|
32
+ {
33
+ rule_id: rule[:rule_id],
34
+ description: playbook[:name],
35
+ needs_reboot: playbook[:reboot_required] == true,
36
+ resolution_risk: rule[:resolution_risk],
37
+ resolution_type: fix_type,
38
+ }
39
+ end
40
+ end
41
+
42
+ rules.map! do |rule|
43
+ {
44
+ rule_id: rule[:rule_id],
45
+ description: rule[:description],
46
+ category_name: rule[:category],
47
+ impact_name: rule[:impact_name],
48
+ summary: rule[:summary],
49
+ generic: rule[:generic],
50
+ reason: rule[:reason],
51
+ total_risk: ((rule[:rec_likelihood] + rule[:rec_impact]) / 2).to_i,
52
+ reboot_required: rule[:reboot_required] == true,
53
+ more_info: rule[:more_info],
54
+ rating: 0,
55
+ }
56
+ end
57
+
58
+ [rules, resolutions]
59
+ end
60
+ end
61
+ end
@@ -25,7 +25,7 @@ module ForemanRhCloud
25
25
  returns String, desc: 'Playbook downloaded from the cloud'
26
26
  end
27
27
  def download_rh_playbook(playbook_url, organization_id)
28
- retriever = ForemanRhCloud::UrlRemediationsRetriever.new(url: playbook_url, organization_id: organization_id, logger: template_logger)
28
+ retriever = ForemanRhCloud::URLRemediationsRetriever.new(url: playbook_url, organization_id: organization_id, logger: template_logger)
29
29
 
30
30
  cached("rh_playbook_#{playbook_url}") do
31
31
  retriever.create_playbook
data/config/routes.rb CHANGED
@@ -9,7 +9,9 @@ Rails.application.routes.draw do
9
9
  get 'settings', to: 'uploads_settings#index'
10
10
  post 'setting', to: 'uploads_settings#set_advanced_setting'
11
11
 
12
- post 'cloud_connector', to: 'uploads#enable_cloud_connector'
12
+ unless ForemanRhCloud.with_local_advisor_engine?
13
+ post 'cloud_connector', to: 'uploads#enable_cloud_connector'
14
+ end
13
15
 
14
16
  resources :tasks, only: [:create, :show]
15
17
 
@@ -31,7 +33,9 @@ Rails.application.routes.draw do
31
33
  end
32
34
 
33
35
  namespace :foreman_rh_cloud do
34
- get 'inventory_upload', to: '/react#index'
36
+ unless ForemanRhCloud.with_local_advisor_engine?
37
+ get 'inventory_upload', to: '/react#index'
38
+ end
35
39
  get 'insights_cloud', to: '/react#index' # Uses foreman's react controller
36
40
  end
37
41
 
@@ -61,8 +65,10 @@ Rails.application.routes.draw do
61
65
  end
62
66
 
63
67
  namespace 'rh_cloud' do
64
- post 'enable_connector', to: 'inventory#enable_cloud_connector'
65
- post 'cloud_request', to: 'cloud_request#update'
68
+ unless ForemanRhCloud.with_local_advisor_engine?
69
+ post 'enable_connector', to: 'inventory#enable_cloud_connector'
70
+ post 'cloud_request', to: 'cloud_request#update'
71
+ end
66
72
  get 'advisor_engine_config', to: 'advisor_engine_config#show'
67
73
  end
68
74
 
@@ -0,0 +1,7 @@
1
+ CommonParameter.without_auditing do
2
+ params = [
3
+ { name: "host_registration_insights_inventory", key_type: "boolean", value: true },
4
+ ]
5
+
6
+ params.each { |param| CommonParameter.find_or_create_by(param) }
7
+ end
@@ -78,7 +78,7 @@ module ForemanInventoryUpload
78
78
  end
79
79
 
80
80
  def content_disconnected?
81
- Setting[:content_disconnected]
81
+ !Setting[:subscription_connection_enabled]
82
82
  end
83
83
  end
84
84
  end
@@ -44,7 +44,7 @@ module ForemanInventoryUpload
44
44
 
45
45
  def self.for_slice(base)
46
46
  base
47
- .search_for("not params.#{InsightsCloud.enable_client_param} = f")
47
+ .search_for("not params.#{InsightsCloud.enable_client_param_inventory} = f")
48
48
  .joins(:subscription_facet)
49
49
  .preload(
50
50
  :interfaces,
@@ -1,3 +1,3 @@
1
1
  module ForemanRhCloud
2
- VERSION = '11.1.0'.freeze
2
+ VERSION = '11.2.0'.freeze
3
3
  end
@@ -29,6 +29,10 @@ module InsightsCloud
29
29
  'host_registration_insights'
30
30
  end
31
31
 
32
+ def self.enable_client_param_inventory
33
+ 'host_registration_insights_inventory'
34
+ end
35
+
32
36
  def self.enable_cloud_remediations_param
33
37
  'enable_cloud_remediations'
34
38
  end
@@ -24,13 +24,16 @@ namespace :rh_cloud_insights do
24
24
  desc "Re-announce all organizations into Sources on RH cloud."
25
25
  task announce_to_sources: [:environment] do
26
26
  logger = Logging::Logger.new(STDOUT)
27
- Organization.unscoped.each do |org|
28
- presence = ForemanRhCloud::CloudPresence.new(org, logger)
29
- presence.announce_to_sources
30
- rescue StandardError => ex
31
- logger.warn(ex)
27
+ if ForemanRhCloud.with_local_advisor_engine?
28
+ logger.warn('Task announce_to_sources is not available when using local advisor engine')
29
+ else
30
+ Organization.unscoped.each do |org|
31
+ presence = ForemanRhCloud::CloudPresence.new(org, logger)
32
+ presence.announce_to_sources
33
+ rescue StandardError => ex
34
+ logger.warn(ex)
35
+ end
36
+ logger.info('Reannounced all organizations')
32
37
  end
33
-
34
- logger.info('Reannounced all organizations')
35
38
  end
36
39
  end
@@ -9,10 +9,15 @@ namespace :rh_cloud_inventory do
9
9
  else
10
10
  organizations = [Organization.where(:id => ENV['organization_id']).first]
11
11
  end
12
-
12
+ disconnected = ForemanRhCloud.with_local_advisor_engine?
13
13
  User.as_anonymous_admin do
14
14
  organizations.each do |organization|
15
- ForemanTasks.async_task(ForemanInventoryUpload::Async::GenerateReportJob, ForemanInventoryUpload.generated_reports_folder, organization.id, false)
15
+ ForemanTasks.async_task(
16
+ ForemanInventoryUpload::Async::GenerateReportJob,
17
+ ForemanInventoryUpload.generated_reports_folder,
18
+ organization.id,
19
+ disconnected
20
+ )
16
21
  puts "Generated and uploaded inventory report for organization '#{organization.name}'"
17
22
  end
18
23
  end
@@ -47,7 +52,7 @@ namespace :rh_cloud_inventory do
47
52
  base_folder = ENV['target'] || ForemanInventoryUpload.generated_reports_folder
48
53
  organization_id = ENV['organization_id']
49
54
  report_file = ForemanInventoryUpload.facts_archive_name(organization_id)
50
- disconnected = false
55
+ disconnected = ForemanRhCloud.with_local_advisor_engine?
51
56
  ForemanTasks.sync_task(ForemanInventoryUpload::Async::QueueForUploadJob, base_folder, report_file, organization_id, disconnected)
52
57
  puts "Uploaded #{report_file}"
53
58
  end
data/locale/Makefile CHANGED
@@ -31,9 +31,16 @@ all-mo: $(MOFILES)
31
31
  cat $@
32
32
  ! grep -q msgid $@
33
33
 
34
- %.edit.po:
34
+ %.edit.po: %.po.time_stamp
35
35
  touch $@
36
36
 
37
+ # gettext will trash the .edit.po file if the time stamp doesn't exist or is older than the po file
38
+ %.po.time_stamp: %.po
39
+ touch --reference $< $@
40
+
41
+ # Prevent make from treating this as an intermediate file to be cleaned up
42
+ .PRECIOUS: %.po.time_stamp
43
+
37
44
  check: $(POXFILES)
38
45
 
39
46
  # Unify duplicate translations
@@ -43,7 +50,10 @@ uniq-po:
43
50
  done
44
51
 
45
52
  tx-pull: $(EDITFILES)
46
- cd .. && tx pull -f --all
53
+ # Initialize new languages
54
+ cd .. && tx pull -f --all --minimum-perc 50
55
+ # Force update all existing languages
56
+ cd .. && tx pull -f --minimum-perc 0
47
57
  for f in $(EDITFILES) ; do \
48
58
  sed -i 's/^\("Project-Id-Version: \).*$$/\1$(DOMAIN) $(VERSION)\\n"/' $$f; \
49
59
  done
@@ -1,21 +1,23 @@
1
- # foreman_rh_cloud
2
- #
3
- # This file is distributed under the same license as foreman_rh_cloud.
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the foreman_rh_cloud package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
4
5
  #
6
+ #, fuzzy
5
7
  msgid ""
6
8
  msgstr ""
7
- "Project-Id-Version: version 0.0.1\n"
9
+ "Project-Id-Version: foreman_rh_cloud 1.0.0\n"
8
10
  "Report-Msgid-Bugs-To: \n"
9
- "PO-Revision-Date: 2014-08-20 08:54+0100\n"
10
- "Last-Translator: Foreman Team <foreman-dev@googlegroups.com>\n"
11
- "Language-Team: Foreman Team <foreman-dev@googlegroups.com>\n"
11
+ "PO-Revision-Date: 2025-02-10 20:07+0100\n"
12
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
+ "Language-Team: LANGUAGE <LL@li.org>\n"
12
14
  "Language: \n"
13
15
  "MIME-Version: 1.0\n"
14
16
  "Content-Type: text/plain; charset=UTF-8\n"
15
17
  "Content-Transfer-Encoding: 8bit\n"
16
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
17
19
 
18
- msgid " Sync inventory status"
20
+ msgid " Sync all inventory status"
19
21
  msgstr ""
20
22
 
21
23
  msgid "%s organizations"
@@ -81,10 +83,10 @@ msgstr ""
81
83
  msgid "Configure"
82
84
  msgstr ""
83
85
 
84
- msgid "Configure Cloud Connector"
86
+ msgid "Configure Cloud Connector on given hosts"
85
87
  msgstr ""
86
88
 
87
- msgid "Configure Cloud Connector on given hosts"
89
+ msgid "Configure cloud connector"
88
90
  msgstr ""
89
91
 
90
92
  msgid "Connectivity test"
@@ -147,6 +149,9 @@ msgstr ""
147
149
  msgid "Exit Code: %s"
148
150
  msgstr ""
149
151
 
152
+ msgid "Fetch Insights-related host details"
153
+ msgstr ""
154
+
150
155
  msgid "Fetching data about your accounts"
151
156
  msgstr ""
152
157
 
@@ -171,13 +176,16 @@ msgstr ""
171
176
  msgid "Full Screen"
172
177
  msgstr ""
173
178
 
179
+ msgid "Generate and upload report"
180
+ msgstr ""
181
+
174
182
  msgid "Generate the report, but do not upload"
175
183
  msgstr ""
176
184
 
177
185
  msgid "Generating"
178
186
  msgstr ""
179
187
 
180
- msgid "Go to Satellite Insights page"
188
+ msgid "Go to Foreman Insights page"
181
189
  msgstr ""
182
190
 
183
191
  msgid "Go to first page"
@@ -219,9 +227,6 @@ msgstr ""
219
227
  msgid "Insights"
220
228
  msgstr ""
221
229
 
222
- msgid "Insights synchronization process is used to provide Insights recommendations output for hosts managed here."
223
- msgstr ""
224
-
225
230
  msgid "Inventory"
226
231
  msgstr ""
227
232
 
@@ -243,6 +248,9 @@ msgstr ""
243
248
  msgid "Knowledgebase article"
244
249
  msgstr ""
245
250
 
251
+ msgid "List of host UUIDs"
252
+ msgstr ""
253
+
246
254
  msgid "Loading"
247
255
  msgstr ""
248
256
 
@@ -345,7 +353,7 @@ msgstr ""
345
353
  msgid "Recommendations synced successfully"
346
354
  msgstr ""
347
355
 
348
- msgid "Reconfigure Cloud Connector"
356
+ msgid "Reconfigure cloud connector"
349
357
  msgstr ""
350
358
 
351
359
  msgid "Red Hat Cloud Inventory"
@@ -375,9 +383,6 @@ msgstr ""
375
383
  msgid "Resolution"
376
384
  msgstr ""
377
385
 
378
- msgid "Restart"
379
- msgstr ""
380
-
381
386
  msgid "Run RH Cloud playbook"
382
387
  msgstr ""
383
388
 
@@ -408,6 +413,9 @@ msgstr ""
408
413
  msgid "Show Advanced Settings"
409
414
  msgstr ""
410
415
 
416
+ msgid "Show if system is configured to use local iop-advisor-engine."
417
+ msgstr ""
418
+
411
419
  msgid "Start inventory synchronization"
412
420
  msgstr ""
413
421
 
@@ -429,15 +437,18 @@ msgstr ""
429
437
  msgid "Synchronize recommendations Automatically"
430
438
  msgstr ""
431
439
 
432
- msgid "The Red Hat Hybrid Cloud Console provides a set of cloud services, including Red Hat Insights and Subscriptions, that provide predictive analysis, remediation of issues, and unified subscription reporting for this Satellite instance."
440
+ msgid "The Foreman inventory upload plugin automatically uploads Foreman host inventory data to the Inventory service of Insights, where it can also be used by the Subscriptions service for subscription reporting. If you use the Subscriptions service, enabling inventory uploads is required."
433
441
  msgstr ""
434
442
 
435
- msgid "The Satellite inventory upload plugin automatically uploads Satellite host inventory data to the Inventory service of Insights, where it can also be used by the Subscriptions service for subscription reporting. If you use the Subscriptions service, enabling inventory uploads is required."
443
+ msgid "The Red Hat Hybrid Cloud Console provides a set of cloud services, including Red Hat Insights and Subscriptions, that provide predictive analysis, remediation of issues, and unified subscription reporting for this Foreman instance."
436
444
  msgstr ""
437
445
 
438
446
  msgid "The report file %{filename} doesn't exist"
439
447
  msgstr ""
440
448
 
449
+ msgid "The scheduled process is disabled because this Foreman is configured with the use_local_advisor_engine option."
450
+ msgstr ""
451
+
441
452
  msgid "The server returned the following error: %s"
442
453
  msgstr ""
443
454
 
@@ -450,7 +461,7 @@ msgstr ""
450
461
  msgid "This action will also enable automatic reports upload"
451
462
  msgstr ""
452
463
 
453
- msgid "To enable this reporting for all Satellite organizations, set {uploadButtonName} to on. The data will be reported automatically once per day."
464
+ msgid "To enable this reporting for all Foreman organizations, set {uploadButtonName} to on. The data will be reported automatically once per day."
454
465
  msgstr ""
455
466
 
456
467
  msgid "To manually upload the data for a specific organization, select an organization and click {restartButtonName}."
@@ -462,6 +473,15 @@ msgstr ""
462
473
  msgid "Total risks"
463
474
  msgstr ""
464
475
 
476
+ msgid "Upload hits from iop-advisor-engine"
477
+ msgstr ""
478
+
479
+ msgid "Upload hits information"
480
+ msgstr ""
481
+
482
+ msgid "Upload rules related to the hits"
483
+ msgstr ""
484
+
465
485
  msgid "Uploading"
466
486
  msgstr ""
467
487
 
@@ -477,18 +497,87 @@ msgstr ""
477
497
  msgid "Wait and %s"
478
498
  msgstr ""
479
499
 
500
+ msgid "Whether the resolution requires reboot"
501
+ msgstr ""
502
+
503
+ msgid "category name"
504
+ msgstr ""
505
+
506
+ msgid "generic"
507
+ msgstr ""
508
+
480
509
  msgid "hosts page"
481
510
  msgstr ""
482
511
 
512
+ msgid "impact name"
513
+ msgstr ""
514
+
515
+ msgid "iop payload including resolutions, rules, hits"
516
+ msgstr ""
517
+
483
518
  msgid "items"
484
519
  msgstr ""
485
520
 
521
+ msgid "likelihood number"
522
+ msgstr ""
523
+
524
+ msgid "more info"
525
+ msgstr ""
526
+
486
527
  msgid "page"
487
528
  msgstr ""
488
529
 
489
530
  msgid "per page"
490
531
  msgstr ""
491
532
 
533
+ msgid "publish date (YYYY-MM-DD)"
534
+ msgstr ""
535
+
536
+ msgid "rating"
537
+ msgstr ""
538
+
539
+ msgid "reason"
540
+ msgstr ""
541
+
542
+ msgid "reboot required"
543
+ msgstr ""
544
+
545
+ msgid "resolution description"
546
+ msgstr ""
547
+
548
+ msgid "resolution risk"
549
+ msgstr ""
550
+
551
+ msgid "result url"
552
+ msgstr ""
553
+
554
+ msgid "rule description"
555
+ msgstr ""
556
+
557
+ msgid "rule id"
558
+ msgstr ""
559
+
560
+ msgid "rule title"
561
+ msgstr ""
562
+
563
+ msgid "solution url"
564
+ msgstr ""
565
+
566
+ msgid "summary"
567
+ msgstr ""
568
+
569
+ msgid "total risk"
570
+ msgstr ""
571
+
572
+ msgid "type"
573
+ msgstr ""
574
+
575
+ msgid "upload hits details json"
576
+ msgstr ""
577
+
578
+ msgid "upload resolutions related to the hits"
579
+ msgstr ""
580
+
492
581
  msgid "view the job in progress"
493
582
  msgstr ""
494
583