diff --git a/app/controllers/api/v2/advisor_engine/advisor_engine_controller.rb b/app/controllers/api/v2/advisor_engine/advisor_engine_controller.rb index 759484ed..5bedd802 100644 --- a/app/controllers/api/v2/advisor_engine/advisor_engine_controller.rb +++ b/app/controllers/api/v2/advisor_engine/advisor_engine_controller.rb @@ -3,6 +3,11 @@ module V2 module AdvisorEngine class AdvisorEngineController < ::Api::V2::BaseController include ::Api::Version2 + include Foreman::Controller::SmartProxyAuth + include ::Foreman::Controller::FilterParameters + + filter_parameters :payload + add_smart_proxy_filters [:host_details, :upload_hits] api :GET, "/advisor_engine/host_details", N_('Fetch Insights-related host details') param :host_uuids, Array, required: true, desc: N_('List of host UUIDs') @@ -17,6 +22,73 @@ def host_details end end end + + api :PATCH, "/advisor_engine/upload_hits", N_("Upload from insights advisor") + param :host_name, String, required: true + param :host_uuid, String, required: true + + param :payload, Hash, :desc => N_("On prem payload including resolutions, rules, hits") do + param :resolutions, Array, :desc => N_("upload resolutions related to the hits") do + param :rule_id, String, :desc => N_("rule id"), :required => true + param :description, String, :desc => N_("resolution description") + param :needs_reboot, :bool, :desc => N_("need reboot") + param :resolution_risk, String, :desc => N_("resolution risk") + param :resolution_type, String, :desc => N_("type") + end + + param :rules, Array, :desc => N_("upload rules related to the hits") do + param :rule_id, String, :desc => N_("rule id"), :required => true + param :description, String, :desc => N_("rule description") + param :category_name, String, :desc => N_("category name") + param :impact_name, String, :desc => N_("impact name") + param :summary, String, :desc => N_("summary") + param :generic, String, :desc => N_("generic") + param :reason, String, :desc => N_("reason") + param :total_risk, :number, :desc => N_("total risk") + param :reboot_required, :bool, :desc => N_("reboot required") + param :more_info, String, :desc => N_("more info") + param :rating, :number, :desc => N_("rating") + end + + param :hits, Array, :desc => N_("upload hits information") do + param :rule_id, String, :desc => N_("rule id"), :required => true + param :title, String, :desc => N_("rule title") + param :solution_url, String, :desc => N_("solution url") + param :total_risk, :number, :desc => N_("total risk") + param :likelihood, :number, :desc => N_("likelihood number") + param :publish_date, String, :desc => N_("publish date (YYYY-MM-DD)") + param :results_url, String, :desc => N_("result url") + end + param :details, String, :desc => N_("upload hits details json") + end + + def upload_hits + host = Host.find_by(name: params.require(:host_name)) + payload = payload_params.to_h + task = ForemanTasks.async_task(ForemanHits::Async::Upload, host, params.require(:host_uuid), payload) + + render json: { + task: task, + }, status: :ok + end + + def payload_params + params.require(:payload).permit( + :details, + { + resolutions: [ + :rule_id, :description, :needs_reboot, :resolution_risk, :resolution_type + ], + rules: [ + :rule_id, :description, :category_name, :impact_name, :summary, :generic, + :reason, :total_risk, :reboot_required, :more_info, :rating + ], + hits: [ + :rule_id, :title, :solution_url, :total_risk, :likelihood, :publish_date, :results_url + ], + } + ) + end end end end diff --git a/app/controllers/api/v2/insights_advisor/insights_advisor_controller.rb b/app/controllers/api/v2/insights_advisor/insights_advisor_controller.rb deleted file mode 100644 index 0beb11de..00000000 --- a/app/controllers/api/v2/insights_advisor/insights_advisor_controller.rb +++ /dev/null @@ -1,78 +0,0 @@ -module Api - module V2 - module InsightsAdvisor - class InsightsAdvisorController < ::Api::V2::BaseController - include ::Api::Version2 - include Foreman::Controller::SmartProxyAuth - add_smart_proxy_filters [:upload_hits] - - api :PATCH, "/insights_advisor/upload_hits", N_("Upload from insights advisor") - param :host_name, String, required: true - param :host_uuid, String, required: true - - param :payload, Hash, :desc => N_("On prem payload including resolutions, rules, hits") do - param :resolutions, Array, :desc => N_("upload resolutions related to the hits") do - param :rule_id, String, :desc => N_("rule id"), :required => true - param :description, String, :desc => N_("resolution description") - param :needs_reboot, :bool, :desc => N_("need reboot") - param :resolution_risk, String, :desc => N_("resolution risk") - param :resolution_type, String, :desc => N_("type") - end - - param :rules, Array, :desc => N_("upload rules related to the hits") do - param :rule_id, String, :desc => N_("rule id"), :required => true - param :description, String, :desc => N_("rule description") - param :category_name, String, :desc => N_("category name") - param :impact_name, String, :desc => N_("impact name") - param :summary, String, :desc => N_("summary") - param :generic, String, :desc => N_("generic") - param :reason, String, :desc => N_("reason") - param :total_risk, :number, :desc => N_("total risk") - param :reboot_required, :bool, :desc => N_("reboot required") - param :more_info, String, :desc => N_("more info") - param :rating, :number, :desc => N_("rating") - end - - param :hits, Array, :desc => N_("upload hits information") do - param :rule_id, String, :desc => N_("rule id"), :required => true - param :title, String, :desc => N_("rule title") - param :solution_url, String, :desc => N_("solution url") - param :total_risk, :number, :desc => N_("total risk") - param :likelihood, :number, :desc => N_("likelihood number") - param :publish_date, String, :desc => N_("publish date (YYYY-MM-DD)") - param :results_url, String, :desc => N_("result url") - end - param :details, String, :desc => N_("upload hits details json") - end - - def upload_hits - host = Host.find_by(name: params.require(:host_name)) - payload = payload_params.to_h - task = ForemanTasks.async_task(ForemanHits::Async::Upload, host, params.require(:host_uuid), payload) - - render json: { - task: task, - }, status: :ok - end - - def payload_params - params.require(:payload).permit( - :details, - { - resolutions: [ - :rule_id, :description, :needs_reboot, :resolution_risk, :resolution_type - ], - rules: [ - :rule_id, :description, :category_name, :impact_name, :summary, :generic, - :reason, :total_risk, :reboot_required, :more_info, :rating - ], - hits: [ - :rule_id, :title, :solution_url, :total_risk, :likelihood, :publish_date, :results_url - ], - } - ) - end - end - end - end -end diff --git a/config/routes.rb b/config/routes.rb index c8e126a6..5df11806 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -60,10 +60,6 @@ end end - namespace 'insights_advisor' do - patch 'upload_hits', to: 'insights_advisor#upload_hits' - end - namespace 'rh_cloud' do post 'enable_connector', to: 'inventory#enable_cloud_connector' post 'cloud_request', to: 'cloud_request#update' @@ -71,7 +67,7 @@ namespace 'advisor_engine' do get 'host_details', to: 'advisor_engine#host_details' - # post 'upload_hits', to: 'advisor_engine#upload_hits' + post 'upload_hits', to: 'advisor_engine#upload_hits' end end end