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); + +}