Files
eapim-online/src/main/java/com/eactive/eai/manage/inflow/InflowGroupBucketService.java
T
curry772 04aa0df977 refactor: InflowGroupBucketService / InflowTargetBucketService AbstractInflowControlManager 타입 적용
서브모듈 리팩토링(AbstractInflowControlManager 분리)에 맞춰
InflowControlManager.getInstance() 호출을 InflowControlUtil.getInflowControlManager()로 변경.
반환 타입을 AbstractInflowControlManager로 통일.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 10:15:55 +09:00

92 lines
3.0 KiB
Java

package com.eactive.eai.manage.inflow;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
import com.eactive.eai.common.inflow.AbstractInflowControlManager;
import com.eactive.eai.common.inflow.CustomGroupBucket;
import com.eactive.eai.common.inflow.InflowControlUtil;
import com.eactive.eai.common.inflow.InflowGroupVO;
@Service
public class InflowGroupBucketService {
public GroupBucketStatusDTO getGroupBucketStatus(String groupId) {
AbstractInflowControlManager manager = InflowControlUtil.getInflowControlManager();
InflowGroupVO groupVo = manager.getGroupInflowThreshold(groupId);
if (groupVo == null) {
return null;
}
GroupBucketStatusDTO dto = new GroupBucketStatusDTO();
dto.setGroupId(groupId);
dto.setGroupName(groupVo.getGroupName());
dto.setActivate(groupVo.isActivate());
List<GroupBucketStatusDTO.BucketInfo> buckets = new ArrayList<>();
// CustomGroupBucket에서 직접 토큰 조회
CustomGroupBucket customGroupBucket = getCustomGroupBucket(groupId);
// perSecond bucket
if (groupVo.getThresholdPerSecond() > 0) {
long capacity = groupVo.getThresholdPerSecond();
long available = capacity;
if (customGroupBucket != null) {
long tokens = customGroupBucket.getPerSecondAvailableTokens();
if (tokens >= 0) {
available = Math.min(tokens, capacity);
}
}
buckets.add(new GroupBucketStatusDTO.BucketInfo(
"perSecond",
capacity,
available,
"SEC"
));
}
// threshold bucket
if (groupVo.getThreshold() > 0) {
long capacity = groupVo.getThreshold();
long available = capacity;
if (customGroupBucket != null) {
long tokens = customGroupBucket.getThresholdAvailableTokens();
if (tokens >= 0) {
available = Math.min(tokens, capacity);
}
}
buckets.add(new GroupBucketStatusDTO.BucketInfo(
"threshold",
capacity,
available,
groupVo.getThresholdTimeUnit()
));
}
dto.setBuckets(buckets);
return dto;
}
public CustomGroupBucket getCustomGroupBucket(String groupId) {
return InflowControlUtil.getInflowControlManager().getGroupBucket(groupId);
}
public List<GroupBucketStatusDTO> getAllGroupBucketStatus() {
AbstractInflowControlManager manager = InflowControlUtil.getInflowControlManager();
String[] groupIds = manager.getGroupAllKeys();
List<GroupBucketStatusDTO> result = new ArrayList<>();
for (String groupId : groupIds) {
GroupBucketStatusDTO dto = getGroupBucketStatus(groupId);
if (dto != null) {
result.add(dto);
}
}
return result;
}
}