From 6e515cbc3c93e44cb332a8c851e599b3cf6aaa59 Mon Sep 17 00:00:00 2001 From: Abhishek Katiyar Date: Wed, 22 Jul 2020 19:30:42 +0530 Subject: [PATCH 1/3] [infra-426] | Abhishek | Add support to publish events --- .../events/KubeApplySuccessfulEvent.java | 17 +++++++++++++++++ .../portal/events/PortalEventListener.java | 16 ++++++++++++++++ .../portal/events/PortalEventPublisher.java | 18 ++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java create mode 100644 src/main/java/com/navi/infra/portal/events/PortalEventListener.java create mode 100644 src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java diff --git a/src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java b/src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java new file mode 100644 index 00000000..0b320012 --- /dev/null +++ b/src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java @@ -0,0 +1,17 @@ +package com.navi.infra.portal.events; + +public class KubeApplySuccessfulEvent { + private final String cluster; + private final String kubeObject; + private final String name; + + public KubeApplySuccessfulEvent(String cluster, String kubeObjectType, String name){ + this.cluster=cluster; + this.kubeObject=kubeObjectType; + this.name=name; + } + + public String toString() { + return String.format("%s %s updated in %s",name, kubeObject, cluster); + } +} diff --git a/src/main/java/com/navi/infra/portal/events/PortalEventListener.java b/src/main/java/com/navi/infra/portal/events/PortalEventListener.java new file mode 100644 index 00000000..0aa77c82 --- /dev/null +++ b/src/main/java/com/navi/infra/portal/events/PortalEventListener.java @@ -0,0 +1,16 @@ +package com.navi.infra.portal.events; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +public class PortalEventListener { + + @EventListener + public void handleKubeUpdateEvent(KubeApplySuccessfulEvent kubeApplySuccessfulEvent){ + log.info(kubeApplySuccessfulEvent.toString()); + } + +} diff --git a/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java b/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java new file mode 100644 index 00000000..cf550e54 --- /dev/null +++ b/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java @@ -0,0 +1,18 @@ +package com.navi.infra.portal.events; + +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Component; + +@Component +public class PortalEventPublisher { + + private final ApplicationEventPublisher applicationEventPublisher; + + public PortalEventPublisher(ApplicationEventPublisher applicationEventPublisher) { + this.applicationEventPublisher = applicationEventPublisher; + } + + public void publishKubeUpdateEvent(String cluster, String kubeObjectType, String name) { + applicationEventPublisher.publishEvent(new KubeApplySuccessfulEvent(cluster,kubeObjectType,name)); + } +} From b783c8592eb69d56aeffc65b68bb628e3a478477 Mon Sep 17 00:00:00 2001 From: Abhishek Katiyar Date: Wed, 22 Jul 2020 20:33:20 +0530 Subject: [PATCH 2/3] [infra-426] | Abhishek | Refactor code --- .../infra/portal/enums/KubeApplyResult.java | 5 ++++ .../infra/portal/events/KubeApplyEvent.java | 24 +++++++++++++++++++ .../events/KubeApplySuccessfulEvent.java | 17 ------------- .../portal/events/PortalEventListener.java | 4 ++-- .../portal/events/PortalEventPublisher.java | 5 ++-- .../manifest/KubernetesManifestService.java | 11 +++++---- 6 files changed, 41 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/navi/infra/portal/enums/KubeApplyResult.java create mode 100644 src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java delete mode 100644 src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java diff --git a/src/main/java/com/navi/infra/portal/enums/KubeApplyResult.java b/src/main/java/com/navi/infra/portal/enums/KubeApplyResult.java new file mode 100644 index 00000000..645357d9 --- /dev/null +++ b/src/main/java/com/navi/infra/portal/enums/KubeApplyResult.java @@ -0,0 +1,5 @@ +package com.navi.infra.portal.enums; + +public enum KubeApplyResult{ + SUCCESSFUL,UNSUCCESSFUL +} \ No newline at end of file diff --git a/src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java b/src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java new file mode 100644 index 00000000..082695e6 --- /dev/null +++ b/src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java @@ -0,0 +1,24 @@ +package com.navi.infra.portal.events; + +import com.navi.infra.portal.enums.KubeApplyResult; + +public class KubeApplyEvent { + private final String cluster; + private final String kubeObject; + private final String name; + private final KubeApplyResult result; + + public KubeApplyEvent(KubeApplyResult result,String cluster, String kubeObjectType, String name){ + this.cluster=cluster; + this.kubeObject=kubeObjectType; + this.name=name; + this.result=result; + } + + public String toString() { + if(this.result==KubeApplyResult.SUCCESSFUL){ + return String.format("%s %s updated in %s",name, kubeObject, cluster); + } + return String.format("%s %s could not be updated in %s",name, kubeObject, cluster); + } +} diff --git a/src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java b/src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java deleted file mode 100644 index 0b320012..00000000 --- a/src/main/java/com/navi/infra/portal/events/KubeApplySuccessfulEvent.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.navi.infra.portal.events; - -public class KubeApplySuccessfulEvent { - private final String cluster; - private final String kubeObject; - private final String name; - - public KubeApplySuccessfulEvent(String cluster, String kubeObjectType, String name){ - this.cluster=cluster; - this.kubeObject=kubeObjectType; - this.name=name; - } - - public String toString() { - return String.format("%s %s updated in %s",name, kubeObject, cluster); - } -} diff --git a/src/main/java/com/navi/infra/portal/events/PortalEventListener.java b/src/main/java/com/navi/infra/portal/events/PortalEventListener.java index 0aa77c82..2269df48 100644 --- a/src/main/java/com/navi/infra/portal/events/PortalEventListener.java +++ b/src/main/java/com/navi/infra/portal/events/PortalEventListener.java @@ -9,8 +9,8 @@ import org.springframework.stereotype.Component; public class PortalEventListener { @EventListener - public void handleKubeUpdateEvent(KubeApplySuccessfulEvent kubeApplySuccessfulEvent){ - log.info(kubeApplySuccessfulEvent.toString()); + public void handleKubeApplyEvent(KubeApplyEvent kubeApplyEvent){ + log.info(kubeApplyEvent.toString()); } } diff --git a/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java b/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java index cf550e54..e28ce368 100644 --- a/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java +++ b/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java @@ -1,5 +1,6 @@ package com.navi.infra.portal.events; +import com.navi.infra.portal.enums.KubeApplyResult; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; @@ -12,7 +13,7 @@ public class PortalEventPublisher { this.applicationEventPublisher = applicationEventPublisher; } - public void publishKubeUpdateEvent(String cluster, String kubeObjectType, String name) { - applicationEventPublisher.publishEvent(new KubeApplySuccessfulEvent(cluster,kubeObjectType,name)); + public void publishKubeApplyEvent(KubeApplyResult result, String cluster, String kubeObjectType, String name) { + applicationEventPublisher.publishEvent(new KubeApplyEvent(result,cluster,kubeObjectType,name)); } } diff --git a/src/main/java/com/navi/infra/portal/kubernetes/manifest/KubernetesManifestService.java b/src/main/java/com/navi/infra/portal/kubernetes/manifest/KubernetesManifestService.java index 5ed4f843..eff585e8 100644 --- a/src/main/java/com/navi/infra/portal/kubernetes/manifest/KubernetesManifestService.java +++ b/src/main/java/com/navi/infra/portal/kubernetes/manifest/KubernetesManifestService.java @@ -3,15 +3,15 @@ package com.navi.infra.portal.kubernetes.manifest; import com.fasterxml.jackson.databind.ObjectMapper; import com.navi.infra.portal.bash.BashExecute; import com.navi.infra.portal.domain.Manifest; +import com.navi.infra.portal.enums.KubeApplyResult; +import com.navi.infra.portal.events.PortalEventPublisher; import com.navi.infra.portal.exceptions.KubernetesManifestException; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.nio.file.Paths; import java.util.Optional; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; + import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -33,6 +33,8 @@ public class KubernetesManifestService { private final ObjectMapper objectMapper; + private final PortalEventPublisher portalEventPublisher; + public String generateManifests(Manifest manifest) { writeAggregatedManifestAsJson(manifest); int exitCode = generateKManifests(getManifestPath(manifest), @@ -92,9 +94,10 @@ public class KubernetesManifestService { log.info("Executing command {}", command); if (BashExecute.execute(command) > 0) { + portalEventPublisher.publishKubeApplyEvent(KubeApplyResult.UNSUCCESSFUL ,clusterName,manifestObject,manifest.getName()); throw new RuntimeException(String.format("Unable to apply %s", manifestObject)); } - + portalEventPublisher.publishKubeApplyEvent(KubeApplyResult.SUCCESSFUL ,clusterName,manifestObject,manifest.getName()); log.info("Successfully applied {}", manifestObject); } From 45ca44666f328dfb418d95f306768b4826708b2d Mon Sep 17 00:00:00 2001 From: Abhishek Katiyar Date: Thu, 23 Jul 2020 11:44:38 +0530 Subject: [PATCH 3/3] INFRA-426 | Abhishek | Use annotation instead of constructor --- .../com/navi/infra/portal/events/KubeApplyEvent.java | 11 +++-------- .../infra/portal/events/PortalEventPublisher.java | 6 ++---- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java b/src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java index 082695e6..9317bd7f 100644 --- a/src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java +++ b/src/main/java/com/navi/infra/portal/events/KubeApplyEvent.java @@ -1,19 +1,14 @@ package com.navi.infra.portal.events; import com.navi.infra.portal.enums.KubeApplyResult; +import lombok.RequiredArgsConstructor; +@RequiredArgsConstructor public class KubeApplyEvent { + private final KubeApplyResult result; private final String cluster; private final String kubeObject; private final String name; - private final KubeApplyResult result; - - public KubeApplyEvent(KubeApplyResult result,String cluster, String kubeObjectType, String name){ - this.cluster=cluster; - this.kubeObject=kubeObjectType; - this.name=name; - this.result=result; - } public String toString() { if(this.result==KubeApplyResult.SUCCESSFUL){ diff --git a/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java b/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java index e28ce368..3e9b668b 100644 --- a/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java +++ b/src/main/java/com/navi/infra/portal/events/PortalEventPublisher.java @@ -1,18 +1,16 @@ package com.navi.infra.portal.events; import com.navi.infra.portal.enums.KubeApplyResult; +import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; @Component +@RequiredArgsConstructor public class PortalEventPublisher { private final ApplicationEventPublisher applicationEventPublisher; - public PortalEventPublisher(ApplicationEventPublisher applicationEventPublisher) { - this.applicationEventPublisher = applicationEventPublisher; - } - public void publishKubeApplyEvent(KubeApplyResult result, String cluster, String kubeObjectType, String name) { applicationEventPublisher.publishEvent(new KubeApplyEvent(result,cluster,kubeObjectType,name)); }