github.com/cloudfoundry-incubator/stembuild@v0.0.0-20211223202937-5b61d62226c6/modules/BOSH.Sysprep/print_conflicted_from_audit_csv.rb (about)

     1  #!/usr/bin/env ruby
     2  
     3  class AuditFile
     4    attr_accessor :header
     5    attr_accessor :contents
     6  
     7    def initialize(header, contents)
     8      @header = header
     9      @contents = contents
    10    end
    11  
    12    def self.from_string(s)
    13      lines = s.split "\r\n"
    14      header = lines[0]
    15      contents = lines[1..-1]
    16  
    17      AuditFile.new(header, contents)
    18    end
    19  
    20    def print()
    21      ([header] + contents).join("\r\n")
    22    end
    23  
    24    def uniq()
    25      uniqed = contents.uniq do |x|
    26        values = x.split(',')
    27        keys = values[0..5].join('').downcase
    28        setting_value = values[6]
    29        keys+setting_value
    30      end
    31  
    32      AuditFile.new(header, uniqed)
    33    end
    34  
    35    def size()
    36      contents.size
    37    end
    38  end
    39  
    40  def merge(a, b)
    41    AuditFile.new(a.header, a.contents + b.contents)
    42  end
    43  
    44  a_file = File.read 'audit-cis.csv'
    45  b_file = File.read 'audit-ms.csv'
    46  
    47  a_audit = AuditFile.from_string(a_file)
    48  b_audit = AuditFile.from_string(b_file)
    49  
    50  puts "a has #{a_audit.size} lines"
    51  puts "b has #{b_audit.size} lines"
    52  
    53  merged = merge(a_audit, b_audit)
    54  puts "after merge: #{merged.size} lines"
    55  
    56  uniqued = merged.uniq
    57  puts "after uniq: #{uniqued.size} lines"
    58  
    59  grouped = uniqued.contents.group_by do |line|
    60    fields = line.split ','
    61    policy_target = fields[1].downcase
    62    subcategory = fields[2].downcase
    63    policy_target + ',' + subcategory
    64  end
    65  
    66  dups = grouped.keys.select {|k| grouped[k].size > 1}
    67  
    68  if(dups.nil?)
    69    puts "found 0 conflicts"
    70  else
    71    puts "found #{dups.size} conflicts"
    72    dups.each {|x| puts x}
    73  end
    74  
    75  merged_file = "audit-merged.csv"
    76  File.write merged_file, uniqued.print
    77  puts "wrote merged stuff to #{merged_file}"