X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=ves-nf-oam-adopter%2Fves-nf-oam-adopter-pm-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fo%2Fran%2Foam%2Fnf%2Foam%2Fadopter%2Fpm%2Frest%2Fmanager%2Fmapper%2FPerformanceManagementFile2VesMapper.java;h=0d40c7bdfc40212190a621776e3bc110c352e28f;hb=8ba75af7767ed833cc600c6d15fc80d13c214c29;hp=3cc99cd60d58d5e34f9f3613e2c6a74e55180970;hpb=3b1e9c1e2ea636b0c90da826ecf37147a9b5f23d;p=oam%2Fnf-oam-adopter.git diff --git a/ves-nf-oam-adopter/ves-nf-oam-adopter-pm-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/pm/rest/manager/mapper/PerformanceManagementFile2VesMapper.java b/ves-nf-oam-adopter/ves-nf-oam-adopter-pm-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/pm/rest/manager/mapper/PerformanceManagementFile2VesMapper.java index 3cc99cd..0d40c7b 100644 --- a/ves-nf-oam-adopter/ves-nf-oam-adopter-pm-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/pm/rest/manager/mapper/PerformanceManagementFile2VesMapper.java +++ b/ves-nf-oam-adopter/ves-nf-oam-adopter-pm-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/pm/rest/manager/mapper/PerformanceManagementFile2VesMapper.java @@ -47,6 +47,9 @@ public class PerformanceManagementFile2VesMapper { private static final String CSV_EXTENSION = ".csv"; private final PerformanceManagementMapperConfigProvider pmConfigProvider; + private static final int THRESHOLD_SIZE = 1000000000; // 1 GB + private static final int THRESHOLD_RATIO = 10; + private static final int THRESHOLD_ENTRIES = 10000; @Autowired public PerformanceManagementFile2VesMapper(final PerformanceManagementMapperConfigProvider pmConfigProvider) { @@ -65,12 +68,31 @@ public class PerformanceManagementFile2VesMapper { LOG.info("Converting ZIP files to VES Message started"); final List listOfNotifications = new ArrayList<>(); final CsvSchema schema = CsvSchema.emptySchema().withHeader(); - final CsvMapper mapper = new CsvMapper(); + final var mapper = new CsvMapper(); mapper.configure(JsonParser.Feature.AUTO_CLOSE_SOURCE, false); try { ZipEntry entry; - final VesMappingConfiguration mappingConfiguration = pmConfigProvider.getVesMappingConfiguration(); + final var mappingConfiguration = pmConfigProvider.getVesMappingConfiguration(); + var totalSizeEntry = 0; + var totalEntryArchive = 0; while ((entry = zipInputStream.getNextEntry()) != null) { + final var size = entry.getSize(); + totalEntryArchive++; + totalSizeEntry += size; + if (totalSizeEntry > THRESHOLD_SIZE || size == -1) { + throw new IllegalStateException("File to be unzipped too big."); + } + + final long compressionRatio = totalSizeEntry / entry.getCompressedSize(); + if (compressionRatio > THRESHOLD_RATIO) { + return Single.error(new Exception("Wrong file type, threshold to high.")); + } + + if (totalEntryArchive > THRESHOLD_ENTRIES) { + // too much entries in this archive, can lead to inodes exhaustion of the system + return Single.error(new Exception("Too many files")); + } + final String entryName = entry.getName(); if (!entryName.endsWith(CSV_EXTENSION)) { return Single.error(new Exception("Wrong file type :" + entryName)); @@ -81,7 +103,7 @@ public class PerformanceManagementFile2VesMapper { final List> mappedEvents = toEvent(mappingConfiguration, hostIp, iterator); mappedEvents.forEach(mapped -> { - final CommonEventFormat302ONAP eventFormat = new CommonEventFormat302ONAP(); + final var eventFormat = new CommonEventFormat302ONAP(); eventFormat.setEventList(mapped); listOfNotifications.add(eventFormat); }); @@ -103,11 +125,11 @@ public class PerformanceManagementFile2VesMapper { final Iterator> iterator) { final List> globalList = new ArrayList<>(); final int batchSize = mappingConfiguration.getBatchSize(); - int sequence = 0; + var sequence = 0; List events = new ArrayList<>(); final CsvConfiguration csv = mappingConfiguration.getCsv(); while (iterator.hasNext()) { - final Event event = new Event(); + final var event = new Event(); final Map recordMap = iterator.next(); event.setCommonEventHeader(CommonEventHeaderHandler.toCommonEventHeader(mappingConfiguration, hostIp, csv, recordMap, sequence));