From 31d8214584e6659e2c389ab346471d9bf1dd4de2 Mon Sep 17 00:00:00 2001 From: Kishore Reddy Dwaram Date: Thu, 1 Oct 2020 12:21:43 -0400 Subject: Updated logger values and metrics logs code changes Issue-ID: PORTAL-1008 Signed-off-by: Kishore Reddy Dwaram Change-Id: I1bcb90b214f87b5259c6961624f5b6c1e5dbafb7 (cherry picked from commit 27f48f254ee43cbf1da3cfb02853a8fede2b6315) --- .../portal/logging/aop/EPEELFLoggerAdvice.java | 57 ++++++++++++++-------- ecomp-portal-BE-os/src/main/resources/logback.xml | 11 +++-- 2 files changed, 43 insertions(+), 25 deletions(-) diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java index 4c67429b..b2ef2bc0 100644 --- a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java +++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java @@ -54,6 +54,7 @@ import org.onap.portalsdk.core.exception.SessionExpiredException; import org.onap.portalsdk.core.logging.format.AlarmSeverityEnum; import org.onap.portalsdk.core.logging.format.AuditLogFormatter; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; +import org.onap.portalsdk.core.logging.logic.LoggerProperties; import org.onap.portalsdk.core.util.SystemProperties; import org.onap.portalsdk.core.util.SystemProperties.SecurityEventTypeEnum; import org.onap.portalsdk.core.web.support.UserUtils; @@ -108,6 +109,7 @@ public class EPEELFLoggerAdvice { * @return Object array */ public Object[] before(SecurityEventTypeEnum securityEventType, Object[] args, Object[] passOnArgs) { + try { String className = ""; if (passOnArgs.length > 0 && passOnArgs[0] != null) className = passOnArgs[0].toString(); @@ -117,6 +119,7 @@ public class EPEELFLoggerAdvice { // Initialize Request defaults only for controller methods. MDC.put(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP, getCurrentDateTimeUTC()); + MDC.put(EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP, getCurrentDateTimeUTC()); MDC.put(EPCommonSystemProperties.TARGET_ENTITY, EPCommonSystemProperties.ECOMP_PORTAL_BE); MDC.put(EPCommonSystemProperties.TARGET_SERVICE_NAME, methodName); if (MDC.get(Configuration.MDC_KEY_REQUEST_ID) == null||MDC.get(Configuration.MDC_KEY_REQUEST_ID).isEmpty()){ @@ -124,31 +127,24 @@ public class EPEELFLoggerAdvice { MDC.put(Configuration.MDC_KEY_REQUEST_ID, requestId); } MDC.put(EPCommonSystemProperties.PARTNER_NAME, "Unknown"); - MDC.put(Configuration.MDC_SERVICE_NAME, EPCommonSystemProperties.ECOMP_PORTAL_BE); - - if (securityEventType != null) { - MDC.put(className + methodName + EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, - getCurrentDateTimeUTC()); - HttpServletRequest req = null; - if (args.length > 0 && args[0] != null && args[0] instanceof HttpServletRequest) { - req = (HttpServletRequest) args[0]; - this.setHttpRequestBasedDefaultsIntoGlobalLoggingContext(req, securityEventType, methodName); - } - } EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className); - logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#after: finished {}", methodName); - // add the metrics log - logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed."); + MDC.put(SystemProperties.STATUS_CODE, "INPROGRESS"); // Log security message, if necessary if (securityEventType != null) { + MDC.put(className + methodName + EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, + getCurrentDateTimeUTC()); MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,getCurrentDateTimeUTC()); MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, getCurrentDateTimeUTC()); this.calculateDateTimeDifference(MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP)); - MDC.put(EPCommonSystemProperties.STATUS_CODE, "INPROGRESS"); MDC.put("CustomField1", "ENTRY"); MDC.put("CustomField2", "InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + HttpServletRequest req = null; + if (args.length > 0 && args[0] != null && args[0] instanceof HttpServletRequest) { + req = (HttpServletRequest) args[0]; + this.setHttpRequestBasedDefaultsIntoGlobalLoggingContext(req, securityEventType, methodName); + } try { MDC.put(Configuration.MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName()); } catch (Exception e) { @@ -173,10 +169,21 @@ public class EPEELFLoggerAdvice { MDC.remove(EPCommonSystemProperties.PARTNER_NAME); MDC.remove(Configuration.MDC_SERVICE_NAME); } + logger.debug(EELFLoggerDelegate.debugLogger, "{} was invoked.", methodName); MDC.remove(Configuration.MDC_SERVER_FQDN); + } else { + MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, getCurrentDateTimeUTC()); + this.calculateDateTimeDifference(MDC.get(SystemProperties.METRICSLOG_BEGIN_TIMESTAMP),MDC.get(SystemProperties.METRICSLOG_END_TIMESTAMP)); + MDC.put("CustomField1", "INVOKE"); + } + MDC.put("CustomField2", " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is started."); logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#before: entering {}", methodName); + } catch (Exception e) { + adviceLogger.error(EELFLoggerDelegate.errorLogger, "before failed", e); + } return new Object[] { "" }; } @@ -191,6 +198,7 @@ public class EPEELFLoggerAdvice { */ public void after(SecurityEventTypeEnum securityEventType, String statusCode, String responseCode, Object[] args, Object[] returnArgs, Object[] passOnArgs) { + try { String className = ""; if (passOnArgs.length > 0 && passOnArgs[0] != null) className = passOnArgs[0].toString(); @@ -216,8 +224,6 @@ public class EPEELFLoggerAdvice { MDC.put(EPCommonSystemProperties.PARTNER_NAME, "Unknown"); } - MDC.put(Configuration.MDC_SERVICE_NAME, EPCommonSystemProperties.ECOMP_PORTAL_BE); - MDC.put(EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP, MDC.get(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP)); @@ -248,9 +254,7 @@ public class EPEELFLoggerAdvice { } EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className); - logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#after: finished {}", methodName); - // add the metrics log - logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed."); + // Log security message, if necessary if (securityEventType != null) { @@ -296,7 +300,15 @@ public class EPEELFLoggerAdvice { MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP); MDC.remove(EPCommonSystemProperties.RESPONSE_CODE); - } + } else{ + MDC.put(SystemProperties.CUSTOM_FIELD1, "INVOKE-RETURN"); + } + + MDC.put(SystemProperties.STATUS_CODE, "COMPLETE"); + MDC.put("CustomField2", " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#after: finished {}", methodName); + // add the metrics log + logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed."); MDC.remove("CustomField1"); MDC.remove("CustomField2"); MDC.remove(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP); @@ -305,6 +317,9 @@ public class EPEELFLoggerAdvice { MDC.remove(EPCommonSystemProperties.MDC_TIMER); MDC.remove(EPCommonSystemProperties.TARGET_ENTITY); MDC.remove(EPCommonSystemProperties.TARGET_SERVICE_NAME); + } catch (Exception e) { + adviceLogger.error(EELFLoggerDelegate.errorLogger, "after failed", e); + } } diff --git a/ecomp-portal-BE-os/src/main/resources/logback.xml b/ecomp-portal-BE-os/src/main/resources/logback.xml index 5cd2e287..da73aa08 100644 --- a/ecomp-portal-BE-os/src/main/resources/logback.xml +++ b/ecomp-portal-BE-os/src/main/resources/logback.xml @@ -44,6 +44,9 @@ + + + @@ -72,7 +75,7 @@ value="%X{MetricsLogBeginTimestamp}|%X{MetricsLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{TargetVisualEntity}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n" /> + value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{ErrorCategory}|%X{ErrorCode}|%X{ErrorDescription}| %msg%n" /> @@ -279,15 +282,15 @@ --> - + - + - + -- cgit 1.2.3-korg From adcc2c5cfa252e8e80db7157adad691008a44637 Mon Sep 17 00:00:00 2001 From: Sandeep Shah Date: Sat, 3 Oct 2020 23:02:41 -0500 Subject: Update mariaDB version in portal-db Dockerfile Update mariadb version to 10.5.5 Issue-ID: PORTAL-1027 Signed-off-by: SandeepLinux Change-Id: I248affaafcdf012d74fd5e2bfe798051067e7f2b (cherry picked from commit 8531f166f8fcb0f2b69c86a2fc7c2b2df47fa561) --- deliveries/Dockerfile.mariadb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deliveries/Dockerfile.mariadb b/deliveries/Dockerfile.mariadb index 2748f874..7310585b 100644 --- a/deliveries/Dockerfile.mariadb +++ b/deliveries/Dockerfile.mariadb @@ -1,4 +1,4 @@ -FROM mariadb:latest +FROM mariadb:10.5.5 ARG DB_SCRIPT_DIR=${DB_SCRIPT_DIR} -- cgit 1.2.3-korg From db8cae25abf7a3cb2ba5882109176affb9e65bc4 Mon Sep 17 00:00:00 2001 From: Kishore Reddy Dwaram Date: Thu, 1 Oct 2020 17:47:19 -0400 Subject: Updated code for metrics logs Issue-ID: PORTAL-1008 Signed-off-by: Kishore Reddy Dwaram Change-Id: I10b4bbeba1c4bf119211d41886e52fa44a22ee4f (cherry picked from commit 6a2eb370ce70dc5f2ee5a401e00b52071ddb0b8e) --- .../portal/logging/aop/EPEELFLoggerAdvice.java | 26 +++++++++------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java index b2ef2bc0..d45adee2 100644 --- a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java +++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java @@ -173,13 +173,12 @@ public class EPEELFLoggerAdvice { MDC.remove(Configuration.MDC_SERVER_FQDN); } else { - MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, getCurrentDateTimeUTC()); - this.calculateDateTimeDifference(MDC.get(SystemProperties.METRICSLOG_BEGIN_TIMESTAMP),MDC.get(SystemProperties.METRICSLOG_END_TIMESTAMP)); - MDC.put("CustomField1", "INVOKE"); - + MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, getCurrentDateTimeUTC()); + this.calculateDateTimeDifference(MDC.get(SystemProperties.METRICSLOG_BEGIN_TIMESTAMP),MDC.get(SystemProperties.METRICSLOG_END_TIMESTAMP)); + MDC.put("CustomField1", "INVOKE"); + MDC.put("CustomField2", " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is started."); } - MDC.put("CustomField2", " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); - logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is started."); logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#before: entering {}", methodName); } catch (Exception e) { adviceLogger.error(EELFLoggerDelegate.errorLogger, "before failed", e); @@ -252,10 +251,9 @@ public class EPEELFLoggerAdvice { MDC.put(EPCommonSystemProperties.RESPONSE_CODE, externalAPIResponseCode); MDC.put(EPCommonSystemProperties.STATUS_CODE, "ERROR"); } - + MDC.put(SystemProperties.STATUS_CODE, "COMPLETE"); EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className); - // Log security message, if necessary if (securityEventType != null) { MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP, @@ -300,15 +298,13 @@ public class EPEELFLoggerAdvice { MDC.remove(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP); MDC.remove(EPCommonSystemProperties.RESPONSE_CODE); - } else{ - MDC.put(SystemProperties.CUSTOM_FIELD1, "INVOKE-RETURN"); - } - - MDC.put(SystemProperties.STATUS_CODE, "COMPLETE"); + } else { + MDC.put(SystemProperties.CUSTOM_FIELD1, "INVOKE-RETURN"); MDC.put("CustomField2", " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + // add the metrics log + logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed."); + } logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#after: finished {}", methodName); - // add the metrics log - logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed."); MDC.remove("CustomField1"); MDC.remove("CustomField2"); MDC.remove(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP); -- cgit 1.2.3-korg From 10d101e44b4164744d381946893cd71a78353631 Mon Sep 17 00:00:00 2001 From: Kishore Reddy Dwaram Date: Fri, 2 Oct 2020 16:58:46 -0400 Subject: Updated code for audit logs Issue-ID: PORTAL-1008 Signed-off-by: Kishore Reddy Dwaram Change-Id: I31319a5e528b81306534bca6ff89050c40580034 (cherry picked from commit 7ee79c657d68a412e36363aa782881f0edb10115) --- .../portal/logging/aop/EPEELFLoggerAdvice.java | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java index d45adee2..43ea4c3f 100644 --- a/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java +++ b/ecomp-portal-BE-common/src/main/java/org/onap/portalapp/portal/logging/aop/EPEELFLoggerAdvice.java @@ -129,7 +129,7 @@ public class EPEELFLoggerAdvice { MDC.put(EPCommonSystemProperties.PARTNER_NAME, "Unknown"); EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className); - MDC.put(SystemProperties.STATUS_CODE, "INPROGRESS"); + MDC.put(EPCommonSystemProperties.STATUS_CODE, "INPROGRESS"); // Log security message, if necessary if (securityEventType != null) { @@ -138,8 +138,6 @@ public class EPEELFLoggerAdvice { MDC.put(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP,getCurrentDateTimeUTC()); MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, getCurrentDateTimeUTC()); this.calculateDateTimeDifference(MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP),MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP)); - MDC.put("CustomField1", "ENTRY"); - MDC.put("CustomField2", "InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); HttpServletRequest req = null; if (args.length > 0 && args[0] != null && args[0] instanceof HttpServletRequest) { req = (HttpServletRequest) args[0]; @@ -151,6 +149,8 @@ public class EPEELFLoggerAdvice { adviceLogger.error(EELFLoggerDelegate.errorLogger, " while setting the IP address ", e); } + MDC.put(SystemProperties.CUSTOM_FIELD1, "ENTRY"); + MDC.put(SystemProperties.CUSTOM_FIELD2, "InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); this.logSecurityMessage(logger, securityEventType, methodName); // Outgoing & LDAP messages are part of Incoming requests so, @@ -175,8 +175,8 @@ public class EPEELFLoggerAdvice { } else { MDC.put(SystemProperties.METRICSLOG_END_TIMESTAMP, getCurrentDateTimeUTC()); this.calculateDateTimeDifference(MDC.get(SystemProperties.METRICSLOG_BEGIN_TIMESTAMP),MDC.get(SystemProperties.METRICSLOG_END_TIMESTAMP)); - MDC.put("CustomField1", "INVOKE"); - MDC.put("CustomField2", " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + MDC.put(SystemProperties.CUSTOM_FIELD1, "INVOKE"); + MDC.put(SystemProperties.CUSTOM_FIELD2, " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is started."); } logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#before: entering {}", methodName); @@ -251,7 +251,7 @@ public class EPEELFLoggerAdvice { MDC.put(EPCommonSystemProperties.RESPONSE_CODE, externalAPIResponseCode); MDC.put(EPCommonSystemProperties.STATUS_CODE, "ERROR"); } - MDC.put(SystemProperties.STATUS_CODE, "COMPLETE"); + MDC.put(EPCommonSystemProperties.STATUS_CODE, "COMPLETE"); EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(className); // Log security message, if necessary @@ -261,8 +261,8 @@ public class EPEELFLoggerAdvice { MDC.put(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP, getCurrentDateTimeUTC()); this.calculateDateTimeDifference(MDC.get(EPCommonSystemProperties.AUDITLOG_BEGIN_TIMESTAMP), MDC.get(EPCommonSystemProperties.AUDITLOG_END_TIMESTAMP)); - MDC.put("CustomField1", "EXIT"); - MDC.put("CustomField2", "InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + MDC.put(SystemProperties.CUSTOM_FIELD1, "EXIT"); + MDC.put(SystemProperties.CUSTOM_FIELD2, "InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); try { MDC.put(Configuration.MDC_SERVER_FQDN, InetAddress.getLocalHost().getCanonicalHostName()); } catch (Exception e) { @@ -300,13 +300,13 @@ public class EPEELFLoggerAdvice { } else { MDC.put(SystemProperties.CUSTOM_FIELD1, "INVOKE-RETURN"); - MDC.put("CustomField2", " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); + MDC.put(SystemProperties.CUSTOM_FIELD2, " InvocationID="+MDC.get(Configuration.MDC_KEY_REQUEST_ID)); // add the metrics log logger.info(EELFLoggerDelegate.metricsLogger, methodName + " operation is completed."); } logger.debug(EELFLoggerDelegate.debugLogger, "EPEELFLoggerAdvice#after: finished {}", methodName); - MDC.remove("CustomField1"); - MDC.remove("CustomField2"); + MDC.remove(SystemProperties.CUSTOM_FIELD1); + MDC.remove(SystemProperties.CUSTOM_FIELD2); MDC.remove(className + methodName + EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP); MDC.remove(EPCommonSystemProperties.METRICSLOG_BEGIN_TIMESTAMP); MDC.remove(EPCommonSystemProperties.METRICSLOG_END_TIMESTAMP); -- cgit 1.2.3-korg From 14ec143fc659ff2ccc63a157765ccb0a707f4700 Mon Sep 17 00:00:00 2001 From: Kishore Reddy Dwaram Date: Tue, 6 Oct 2020 14:19:04 -0400 Subject: Releasing 3.4.0 Docker Images Issue-ID: PORTAL-1023 Signed-off-by: Kishore Reddy Dwaram Change-Id: I10f47ddb6c9dcbe0dd3a93ae226eab2c24bbb214 --- releases/3.4.0-container-portal-docker.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 releases/3.4.0-container-portal-docker.yaml diff --git a/releases/3.4.0-container-portal-docker.yaml b/releases/3.4.0-container-portal-docker.yaml new file mode 100644 index 00000000..101733d8 --- /dev/null +++ b/releases/3.4.0-container-portal-docker.yaml @@ -0,0 +1,13 @@ +distribution_type: container +container_release_tag: 3.4.0 +project: portal +ref: 10d101e44b4164744d381946893cd71a78353631 +containers: + - name: portal-app + version: 3.4.0-STAGING-latest + - name: portal-sdk + version: 3.4.0-STAGING-latest + - name: portal-wms + version: 3.4.0-STAGING-latest + - name: portal-db + version: 3.4.0-STAGING-latest \ No newline at end of file -- cgit 1.2.3-korg