Class: Prowler

Inherits:
Object
  • Object
show all
Defined in:
lib/parsers/prowler.rb

Instance Method Summary collapse

Instance Method Details

#parse(file, threshold) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/parsers/prowler.rb', line 4

def parse(file,threshold) 
  grouped_data = {}
  data = JSON.parse(file)

  data.each do |item|
    title = item['CheckTitle']

    if grouped_data[title].nil?
      grouped_data[title] = []
    end

    grouped_data[title] << item
  end

  merged_data = {}

  grouped_data.each do |title, items|
    fail_items = items.select { |item| item['Status'] == 'FAIL' }

    if fail_items.length > 0
      merged_data[title] = {
        'AccountId' =>fail_items[0]['AccountId'],          
        'ServiceName' => fail_items[0]['ServiceName'],
        'SubServiceName' =>fail_items[0]['SubServiceName'],
        'StatusExtended' => fail_items.map { |item| item['StatusExtended'] }.join("\r\n"),
        'Severity' => fail_items[0]['Severity'],
        'Risk' => fail_items[0]['Risk'],
        'Region' => fail_items.map { |item| item['Region'] }.join("\r\n"),
        'ResourceId' => fail_items.map { |item| item['ResourceId'] }.join("\r\n"),
        'Remediation' => fail_items[0]['Remediation']['Code'],
        'Recommendation' => fail_items[0]['Remediation']['Recommendation'],
        'Scale' => if fail_items[0]['Severity'] == 'critical'
                     10.to_i
                   elsif fail_items[0]['Severity'] == 'high'
                     8.to_i
                   elsif fail_items[0]['Severity'] == 'medium'
                     6.to_i
                   elsif fail_items[0]['Severity'] == 'low'          
                     3.to_i
                   end
      }
    end
  end

  merged_data.transform_values! do |value|
    value['ServiceName'] = value['ServiceName'].upcase if value['ServiceName']
    value['Severity'] = value['Severity'].upcase if value['Severity']
    value
  end

  data = merged_data.sort_by { |_, value| value["Scale"] }

  return data.to_json
end