parent
8cc8097f33
commit
e4f24bf3a6
|
@ -0,0 +1,4 @@
|
|||
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com
|
||||
docker build --platform linux/amd64 -t control-center-management ../../
|
||||
docker tag control-center-management:latest 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/control-center-management:0.0.1
|
||||
docker push 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/control-center-management:0.0.1
|
|
@ -0,0 +1,3 @@
|
|||
SERVER_PORT: 8087
|
||||
MONGODB_URL: mongodb://sdt:251327@13.209.39.139:27017/awexomeray?authSource=admin
|
||||
DEPLOYER_ENDPOINT: http://device-deployer.sdt-cloud.svc.cluster.local:8085
|
|
@ -0,0 +1,42 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: control-center-management
|
||||
namespace: sdt-cloud
|
||||
labels:
|
||||
name: control-center-management
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
name: control-center-management
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
name: control-center-management
|
||||
spec:
|
||||
imagePullSecrets:
|
||||
- name: regcred
|
||||
containers:
|
||||
- name: control-center-management
|
||||
image: 003960268191.dkr.ecr.ap-northeast-2.amazonaws.com/sdt-cloud/control-center-management:0.0.1
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 8087
|
||||
env:
|
||||
- name: SPRING_PROFILES_ACTIVE
|
||||
value: "k8s"
|
||||
- name: SERVER_PORT
|
||||
value: "8087"
|
||||
- name: MONGODB_URL
|
||||
value: "mongodb://sdt:251327@mongo-db.database.svc.cluster.local/awexomeray?authSource=admin"
|
||||
- name: DEPLOYER_ENDPOINT
|
||||
value: "http://device-deployer.sdt-cloud.svc.cluster.local:8085"
|
||||
- name: IAM_AMQP_HOST
|
||||
value: "rabbitmq.sdt-cloud.svc.cluster.local"
|
||||
- name: IAM_AMQP_PORT
|
||||
value: "5672"
|
||||
- name: IAM_AMQP_CREDENTIALS_USERNAME
|
||||
value: "sdt"
|
||||
- name: IAM_AMQP_CREDENTIALS_PASSWORD
|
||||
value: "251327"
|
|
@ -0,0 +1,15 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: control-center-management
|
||||
namespace: sdt-cloud
|
||||
spec:
|
||||
ports:
|
||||
- port: 8087
|
||||
targetPort: 8087
|
||||
protocol: TCP
|
||||
name: control-center-management
|
||||
nodePort: 30870
|
||||
type: NodePort
|
||||
selector:
|
||||
name: control-center-management
|
|
@ -0,0 +1,16 @@
|
|||
### ON/OFF 제어
|
||||
#PATCH http://13.209.39.139:30870/chamber/1/tube/toggle
|
||||
PATCH http://localhost:8087/chamber/1/tube/toggle
|
||||
Content-Type: application/json
|
||||
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb25JZCI6ImQxZGJlYWExLWY5ZTUtNGE4OC1hMWM4LTYzMWQ4NTMyOWJmYyIsInJvbGVzIjpbIlJPTEVfQURNSU5JU1RSQVRPUiJdLCJpZCI6IjcyYTUxZDUwLTYwMDEtNDAwYy04NjNmLWZlOGU2OGE1MGExMCIsInN1YiI6InNhLmphbmdAc2R0LmluYyIsImlhdCI6MTY5NDEzNjg4OCwiZXhwIjoxNjk0MTQwNDg4fQ.likh7Ix7p4Yf2iwankLG71VGrgCDzQzhn9Z7QJK0blg
|
||||
|
||||
{
|
||||
"command" : "OFF",
|
||||
"assetCode" : "NODEQ-TEST-1",
|
||||
"slotNumber" : "1-1",
|
||||
"tube": [
|
||||
{"code": "1"}, {"code": "3"}, {"code": "11"}, {"code": "16"}
|
||||
]
|
||||
}
|
||||
|
||||
//{"command": "ON"}
|
|
@ -1,10 +1,7 @@
|
|||
package inc.sdt.controlcentermanagement.application;
|
||||
|
||||
import com.fasterxml.jackson.core.type.TypeReference;
|
||||
import inc.sdt.controlcentermanagement.domain.CommandType;
|
||||
import inc.sdt.controlcentermanagement.domain.DeployRequest;
|
||||
import inc.sdt.controlcentermanagement.domain.Slot;
|
||||
import inc.sdt.controlcentermanagement.domain.Tube;
|
||||
import inc.sdt.controlcentermanagement.domain.*;
|
||||
import inc.sdt.controlcentermanagement.infrastructure.resttemplate.RestTemplateRequestHandler;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -45,7 +42,7 @@ class DefaultTubeService implements TubeService {
|
|||
log.info("[controlByTubeCode] request: {}", request);
|
||||
Map<String, String> tubeMap = new LinkedHashMap<>();
|
||||
for (Tube tube : request.getTube()) {
|
||||
Map<String, Integer> tubeOffsetMap = this.tubeOffset(request);
|
||||
Map<String, Integer> tubeOffsetMap = this.tubeOffset();
|
||||
String offsetKey = request.getSlotNumber().substring(request.getSlotNumber().length() - 1);
|
||||
int tubeOffset = tubeOffsetMap.getOrDefault(offsetKey, 1);
|
||||
int tubeKey = Integer.parseInt(tube.getCode()) + tubeOffset;
|
||||
|
@ -64,10 +61,9 @@ class DefaultTubeService implements TubeService {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void controlAll(String authorization, Slot request) {
|
||||
log.info("[controlAll] request: {}", request);
|
||||
public void controlAll(String authorization, List<Slot> slots, Command command) {
|
||||
log.info("[controlAll] chamberNumber: {}, command: {}", slots.get(0).getChamberNumber(), command);
|
||||
|
||||
List<Slot> slots = this.get(request.getChamberNumber());
|
||||
Map<String, Map<String, Map<String, String>>> resultMap = new LinkedHashMap<>();
|
||||
for (Slot slot : slots) {
|
||||
String assetCode = slot.getAssetCode();
|
||||
|
@ -78,12 +74,11 @@ class DefaultTubeService implements TubeService {
|
|||
Map<String, String> slotMap = assetMap.computeIfAbsent(slotNumber, k -> new HashMap<>());
|
||||
|
||||
for (Tube tube : tubes) {
|
||||
Map<String, Integer> tubeOffsetMap = this.tubeOffset(request);
|
||||
Map<String, Integer> tubeOffsetMap = this.tubeOffset();
|
||||
String offsetKey = slotNumber.substring(slotNumber.length() - 1);
|
||||
int tubeOffset = tubeOffsetMap.getOrDefault(offsetKey, 1);
|
||||
int offsetResult = Integer.parseInt(tube.getCode()) + tubeOffset;
|
||||
|
||||
slotMap.put(String.valueOf(offsetResult), String.valueOf(request.getCommand().ordinal()));
|
||||
slotMap.put(String.valueOf(offsetResult), String.valueOf(command.ordinal()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -100,9 +95,7 @@ class DefaultTubeService implements TubeService {
|
|||
}));
|
||||
}
|
||||
|
||||
private Map<String, Integer> tubeOffset(Slot request) {
|
||||
log.info("[tubeOffset] request: {}", request);
|
||||
|
||||
private Map<String, Integer> tubeOffset() {
|
||||
int offset = 0;
|
||||
Map<String, Integer> tubeOffsetMap = new HashMap<>();
|
||||
for (int i = 1; i <= 8; i++) {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package inc.sdt.controlcentermanagement.application;
|
||||
|
||||
import inc.sdt.controlcentermanagement.domain.Command;
|
||||
import inc.sdt.controlcentermanagement.domain.Slot;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -10,5 +11,5 @@ import java.util.List;
|
|||
public interface TubeService {
|
||||
List<Slot> get(String chamberNumber);
|
||||
void controlByTubeCode(String authorization, Slot request);
|
||||
void controlAll(String authorization, Slot request);
|
||||
void controlAll(String authorization, List<Slot> slots, Command command);
|
||||
}
|
||||
|
|
|
@ -8,6 +8,9 @@ import org.slf4j.LoggerFactory;
|
|||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
/**
|
||||
* @author sunae.jang (sa.jang@sdt.inc)
|
||||
*/
|
||||
|
@ -26,11 +29,13 @@ public class TubeController {
|
|||
@PatchMapping("/chamber/{chamberNumber}/tube/toggle")
|
||||
public void toggle(@RequestHeader("Authorization") String authorization, @PathVariable String chamberNumber, @RequestBody Slot slot) {
|
||||
log.info("[toggle] chamberNumber: {}, slot: {}", chamberNumber, slot);
|
||||
List<Slot> slots = tubeService.get(chamberNumber);
|
||||
if (slots.isEmpty()) throw new NoSuchElementException(chamberNumber);
|
||||
slot.setChamberNumber(chamberNumber);
|
||||
if (slot.getTube() != null) {
|
||||
tubeService.controlByTubeCode(authorization, slot);
|
||||
} else {
|
||||
tubeService.controlAll(authorization, slot);
|
||||
tubeService.controlAll(authorization, slots, slot.getCommand());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
package inc.sdt.controlcentermanagement.presentation.exception;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
|
||||
record ExceptionResponse(int code, String error, String message, long timestamp) {
|
||||
public static Builder builder(HttpStatus httpStatus) {
|
||||
return new Builder(httpStatus);
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private HttpStatus httpStatus;
|
||||
|
||||
private Builder(HttpStatus httpStatus) {
|
||||
this.httpStatus = httpStatus;
|
||||
}
|
||||
|
||||
public ExceptionResponse build(String message) {
|
||||
final long timeStamp = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli();
|
||||
return new ExceptionResponse(this.httpStatus.value(), this.httpStatus.getReasonPhrase(), message, timeStamp);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package inc.sdt.controlcentermanagement.presentation.exception;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.web.bind.MethodArgumentNotValidException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
@RestControllerAdvice
|
||||
class RestControllerExceptionHandler {
|
||||
|
||||
@ExceptionHandler
|
||||
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
||||
ExceptionResponse handleIllegalArgumentException(IllegalArgumentException e) {
|
||||
return ExceptionResponse.builder(HttpStatus.BAD_REQUEST)
|
||||
.build(e.getMessage());
|
||||
}
|
||||
|
||||
@ExceptionHandler(MethodArgumentNotValidException.class)
|
||||
@ResponseStatus(HttpStatus.BAD_REQUEST)
|
||||
ExceptionResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
|
||||
return ExceptionResponse.builder(HttpStatus.BAD_REQUEST)
|
||||
.build(e.getBindingResult().getAllErrors().get(0).getDefaultMessage());
|
||||
}
|
||||
@ExceptionHandler
|
||||
@ResponseStatus(HttpStatus.NOT_FOUND)
|
||||
ExceptionResponse handleNoSuchElementException(NoSuchElementException e) {
|
||||
return ExceptionResponse.builder(HttpStatus.NOT_FOUND)
|
||||
.build(e.getMessage() + " does not exist.");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue