class ForemanInventoryUpload::Generators::ArchivedReport

Public Class Methods

new(target, logger = Rails.logger) click to toggle source
# File lib/foreman_inventory_upload/generators/archived_report.rb, line 4
def initialize(target, logger = Rails.logger)
  @target = target
  @logger = logger
end

Public Instance Methods

render(organization:) click to toggle source
# File lib/foreman_inventory_upload/generators/archived_report.rb, line 9
def render(organization:)
  Dir.mktmpdir do |tmpdir|
    @logger.info "Started generating hosts report in #{tmpdir}"
    host_batches = ForemanInventoryUpload::Generators::Queries.for_org(organization)
    File.open(File.join(tmpdir, 'metadata.json'), 'w') do |metadata_out|
      metadata_generator = ForemanInventoryUpload::Generators::Metadata.new(metadata_out)
      metadata_generator.render do |inner_generator|
        first = true
        host_batches.each do |hosts_batch|
          slice_id = Foreman.uuid
          @logger.info "Adding slice #{slice_id}"
          hosts_count = generate_slice(tmpdir, slice_id, hosts_batch)
          @logger.info "slice #{slice_id} was created with #{hosts_count} hosts"
          inner_generator.add_slice(slice_id, hosts_count, first)
          first = false
        end
      end
    end
    @logger.info 'Report generation finished'

    @logger.info 'Archiving generated report'
    # success = system('tar', '-zcvf', @target, '-C', tmpdir, '.')
    Open3.popen2e('tar', '-zcvf', @target, '-C', tmpdir, '.') do |_in, out, wait_thr|
      @logger.info("tar: #{out.read}")

      if wait_thr.value.success?
        @logger.info 'Report archived successfully'
      else
        @logger.info "Tar command failed: #{$CHILD_STATUS}"
      end
    end
  end
end

Private Instance Methods

generate_slice(tmpdir, slice_id, hosts_batch) click to toggle source
# File lib/foreman_inventory_upload/generators/archived_report.rb, line 45
def generate_slice(tmpdir, slice_id, hosts_batch)
  hosts_count = 0
  File.open(File.join(tmpdir, "#{slice_id}.json"), 'w') do |slice_out|
    slice_generator = ForemanInventoryUpload::Generators::Slice.new(hosts_batch, slice_out, slice_id)
    slice_generator.render
    hosts_count = slice_generator.hosts_count
  end
  hosts_count
end