Sha256: e26846a8fbe8b575c8e6879a5ff2392697c9fca473813c421bc45bd138906c8a

Contents?: true

Size: 1.95 KB

Versions: 2

Compression:

Stored size: 1.95 KB

Contents

module Proxy::OpenSCAP
  class SpoolForwarder
    include ::Proxy::Log

    def post_arf_from_spool(arf_dir)
      Dir.foreach(arf_dir) do |cname|
        next if cname == '.' || cname == '..'
        cname_dir = File.join(arf_dir, cname)
        forward_cname_dir(cname, cname_dir) if File.directory?(cname_dir)
      end
    end

    private

    def forward_cname_dir(cname, cname_dir)
      Dir.foreach(cname_dir) do |policy_id|
        next if policy_id == '.' || policy_id == '..'
        policy_dir = File.join(cname_dir, policy_id)
        if File.directory?(policy_dir)
          forward_policy_dir(cname, policy_id, policy_dir)
        end
      end
      remove(cname_dir)
    end

    def forward_policy_dir(cname, policy_id, policy_dir)
      Dir.foreach(policy_dir) do |date|
        next if date == '.' || date == '..'
        date_dir = File.join(policy_dir, date)
        if File.directory?(date_dir)
          forward_date_dir(cname, policy_id, date, date_dir)
        end
      end
      remove(policy_dir)
    end

    def forward_date_dir(cname, policy_id, date, date_dir)
      Dir.foreach(date_dir) do |arf|
        next if arf == '.' || arf == '..'
        arf_path = File.join(date_dir, arf)
        if File.file?(arf_path)
          logger.debug("Uploading #{arf} to Foreman")
          forward_arf_file(cname, policy_id, date, arf_path)
        end
      end
      remove(date_dir)
    end

    def forward_arf_file(cname, policy_id, date, arf_file_path)
      data = File.open(arf_file_path, 'rb') { |io| io.read }
      post_to_foreman = ForemanForwarder.new.post_arf_report(cname, policy_id, date, data)
      Proxy::OpenSCAP::StorageFS.new(Proxy::OpenSCAP::Plugin.settings.reportsdir, cname, post_to_foreman['id'], date).store_archive(data)
      File.delete arf_file_path
    end

    def remove(dir)
      begin
        Dir.delete dir
      rescue StandardError => e
        logger.error "Could not remove directory: #{e.message}"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
smart_proxy_openscap-0.5.1 lib/smart_proxy_openscap/spool_forwarder.rb
smart_proxy_openscap-0.5.0 lib/smart_proxy_openscap/spool_forwarder.rb