|
|
|
@ -1,21 +1,33 @@
|
|
|
|
|
package com.docus.server.common;
|
|
|
|
|
|
|
|
|
|
import com.docus.core.util.Func;
|
|
|
|
|
import com.docus.core.util.ListUtils;
|
|
|
|
|
import com.docus.core.util.json.JSON;
|
|
|
|
|
import com.docus.server.api.taskdistribute.TaskDistributeApi;
|
|
|
|
|
import com.docus.server.common.netty.server.ChannelRepository;
|
|
|
|
|
import com.docus.server.dto.scheduling.management.schcollector.task.ReportDownTwoDTO;
|
|
|
|
|
import com.docus.server.dto.scheduling.management.schterminator.NettyTerminatorDTO;
|
|
|
|
|
import com.docus.server.enums.BusyStateEnum;
|
|
|
|
|
import com.docus.server.enums.OnlineStateEnum;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import com.google.common.collect.Maps;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.scheduling.annotation.Scheduled;
|
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
|
|
@Component
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class SchedulerTask {
|
|
|
|
|
@Resource
|
|
|
|
|
private ChannelRepository channelRepository;
|
|
|
|
|
@Resource
|
|
|
|
|
private TaskDistributeApi taskDistributeApi;
|
|
|
|
|
|
|
|
|
|
//定时任务
|
|
|
|
|
// 5 * * * * ? 在每分钟的5秒执行
|
|
|
|
@ -26,22 +38,98 @@ public class SchedulerTask {
|
|
|
|
|
|
|
|
|
|
Map<String, NettyTerminatorDTO> ipToTerminatorCacheMap = channelRepository.getIpToTerminatorCacheMap();
|
|
|
|
|
|
|
|
|
|
Set<String> keySet = ipToTerminatorCacheMap.keySet();
|
|
|
|
|
//没有可用的通道
|
|
|
|
|
if (Func.isEmpty(ipToTerminatorCacheMap)) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Collection<NettyTerminatorDTO> values = ipToTerminatorCacheMap.values();
|
|
|
|
|
|
|
|
|
|
List<NettyTerminatorDTO> AllTerminators = Lists.newArrayList();
|
|
|
|
|
List<NettyTerminatorDTO> onlyTerminators = Lists.newArrayList();
|
|
|
|
|
List<NettyTerminatorDTO> priorityTerminators = Lists.newArrayList();
|
|
|
|
|
List<NettyTerminatorDTO> noOnlyTerminators = Lists.newArrayList();
|
|
|
|
|
|
|
|
|
|
Map<String, NettyTerminatorDTO> onlyCollectorIdMap = Maps.newConcurrentMap();
|
|
|
|
|
Map<String, NettyTerminatorDTO> priorityCollectorIdsMap = Maps.newConcurrentMap();
|
|
|
|
|
|
|
|
|
|
for (NettyTerminatorDTO t : values) {
|
|
|
|
|
|
|
|
|
|
//是否空闲
|
|
|
|
|
BusyStateEnum busyState = t.getBusyState();
|
|
|
|
|
//是否在线
|
|
|
|
|
OnlineStateEnum onlineState = t.getOnlineState();
|
|
|
|
|
//只采集
|
|
|
|
|
String onlyCollectorIds = t.getOnlyCollectorIds();
|
|
|
|
|
//优先采集
|
|
|
|
|
String priorityCollectorIds = t.getPriorityCollectorIds();
|
|
|
|
|
|
|
|
|
|
//在线且空闲的通道
|
|
|
|
|
if (valid(busyState, onlineState)) {
|
|
|
|
|
|
|
|
|
|
//所有空闲,在线的通道
|
|
|
|
|
AllTerminators.add(t);
|
|
|
|
|
|
|
|
|
|
//有无偏好属性的,
|
|
|
|
|
// 只采集的+ 没有优先采集的
|
|
|
|
|
if (Func.isNotBlank(onlyCollectorIds) && Func.isBlank(priorityCollectorIds)) {
|
|
|
|
|
onlyTerminators.add(t);
|
|
|
|
|
|
|
|
|
|
String[] split = onlyCollectorIds.split(",");
|
|
|
|
|
|
|
|
|
|
for (String k : split) {
|
|
|
|
|
onlyCollectorIdMap.put(k, t);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (String clientIp : keySet) {
|
|
|
|
|
NettyTerminatorDTO nettyTerminatorDTO = ipToTerminatorCacheMap.get(clientIp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
System.out.println(JSON.toJSON(nettyTerminatorDTO));
|
|
|
|
|
//只采集的+优先采集的
|
|
|
|
|
if (Func.isNotBlank(onlyCollectorIds) && Func.isNotBlank(priorityCollectorIds)) {
|
|
|
|
|
priorityTerminators.add(t);
|
|
|
|
|
|
|
|
|
|
String[] split = priorityCollectorIds.split(",");
|
|
|
|
|
for (String k : split) {
|
|
|
|
|
priorityCollectorIdsMap.put(k, t);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//没有偏好属性的
|
|
|
|
|
if (Func.isBlank(onlyCollectorIds)) {
|
|
|
|
|
noOnlyTerminators.add(t);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
System.out.println(JSON.toJSON(t));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 只采集的+ 没有优先采集的,A
|
|
|
|
|
Map<String, NettyTerminatorDTO> stringNettyTerminatorDTOMap = ListUtils.toMap(onlyTerminators, NettyTerminatorDTO::getTerminatorIp);
|
|
|
|
|
|
|
|
|
|
//只采集的+优先采集的,A,B
|
|
|
|
|
Map<String, NettyTerminatorDTO> stringNettyTerminatorDTOMap1 = ListUtils.toMap(priorityTerminators, NettyTerminatorDTO::getTerminatorIp);
|
|
|
|
|
|
|
|
|
|
//没有偏好属性的,C
|
|
|
|
|
Map<String, NettyTerminatorDTO> stringNettyTerminatorDTOMap2 = ListUtils.toMap(noOnlyTerminators, NettyTerminatorDTO::getTerminatorIp);
|
|
|
|
|
|
|
|
|
|
//拿到所有偏好属性
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(AllTerminators)) {
|
|
|
|
|
//:todo 任务平台需要修改发布任务策略
|
|
|
|
|
ReportDownTwoDTO task = taskDistributeApi.getTask(String.valueOf(AllTerminators.size()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//todo:执行业务
|
|
|
|
|
log.info("定时任务: 执行完毕");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("定时任务执行出错", e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private boolean valid(BusyStateEnum busyState, OnlineStateEnum onlineState) {
|
|
|
|
|
return BusyStateEnum.IDLE.equals(busyState)
|
|
|
|
|
&& OnlineStateEnum.ONLINE.equals(onlineState);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|