1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.hack23.sonar.cloudformation;
21
22 import java.io.IOException;
23
24 import org.sonar.api.batch.fs.FileSystem;
25 import org.sonar.api.batch.sensor.Sensor;
26 import org.sonar.api.batch.sensor.SensorContext;
27 import org.sonar.api.batch.sensor.SensorDescriptor;
28 import org.sonar.api.scan.filesystem.PathResolver;
29 import org.sonar.api.utils.log.Logger;
30 import org.sonar.api.utils.log.Loggers;
31 import org.sonar.api.utils.log.Profiler;
32
33 import com.hack23.sonar.cloudformation.reports.process.CfnNagProcessReports;
34 import com.hack23.sonar.cloudformation.reports.process.CheckovProcessReports;
35
36
37
38
39 public final class CloudformationSensor implements Sensor {
40
41
42 public static final String SENSOR_NAME = "Cloudformation Check";
43
44
45 private static final Logger LOGGER = Loggers.get(CloudformationSensor.class);
46
47
48 private final CfnNagProcessReports cfnNagProcessReports;
49
50
51 private final CheckovProcessReports checkovProcessReports;
52
53
54 private final CloudformationSensorConfiguration configuration;
55
56
57
58
59
60
61
62
63 public CloudformationSensor(final CloudformationSensorConfiguration configuration, final FileSystem fileSystem,
64 final PathResolver pathResolver) {
65 super();
66 this.configuration = configuration;
67 this.cfnNagProcessReports = new CfnNagProcessReports(fileSystem, pathResolver);
68 this.checkovProcessReports = new CheckovProcessReports(fileSystem, pathResolver);
69 }
70
71
72
73
74
75
76 @Override
77 public void describe(final SensorDescriptor descriptor) {
78 descriptor.name(SENSOR_NAME);
79
80 }
81
82
83
84
85
86
87 @Override
88 public void execute(final SensorContext context) {
89 final Profiler profiler = Profiler.create(LOGGER);
90 profiler.startInfo("Process iac reports");
91
92 try {
93 cfnNagProcessReports.processCfnNagReport(context,configuration.getCfnNagReportFiles());
94 checkovProcessReports.processCheckovReport(context,configuration.getCheckovReportFiles());
95 } catch (final IOException e) {
96 throw new RuntimeException("Can not process iac reports.", e);
97 } finally {
98 profiler.stopInfo();
99 }
100 }
101
102 }