@Test public void testDecodeHostName() throws Exception { byte[] data = IpfixUtilities.hexStringToByteArray("000A00AC5DAEECB700000000000010EF00030022025800030001938AFFFF00000E91A1BCFFFF" + "00000E91A1BDFFFF00000E910258007A08686F73746E616D650961646D696E757365726224362471334739564D6D5424736C484C59547A6A6553495A3" + "86E525A465A5A487255384356385352387352456B6447544A656D6B705063616D4476414979372E504247494F6771767543757037716557382E6B6246" + "38416D44596378586B6373792E"); IpfixMessage ipfixMessage = new IpfixMessage(data); IpfixDataSet dataSet = ipfixMessage.getDataSets().get(0); AbstractTemplateRecord blueprint = ipfixMessage.getOptionTemplateSets().get(0).getRecords().get(0); String family = "sample-model-tls-DPU-1.0"; when(m_templateProvider.get(600)).thenReturn(blueprint); when(m_deviceFamilyCacheService.getDeviceFamily("hostname")).thenReturn(family); Set<IpfixDecodedData> decodedDataSet = m_decodingDataRecordService.decodeDataSet("", 1L, dataSet, ipfixMessage, m_templateProvider); verify(m_deviceFamilyCacheService).getDeviceFamily("hostname"); Set<IpfixDecodedData> decodedDataRecords = decodedDataSet; assertEquals(3, decodedDataRecords.size()); Set<String> decodedCounters = new HashSet<>(); for (IpfixDecodedData decodedData : decodedDataRecords) { decodedCounters.add(decodedData.getCounterName()); } assertTrue(decodedCounters.contains("5002.3729")); assertTrue(decodedCounters.contains("8636.3729")); assertTrue(decodedCounters.contains("8637.3729")); }
@Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } DecodingDataRecordServiceImpl(InformationElementService informationElementServiceCache,
                                         DecodeMethodFactory decodeMethodFactory, DeviceCacheService deviceCacheService); }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } DecodingDataRecordServiceImpl(InformationElementService informationElementServiceCache,
                                         DecodeMethodFactory decodeMethodFactory, DeviceCacheService deviceCacheService); @Override Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage,
                                                CollectingServiceImpl.TemplateProvider templateProvider); }
DecodingDataRecordServiceImpl implements DecodingDataRecordService { @Override public Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage, CollectingServiceImpl.TemplateProvider templateProvider) throws DecodingException { if (Objects.isNull(set)) { throw new DecodingException("Data set is invalid for decoding process."); } int templateId = set.getHeader().getId(); LOGGER.debug(String.format("Start decoding data set (Observation domain: %s, Set id: %s)", obsvDomain, templateId)); AbstractTemplateRecord blueprint = templateProvider.get(templateId); if (Objects.isNull(blueprint)) { LOGGER.debug(String.format("Template %s on device %s not available in cache, start buffering", templateId, deviceName)); return Collections.emptySet(); } else { LOGGER.debug("Template available in cache, start decoding"); return decodeDataSetWithTemplate(deviceName, blueprint, obsvDomain, set, ipfixMessage); } } DecodingDataRecordServiceImpl(InformationElementService informationElementServiceCache,
                                         DecodeMethodFactory decodeMethodFactory, DeviceCacheService deviceCacheService); @Override Set<IpfixDecodedData> decodeDataSet(String deviceName, long obsvDomain, IpfixDataSet set, IpfixMessage ipfixMessage,
                                                CollectingServiceImpl.TemplateProvider templateProvider);  }