From 3cbb3f0ee857c5d57985778957d012a38012fe4a Mon Sep 17 00:00:00 2001 From: dongHyo Date: Fri, 6 May 2022 13:34:12 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=ED=97=AC=EC=8A=A4=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=20=EC=88=98=EB=8F=99=20=EB=B3=80=EA=B2=BD=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/health/L7checkController.java | 44 +++++++++++++++++++ .../global/health/ManualHealthIndicator.java | 20 +++++++++ .../global/health/MutableHealthIndicator.java | 10 +++++ 3 files changed, 74 insertions(+) create mode 100644 server/src/main/java/com/ticketing/server/global/health/L7checkController.java create mode 100644 server/src/main/java/com/ticketing/server/global/health/ManualHealthIndicator.java create mode 100644 server/src/main/java/com/ticketing/server/global/health/MutableHealthIndicator.java diff --git a/server/src/main/java/com/ticketing/server/global/health/L7checkController.java b/server/src/main/java/com/ticketing/server/global/health/L7checkController.java new file mode 100644 index 0000000..705b188 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/health/L7checkController.java @@ -0,0 +1,44 @@ +package com.ticketing.server.global.health; + +import javax.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.Status; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/l7check") +@RequiredArgsConstructor +public class L7checkController { + + private final MutableHealthIndicator indicator; + + @GetMapping + public ResponseEntity health() { + Health health = indicator.health(); + boolean isUp = health.getStatus().equals(Status.UP); + return ResponseEntity + .status(isUp ? HttpStatus.OK : HttpStatus.SERVICE_UNAVAILABLE) + .build(); + } + + @DeleteMapping + @ResponseStatus(HttpStatus.NO_CONTENT) + public void down(HttpServletRequest request) { + indicator.setHealth(Health.down().build()); + } + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public void up(HttpServletRequest request) { + indicator.setHealth(Health.up().build()); + } + +} diff --git a/server/src/main/java/com/ticketing/server/global/health/ManualHealthIndicator.java b/server/src/main/java/com/ticketing/server/global/health/ManualHealthIndicator.java new file mode 100644 index 0000000..f56fb5a --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/health/ManualHealthIndicator.java @@ -0,0 +1,20 @@ +package com.ticketing.server.global.health; + +import java.util.concurrent.atomic.AtomicReference; +import org.springframework.boot.actuate.health.Health; + +public class ManualHealthIndicator implements MutableHealthIndicator { + + private final AtomicReference healthRef = new AtomicReference<>(Health.up().build()); + + @Override + public void setHealth(Health health) { + healthRef.set(health); + } + + @Override + public Health health() { + return healthRef.get(); + } + +} diff --git a/server/src/main/java/com/ticketing/server/global/health/MutableHealthIndicator.java b/server/src/main/java/com/ticketing/server/global/health/MutableHealthIndicator.java new file mode 100644 index 0000000..dce53d9 --- /dev/null +++ b/server/src/main/java/com/ticketing/server/global/health/MutableHealthIndicator.java @@ -0,0 +1,10 @@ +package com.ticketing.server.global.health; + +import org.springframework.boot.actuate.health.Health; +import org.springframework.boot.actuate.health.HealthIndicator; + +public interface MutableHealthIndicator extends HealthIndicator { + + void setHealth(Health health); + +}