Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 28 additions & 2 deletions monitoring/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ services:
image: mariadb:latest
container_name: mariadb2
ports:
- "3306:3306"
- "3307:3306"
env_file:
- ../docker/local.properties
environment:
Expand Down Expand Up @@ -66,6 +66,25 @@ services:
- monitoring-net
restart: unless-stopped

# --- 추가된 InfluxDB 서비스 ---
influxdb:
image: influxdb:2.7
container_name: influxdb
ports:
- "8086:8086"
volumes:
- influxdb_data:/var/lib/influxdb2
environment:
- DOCKER_INFLUXDB_INIT_MODE=setup
- DOCKER_INFLUXDB_INIT_USERNAME=k6-user # 임의의 사용자/비밀번호
- DOCKER_INFLUXDB_INIT_PASSWORD=k6-password
- DOCKER_INFLUXDB_INIT_ORG=k6-org
- DOCKER_INFLUXDB_INIT_BUCKET=k6-bucket
- DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=vJvTx5b8vjgH7mu-M-BsEvdy5_COovexAjyniVhMF1yPzvsp2g8kp62opqXVMq6ICAq2tLJxxD6ifXPBZ9YVmA==
networks:
- monitoring-net
restart: unless-stopped

grafana:
image: grafana/grafana:11.0.0
container_name: grafana
Expand All @@ -77,9 +96,10 @@ services:
networks:
- monitoring-net
restart: unless-stopped
depends_on:
depends_on: # --- 수정된 부분 ---
- prometheus
- jaeger
- influxdb

jaeger:
image: jaegertracing/all-in-one:latest
Expand All @@ -96,6 +116,7 @@ volumes:
grafana_data: {}
mariadb_data:
driver: local
influxdb_data: {} # --- 추가된 부분 ---

networks:
app-network:
Expand All @@ -104,3 +125,8 @@ networks:
monitoring-net:
name: monitoring-net
driver: bridge


# export K6_INFLUXDB_ORGANIZATION=k6-org
# - export K6_INFLUXDB_BUCKET=k6-bucket
# ./k6 run --out xk6-influxdb=http://localhost:8086 /Users/jangbongjun/coin/src/test/resources/k6/chart-stomp-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public class TradeEventHandler {
private final WebsocketSendService websocketSendService;
private final ChartSubscriptionService chartSubscriptionService; // 주입
private final RealTimeDataPrevRateService realTimeDataPrevRateService;

//event로 이벤틀 처리해야한다.
//eventListener는 void로 처리를 해야한다
@TransactionalEventListener
Expand All @@ -37,8 +38,29 @@ public void handleTradeEvent(TradeExecutedEvent event) {
TradeEventDto tradeEventDto = getTradeEventDto(trade);
log.debug("TradeEventHandler 수신 : {}", trade);

// 실시간 데이터 체결내역
// 해당 종목에 대한 구독자가 있는지 확인
// 실시간 데이터 전송
processRealTimeTradeRate(ticker, tradeEventDto);

//전날 종가 변동률 전송
processPrevRateData(ticker, tradeEventDto);
}

public void processPrevRateData(String ticker, TradeEventDto tradeEventDto) {
if (chartSubscriptionService.isSubscribedToPrevRate(ticker)) {
log.debug("종목 {} 전일 대비 변동률 구독자 확인됨. 데이터 전송 시작.", ticker);
try {
PrevRateDto dto = realTimeDataPrevRateService.generatePrevRateData(tradeEventDto);
websocketSendService.sendPrevRate(dto, dto.getTicker()); // dto.getTicker()는 이미 ticker와 동일
log.debug("종목 {} 전일 대비 변동률 전송 완료 : {}", ticker, dto);
} catch (Exception e) {
log.error("종목 {} 전일 대비 변동률 전송 중 오류: {}", ticker, e.getMessage(), e);
}
} else {
log.debug("종목 {} 전일 대비 변동률 구독자 없음. 데이터 전송 생략.", ticker);
}
}

public void processRealTimeTradeRate(String ticker, TradeEventDto tradeEventDto) {
if (chartSubscriptionService.isSubscribedToRealTimeTradeRate(ticker)) {
log.debug("종목 {} 실시간 체결 정보 구독자 확인됨. 데이터 처리 및 전송 시작.", ticker);

Expand All @@ -54,21 +76,6 @@ public void handleTradeEvent(TradeExecutedEvent event) {
} else {
log.debug("종목 {} 실시간 체결 정보 구독자 없음. 데이터 전송 생략.", ticker);
}

//전날 종가 변동률 전송
if(chartSubscriptionService.isSubscribedToPrevRate(ticker)) {
log.debug("종목 {} 전일 대비 변동률 구독자 확인됨. 데이터 전송 시작.", ticker);
try {
PrevRateDto dto = realTimeDataPrevRateService.generatePrevRateData(tradeEventDto);
websocketSendService.sendPrevRate(dto, dto.getTicker()); // dto.getTicker()는 이미 ticker와 동일
log.debug("종목 {} 전일 대비 변동률 전송 완료 : {}", ticker, dto);
} catch (Exception e) {
log.error("종목 {} 전일 대비 변동률 전송 중 오류: {}", ticker, e.getMessage(), e);
}
}else {
log.debug("종목 {} 전일 대비 변동률 구독자 없음. 데이터 전송 생략.", ticker);
}

}

@NotNull
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,7 @@ public Set<String> getAllRealTimeTradeRateSubscribedTickers() {

//종목에 대한 구독 여부
public boolean isSubscribedToRealTimeTradeRate(String ticker) {
if (ticker == null || ticker.trim().isEmpty()) {
return false; // 유효하지 않은 티커는 구독되지 않은 것으로 처리
}
validateTicker(ticker);
return realTimeTradeRateSubscribedTickers.contains(ticker);
}

Expand Down Expand Up @@ -76,9 +74,7 @@ public Set<String> getAllRealTimeOhlcSubscribedTickers() {
}

public boolean isSubscribedToRealTimeOhlc(String ticker) {
if (ticker == null || ticker.trim().isEmpty()) {
return false; // 유효하지 않은 티커는 구독되지 않은 것으로 처리
}
validateTicker(ticker);
return realTimeOhlcSubscribedTickers.contains(ticker);
}

Expand All @@ -103,9 +99,7 @@ public Set<String> getAllPrevRateSubscribedTickers(String ticker) {
}

public boolean isSubscribedToPrevRate(String ticker) {
if (ticker == null || ticker.trim().isEmpty()) {
return false; // 유효하지 않은 티커는 구독되지 않은 것으로 처리
}
validateTicker(ticker);
return PrevRateSubscribedTickers.contains(ticker);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,8 @@ void validateTradeList(List<Trade> trades) {
// OHLC 계산 로직
@NotNull
static OhlcData calculateOhlcData(List<Trade> trades) {
double open = trades.get(0).getPrice();
double close = trades.get(trades.size() - 1).getPrice();
double open = trades.getFirst().getPrice();
double close = trades.getLast().getPrice();

double high = trades.stream()
.mapToDouble(Trade::getPrice)
Expand Down
1 change: 0 additions & 1 deletion src/main/java/com/cleanengine/coin/trade/entity/Trade.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ public class Trade {

@Column(name = "trade_time", nullable = false)
@CreationTimestamp
//생성 타임은 추후 논의 예정
private LocalDateTime tradeTime;

@Column(name = "buy_user_id", nullable = false)
Expand Down
Loading
Loading