*.ipr
*.iws
+# VSCode IDE
+#------------------------------------------------------------
+.vscode/
+
# Logs
#------------------------------------------------------------
*.log
-FROM onap/integration-python:8.0.0
+FROM onap/integration-python:9.0.0
USER root
python -m pip install --upgrade pip \
pip install 'pycurl==7.44.1' && \
set -ex && \
- gem update --system --no-document && \
gem install --no-update-sources public_suffix:4.0.7 multipart-post:2.2.0 etc:1.3.0 bundler:2.3.26 chef:13.8.5 berkshelf:6.3.1 io-console:0.4.6 webrick --no-document && \
apk del .build-dependencies && \
gem cleanup
-FROM onap/integration-java11:12.0.0
+FROM onap/integration-java11:10.0.0
USER root
ARG JETTY_FOLDER=/app/jetty
ruby-dev \
libffi-dev \
libxml2-dev && \
- gem update --system --no-document && \
gem install --no-update-sources public_suffix:4.0.7 multipart-post:2.2.0 etc:1.3.0 bundler:2.3.26 chef:13.8.5 berkshelf:6.3.1 io-console:0.4.6 webrick --no-document && \
gem cleanup && \
apk update
package org.openecomp.sdc.be.components.impl;
import fj.data.Either;
+import java.time.Instant;
+import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import java.util.stream.Collectors;
import org.apache.http.HttpStatus;
import org.openecomp.sdc.be.dao.api.ActionStatus;
import org.openecomp.sdc.be.dao.cassandra.AuditCassandraDao;
import org.openecomp.sdc.be.resources.data.auditing.AuditingGenericEvent;
import org.openecomp.sdc.be.resources.data.auditing.DistributionStatusEvent;
import org.openecomp.sdc.common.datastructure.AuditingFieldsKey;
+import org.openecomp.sdc.common.log.enums.EcompLoggerErrorCode;
import org.openecomp.sdc.common.log.wrappers.Logger;
import org.openecomp.sdc.exception.ResponseFormat;
import org.springframework.beans.factory.annotation.Autowired;
@Component("distributionMonitoringBusinessLogic")
public class DistributionMonitoringBusinessLogic extends BaseBusinessLogic {
+ private static final Logger log = Logger.getLogger(ArtifactsBusinessLogic.class.getName());
private static final String DEPLOYED = "Deployed";
private static final String ERROR = "Error";
private static final String DISTRIBUTED = "Distributed";
private static final String IN_PROGRESS = "In Progress";
- private static final Logger log = Logger.getLogger(ArtifactsBusinessLogic.class.getName());
private final AuditCassandraDao cassandraDao;
@Autowired
log.debug("not found distribution statuses for did {} status is {} ", did, distributionStatus.right().value());
return Either.right(componentsUtils.getResponseFormat(distributionStatus.right().value(), did));
}
- List<DistributionStatusInfo> distribStatusInfoList = new ArrayList<>();
- List<DistributionStatusEvent> distributionStatusEventList = distributionStatus.left().value();
- if (distributionStatusEventList != null) {
- for (AuditingGenericEvent distributionStatusEvent : distributionStatusEventList) {
- distribStatusInfoList.add(new DistributionStatusInfo(distributionStatusEvent));
- }
- }
+ List<DistributionStatusInfo> distribStatusInfoList = distributionStatus.left().value().stream()
+ .filter(Objects::nonNull)
+ .map(DistributionStatusInfo::new)
+ .collect(Collectors.toList());
+
DistributionStatusListResponse distributionStatusListResponse = new DistributionStatusListResponse();
distributionStatusListResponse.setDistributionStatusList(distribStatusInfoList);
log.trace("list statuses for did {} is {} ", did, distribStatusInfoList);
log.debug("failed to find service distribution statuses. error: {}", status);
return Either.right(componentsUtils.getResponseFormat(status.right().value(), serviceUuid));
}
- List<DistributionStatusOfServiceInfo> distribStatusInfoList;
List<? extends AuditingGenericEvent> distributionStatusEventList = status.left().value();
- distribStatusInfoList = handleAuditingDaoResponse(distributionStatusEventList);
- DistributionStatusOfServiceListResponce distributionStatusListResponse = new DistributionStatusOfServiceListResponce();
- distributionStatusListResponse.setDistributionStatusOfServiceList(distribStatusInfoList);
+ List<DistributionStatusOfServiceInfo> distributionStatusInfoList = handleAuditingDaoResponse(distributionStatusEventList);
+ DistributionStatusOfServiceListResponce distributionStatusListResponse = new DistributionStatusOfServiceListResponce(distributionStatusInfoList);
return Either.left(distributionStatusListResponse);
}
Map<String, Object> fields = resAuditingGenericEvent.getFields();
if (fields != null) {
Optional.ofNullable(fields.get(AuditingFieldsKey.AUDIT_TIMESTAMP.getDisplayName()))
- .ifPresent(timestamp -> distributionStatusOfServiceInfo.setTimestamp((String) timestamp));
+ .ifPresent(timestamp -> distributionStatusOfServiceInfo.setTimestamp(formatTimestamp(timestamp)));
}
}
if (!isResult) {
return reslist;
}
+ private String formatTimestamp(Object timestamp) {
+ if(timestamp instanceof String) {
+ return (String) timestamp;
+ } else if (timestamp instanceof Long) {
+ try {
+ return Instant.ofEpochMilli((Long) timestamp).atOffset(ZoneOffset.UTC).toString();
+ } catch (Exception e) {
+ log.warn(EcompLoggerErrorCode.DATA_ERROR, "sdc-be", "Failed to format timestamp: {}. Returning without formatting", timestamp, e);
+ return String.valueOf(timestamp);
+ }
+ } else {
+ return String.valueOf(timestamp);
+ }
+ }
+
private String getStatusFromAuditEvent(AuditingGenericEvent auditingGenericEvent) {
String status = "";
Object requestStatus = auditingGenericEvent.getFields().get(AuditingFieldsKey.AUDIT_STATUS.getDisplayName());
package org.openecomp.sdc.be.info;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
-@Getter
-@Setter
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
public class DistributionStatusListResponse {
private List<DistributionStatusInfo> distributionStatusList;
package org.openecomp.sdc.be.info;
import java.util.List;
-import lombok.Getter;
-import lombok.Setter;
-@Getter
-@Setter
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
public class DistributionStatusOfServiceListResponce {
private List<DistributionStatusOfServiceInfo> distributionStatusOfServiceList;
import org.openecomp.sdc.be.model.User;
import org.openecomp.sdc.be.resources.data.auditing.AuditingGenericEvent;
import org.openecomp.sdc.be.resources.data.auditing.DistributionStatusEvent;
+import org.openecomp.sdc.common.datastructure.AuditingFieldsKey;
import org.openecomp.sdc.exception.ResponseFormat;
import java.util.ArrayList;
public class DistributionMonitoringBusinessLogicTest extends BaseBusinessLogicMock {
- private String uId;
+ private String userId;
private User user;
- private String ditributionId;
+ private String distributionId;
private String serviceId;
private DistributionMonitoringBusinessLogic businessLogic;
- @Mock
- private AuditCassandraDao cassandraDao;
-
- @Mock
- private UserValidations userValidations;
-
- @Mock
- private ComponentsUtils componentsUtils;
+ @Mock private AuditCassandraDao cassandraDao;
+ @Mock private UserValidations userValidations;
+ @Mock private ComponentsUtils componentsUtils;
@Before
public void setUp() {
businessLogic.setComponentsUtils(componentsUtils);
user = new User();
- uId = "userId";
- ditributionId = "did";
+ userId = "userId";
+ distributionId = "did";
serviceId = "serviceId";
- when(userValidations.validateUserExists(Mockito.eq(uId)))
+ when(userValidations.validateUserExists(Mockito.eq(userId)))
.thenReturn(user);
}
@Test
public void testGetListOfDistribution_givenInvalidDistributionId_thenReturnsError() {
- when(cassandraDao.getListOfDistributionStatuses(ditributionId))
+ when(cassandraDao.getListOfDistributionStatuses(distributionId))
.thenReturn(Either.right(ActionStatus.DISTRIBUTION_NOT_FOUND));
- assertTrue(businessLogic.getListOfDistributionStatus(ditributionId, uId).isRight());
+ assertTrue(businessLogic.getListOfDistributionStatus(distributionId, userId).isRight());
}
@Test
DistributionStatusEvent event = new DistributionStatusEvent();
distributionEvents.add(event);
- when(cassandraDao.getListOfDistributionStatuses(ditributionId))
+ when(cassandraDao.getListOfDistributionStatuses(distributionId))
.thenReturn(Either.left(distributionEvents));
- Either<DistributionStatusListResponse, ResponseFormat> result = businessLogic.getListOfDistributionStatus(ditributionId, uId);
+ Either<DistributionStatusListResponse, ResponseFormat> result = businessLogic.getListOfDistributionStatus(distributionId, userId);
assertTrue(result.isLeft());
assertEquals(1, result.left().value().getDistributionStatusList().size());
when(cassandraDao.getServiceDistributionStatusesList(serviceId))
.thenReturn(Either.right(ActionStatus.DISTRIBUTION_NOT_FOUND));
- assertTrue(businessLogic.getListOfDistributionServiceStatus(serviceId, uId).isRight());
+ assertTrue(businessLogic.getListOfDistributionServiceStatus(serviceId, userId).isRight());
}
@Test
event1Fields.put("DID", "event1");
event1Fields.put("ACTION", "DRequest");
event1Fields.put("STATUS", "200");
- event1Fields.put("MODIFIER", uId);
+ event1Fields.put("MODIFIER", userId);
+
+ event2Fields.put("DID", "event2");
+ event2Fields.put("ACTION", "DNotify");
+ event2Fields.put("STATUS", "200");
+ event2Fields.put("MODIFIER", userId);
+
+ event1.setFields(event1Fields);
+ event2.setFields(event2Fields);
+
+ serviceEvents.add(event1);
+ serviceEvents.add(event2);
+
+ when(cassandraDao.getServiceDistributionStatusesList(serviceId))
+ .thenReturn(Either.left(serviceEvents));
+
+ assertTrue(businessLogic.getListOfDistributionServiceStatus(serviceId, userId).isLeft());
+ }
+
+ @Test
+ public void testGetDistributionServiceStatus_givenLongTimeStamp_thenReturnsSuccessful() {
+
+ Map<String, Object> event1Fields = new HashMap<>();
+ event1Fields.put("DID", "event1");
+ event1Fields.put("ACTION", "DRequest");
+ event1Fields.put("STATUS", "200");
+ event1Fields.put("MODIFIER", userId);
+ event1Fields.put(AuditingFieldsKey.AUDIT_TIMESTAMP.getDisplayName(), "2024-04-05 07:29:10.735 UTC");
+ Map<String, Object> event2Fields = new HashMap<>();
event2Fields.put("DID", "event2");
event2Fields.put("ACTION", "DNotify");
event2Fields.put("STATUS", "200");
- event2Fields.put("MODIFIER", uId);
+ event2Fields.put("MODIFIER", userId);
+ event1Fields.put(AuditingFieldsKey.AUDIT_TIMESTAMP.getDisplayName(), 1712645750L);
+ List<AuditingGenericEvent> serviceEvents = new ArrayList<>();
+ AuditingGenericEvent event1 = new AuditingGenericEvent();
+ AuditingGenericEvent event2 = new AuditingGenericEvent();
event1.setFields(event1Fields);
event2.setFields(event2Fields);
when(cassandraDao.getServiceDistributionStatusesList(serviceId))
.thenReturn(Either.left(serviceEvents));
- assertTrue(businessLogic.getListOfDistributionServiceStatus(serviceId, uId).isLeft());
+ assertTrue(businessLogic.getListOfDistributionServiceStatus(serviceId, userId).isLeft());
}
}
\ No newline at end of file
-FROM onap/integration-java11:12.0.0
+FROM onap/integration-java11:10.0.0
USER root
ARG JETTY_FOLDER=/app/jetty
ruby-dev \
libffi-dev \
libxml2-dev && \
- gem update --system --no-document && \
gem install --no-update-sources public_suffix:4.0.7 multipart-post:2.2.0 etc:1.3.0 bundler:2.3.26 chef:13.8.5 berkshelf:6.3.1 io-console:0.4.6 webrick --no-document && \
gem cleanup && \
apk update
-FROM onap/integration-java11:12.0.0
+FROM onap/integration-java11:10.0.0
USER root
ARG JETTY_FOLDER=/app/jetty
libffi-dev \
libxml2-dev \
libressl-dev && \
- gem update --system --no-document && \
gem install --no-update-sources public_suffix:4.0.7 multipart-post:2.2.0 etc:1.3.0 bundler:2.3.26 chef:13.8.5 berkshelf:6.3.1 io-console:0.4.6 webrick --no-document && \
gem cleanup && \
apk update
-FROM onap/integration-java11:12.0.0
+FROM onap/integration-java11:10.0.0
USER root
ARG JETTY_FOLDER=/app/jetty
ruby-dev \
libffi-dev \
libxml2-dev && \
- gem update --system --no-document && \
gem install --no-update-sources public_suffix:4.0.7 multipart-post:2.2.0 etc:1.3.0 bundler:2.3.26 chef:13.8.5 berkshelf:6.3.1 io-console:0.4.6 webrick --no-document && \
gem cleanup && \
apk update