diff --git a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelper.java b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelper.java index 4c96df8917..dc7dd488e9 100644 --- a/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelper.java +++ b/multiapps-controller-core/src/main/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelper.java @@ -14,6 +14,7 @@ public class MtaArchiveHelper { // Attribute names: + private static final String ATTR_CREATED_BY = "Created-By"; public static final String ATTR_MTA_RESOURCE = "MTA-Resource"; public static final String ATTR_MTA_REQUIRES_DEPENDENCY = "MTA-Requires"; public static final String ATTR_MTA_MODULE = "MTA-Module"; @@ -23,6 +24,10 @@ public class MtaArchiveHelper { private Map mtaArchiveResources; private Map mtaArchiveModules; + + public String getCreatedBy() { + return this.manifest.getMainAttributes().getValue(ATTR_CREATED_BY); + } private Map mtaArchiveRequiresDependencies; public MtaArchiveHelper(Manifest manifest) { diff --git a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelperTest.java b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelperTest.java index 6c0235c6c6..73f38dfba9 100644 --- a/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelperTest.java +++ b/multiapps-controller-core/src/test/java/org/cloudfoundry/multiapps/controller/core/helpers/MtaArchiveHelperTest.java @@ -23,6 +23,7 @@ import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; class MtaArchiveHelperTest { @@ -61,25 +62,34 @@ void testDependencies(String mtarLocation, String deploymentDescriptorLocation) @Test void testGetResourceFileAttributes() throws IOException { - Manifest manifest = getManifest(); + Manifest manifest = getManifest("mta-archive-helper-manifest.txt"); helper = new MtaArchiveHelper(manifest); Map> result = helper.getResourceFileAttributes(); assertEquals(Map.of("config.json", List.of("parameters-service", "parameters-service-2")), result); } - private Manifest getManifest() throws IOException { - InputStream fileInputStream = getClass().getResourceAsStream("mta-archive-helper-manifest.txt"); - return new Manifest(fileInputStream); - } - @Test void getRequiresDependenciesFileAttributes() throws IOException { - Manifest manifest = getManifest(); + Manifest manifest = getManifest("mta-archive-helper-manifest.txt"); helper = new MtaArchiveHelper(manifest); Map> result = helper.getRequiresDependenciesFileAttributes(); assertEquals(Map.of("config-bind.json", List.of("anatz/my-required-application", "anatz/my-required-application-2")), result); } + @Test + void getCreatedByAttribute() throws IOException { + Manifest manifest = getManifest("mta-archive-helper-manifest-with-created-by.txt"); + helper = new MtaArchiveHelper(manifest); + assertEquals("SAP Application Archive Builder 1.2.34", helper.getCreatedBy()); + } + + @Test + void getCreatedByAttributeWithNull() throws IOException { + Manifest manifest = getManifest("mta-archive-helper-manifest-with-created-by-null.txt"); + helper = new MtaArchiveHelper(manifest); + assertNull(helper.getCreatedBy()); + } + private void initializeParameters(String mtarLocation, String deploymentDescriptorLocation) { InputStream stream = getClass().getResourceAsStream(mtarLocation); helper = new MtaArchiveHelper(ArchiveHandler.getManifest(stream, ApplicationConfiguration.DEFAULT_MAX_MANIFEST_SIZE)); @@ -91,6 +101,11 @@ private void initializeParameters(String mtarLocation, String deploymentDescript helper.init(); } + private Manifest getManifest(String file) throws IOException { + InputStream fileInputStream = getClass().getResourceAsStream(file); + return new Manifest(fileInputStream); + } + private Set getResourcesNamesFromDescriptor() { return descriptor.getResources() .stream() diff --git a/multiapps-controller-core/src/test/resources/org/cloudfoundry/multiapps/controller/core/helpers/mta-archive-helper-manifest-with-created-by-null.txt b/multiapps-controller-core/src/test/resources/org/cloudfoundry/multiapps/controller/core/helpers/mta-archive-helper-manifest-with-created-by-null.txt new file mode 100644 index 0000000000..59499bce4a --- /dev/null +++ b/multiapps-controller-core/src/test/resources/org/cloudfoundry/multiapps/controller/core/helpers/mta-archive-helper-manifest-with-created-by-null.txt @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 + diff --git a/multiapps-controller-core/src/test/resources/org/cloudfoundry/multiapps/controller/core/helpers/mta-archive-helper-manifest-with-created-by.txt b/multiapps-controller-core/src/test/resources/org/cloudfoundry/multiapps/controller/core/helpers/mta-archive-helper-manifest-with-created-by.txt new file mode 100644 index 0000000000..452983c993 --- /dev/null +++ b/multiapps-controller-core/src/test/resources/org/cloudfoundry/multiapps/controller/core/helpers/mta-archive-helper-manifest-with-created-by.txt @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Created-By: SAP Application Archive Builder 1.2.34 diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/dynatrace/DynatraceProcessEvent.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/dynatrace/DynatraceProcessEvent.java index f056caa027..1de0c87b2e 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/dynatrace/DynatraceProcessEvent.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/dynatrace/DynatraceProcessEvent.java @@ -1,5 +1,6 @@ package org.cloudfoundry.multiapps.controller.process.dynatrace; +import org.cloudfoundry.multiapps.common.Nullable; import org.immutables.value.Value; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; @@ -12,6 +13,9 @@ public abstract class DynatraceProcessEvent implements DyntraceProcessEntity { public abstract EventType getEventType(); + @Nullable + public abstract String getCreatedBy(); + public enum EventType { STARTED, FINISHED, FAILED; diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/listeners/EndProcessListener.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/listeners/EndProcessListener.java index 574ba2cfc7..4a00b41734 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/listeners/EndProcessListener.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/listeners/EndProcessListener.java @@ -61,6 +61,7 @@ private void publishDynatraceEvent(DelegateExecution execution, ProcessType proc .processId(VariableHandling.get(execution, Variables.CORRELATION_ID)) .mtaId(VariableHandling.get(execution, Variables.MTA_ID)) + .createdBy(VariableHandling.get(execution, Variables.MTA_ARCHIVE_CREATED_BY)) .spaceId(VariableHandling.get(execution, Variables.SPACE_GUID)) .eventType(DynatraceProcessEvent.EventType.FINISHED) .processType(processType) diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/ProcessMtaArchiveStep.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/ProcessMtaArchiveStep.java index 66fa6ab484..a72b113fd9 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/ProcessMtaArchiveStep.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/steps/ProcessMtaArchiveStep.java @@ -60,7 +60,7 @@ private void processApplicationArchive(ProcessContext context, String appArchive context.getRequiredVariable(Variables.SPACE_GUID), appArchiveId); context.setVariable(Variables.ARCHIVE_ENTRIES_POSITIONS, archiveEntriesWithStreamPositions); MtaArchiveHelper helper = createMtaArchiveHelperFromManifest(context, appArchiveId, archiveEntriesWithStreamPositions); - + context.setVariable(Variables.MTA_ARCHIVE_CREATED_BY, helper.getCreatedBy()); DeploymentDescriptor deploymentDescriptor = extractDeploymentDescriptor(context, appArchiveId, archiveEntriesWithStreamPositions); if (context.getVariable(Variables.SHOULD_BACKUP_PREVIOUS_VERSION)) { diff --git a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/variables/Variables.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/variables/Variables.java index f8ce64e6b9..bd9e78fc20 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/variables/Variables.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/variables/Variables.java @@ -338,6 +338,10 @@ public interface Variables { .type(Variable.typeReference(MtaArchiveElements.class)) .defaultValue(new MtaArchiveElements()) .build(); + Variable MTA_ARCHIVE_CREATED_BY = ImmutableSimpleVariable. builder() + .name("mtaArchiveCreatedBy") + .defaultValue(null) + .build(); Variable SERVICE_TO_PROCESS = ImmutableJsonStringVariable. builder() .name("serviceToProcess") .type(Variable.typeReference(