From 4fcdad7619c84e7a418305c5b18e8dcef2c54286 Mon Sep 17 00:00:00 2001 From: Boyan Velinov Date: Tue, 14 Oct 2025 15:38:01 +0300 Subject: [PATCH] Add Dynatrace monitoring of MTA created by --- .vscode/settings.json | 2 + .../src/main/resources/mtarest.yaml | 181 ------------------ .../core/helpers/MtaArchiveHelper.java | 4 + .../dynatrace/DynatraceProcessEvent.java | 4 + .../process/flowable/AbortProcessAction.java | 2 + .../process/listeners/EndProcessListener.java | 1 + .../process/steps/ProcessMtaArchiveStep.java | 2 +- .../process/variables/Variables.java | 4 + 8 files changed, 18 insertions(+), 182 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000..7a73a41bfd --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/multiapps-controller-api/src/main/resources/mtarest.yaml b/multiapps-controller-api/src/main/resources/mtarest.yaml index 2fa76ac907..bbc4cb40ec 100644 --- a/multiapps-controller-api/src/main/resources/mtarest.yaml +++ b/multiapps-controller-api/src/main/resources/mtarest.yaml @@ -37,127 +37,6 @@ paths: $ref: "#/definitions/Info" security: - oauth2: [] - /api/v1/spaces/{spaceGuid}/files: - get: - summary: "" - description: "Retrieves all Multi-Target Application files " - operationId: "getMtaFiles" - produces: - - "application/json" - parameters: - - name: "spaceGuid" - in: "path" - description: "GUID of space with mtas" - required: true - type: "string" - - name: "namespace" - in: "query" - description: "Filter mtas by namespace" - required: false - type: "string" - responses: - 200: - description: "OK" - schema: - type: "array" - items: - $ref: "#/definitions/FileMetadata" - security: - - oauth2: [] - post: - summary: "" - description: "Uploads a Multi Target Application archive or an Extension Descriptor " - operationId: "uploadMtaFile" - consumes: - - "multipart/form-data" - produces: - - "application/json" - parameters: - - name: "spaceGuid" - in: "path" - description: "GUID of space you wish to deploy in" - required: true - type: "string" - - name: "namespace" - in: "query" - description: "file namespace" - required: false - type: "string" - responses: - 200: - description: "successful operation" - schema: - $ref: "#/definitions/FileMetadata" - 201: - description: "Created" - schema: - $ref: "#/definitions/FileMetadata" - security: - - oauth2: [] - /api/v1/spaces/{spaceGuid}/files/async: - post: - summary: "" - description: "Uploads a Multi Target Application archive or an Extension Descriptor\ - \ from a remote endpoint" - operationId: "startUploadFromUrl" - consumes: - - "application/json" - parameters: - - name: "spaceGuid" - in: "path" - description: "GUID of space you wish to deploy in" - required: true - type: "string" - - name: "namespace" - in: "query" - description: "file namespace" - required: false - type: "string" - - in: "body" - name: "body" - description: "URL reference to a remote file" - required: false - schema: - $ref: "#/definitions/FileUrl" - responses: - 202: - description: "Accepted" - security: - - oauth2: [] - /api/v1/spaces/{spaceGuid}/files/jobs/{jobId}: - get: - summary: "" - description: "Gets the status of an async upload job" - operationId: "getAsyncUploadJob" - produces: - - "application/json" - parameters: - - name: "spaceGuid" - in: "path" - description: "GUID of space you wish to deploy in" - required: true - type: "string" - - name: "namespace" - in: "query" - description: "file namespace" - required: false - type: "string" - - name: "jobId" - in: "path" - description: "ID of the upload job" - required: true - type: "string" - responses: - 200: - description: "OK" - schema: - $ref: "#/definitions/AsyncUploadResult" - 201: - description: "Created" - schema: - $ref: "#/definitions/AsyncUploadResult" - security: - - oauth2: [] /api/v1/spaces/{spaceGuid}/mtas: get: summary: "" @@ -403,66 +282,6 @@ securityDefinitions: flow: "password" scopes: {} definitions: - AsyncUploadResult: - type: "object" - properties: - status: - type: "string" - readOnly: true - enum: - - "RUNNING" - - "FINISHED" - - "ERROR" - bytes_processed: - type: "integer" - format: "int64" - readOnly: true - error: - type: "string" - readOnly: true - file: - readOnly: true - $ref: "#/definitions/FileMetadata" - mta_id: - type: "string" - readOnly: true - client_actions: - type: "array" - readOnly: true - items: - type: "string" - enum: - - "RETRY_UPLOAD" - FileMetadata: - type: "object" - properties: - id: - type: "string" - readOnly: true - name: - type: "string" - readOnly: true - size: - type: "integer" - readOnly: true - digest: - type: "string" - readOnly: true - digestAlgorithm: - type: "string" - readOnly: true - space: - type: "string" - readOnly: true - namespace: - type: "string" - readOnly: true - FileUrl: - type: "object" - properties: - file_url: - type: "string" - readOnly: true Info: type: "object" properties: 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..9661722d9e 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 @@ -23,6 +23,10 @@ public class MtaArchiveHelper { private Map mtaArchiveResources; private Map mtaArchiveModules; + + public String getCreatedBy() { + return this.manifest.getMainAttributes().getValue("Created-By"); + } private Map mtaArchiveRequiresDependencies; public MtaArchiveHelper(Manifest manifest) { 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/flowable/AbortProcessAction.java b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/flowable/AbortProcessAction.java index 810d2fc2ad..1e61cda4bd 100644 --- a/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/flowable/AbortProcessAction.java +++ b/multiapps-controller-process/src/main/java/org/cloudfoundry/multiapps/controller/process/flowable/AbortProcessAction.java @@ -22,6 +22,8 @@ import org.cloudfoundry.multiapps.controller.process.dynatrace.DynatracePublisher; import org.cloudfoundry.multiapps.controller.process.dynatrace.ImmutableDynatraceProcessEvent; import org.cloudfoundry.multiapps.controller.process.util.ProcessConflictPreventer; +import org.cloudfoundry.multiapps.controller.process.variables.VariableHandling; +import org.cloudfoundry.multiapps.controller.process.variables.Variables; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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..7257355eb7 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 = ImmutableJsonStringVariable. builder() + .name("mtaArchiveCreatedBy") + .defaultValue(null) + .build(); Variable SERVICE_TO_PROCESS = ImmutableJsonStringVariable. builder() .name("serviceToProcess") .type(Variable.typeReference(