| | |
| | | import com.ruoyi.device.discovery.DeviceDiscoveryCandidateStore; |
| | | import com.ruoyi.device.discovery.DeviceDiscoveryCandidateStore.CollectorCandidate; |
| | | import com.ruoyi.system.mapper.TCollectorMapper; |
| | | import com.ruoyi.system.service.ICollectorDisconnectRecoveryService; |
| | | |
| | | /** 将模拟采集器的发现写入 Redis,并同步已登记采集器的实时在线事实。 */ |
| | | @Component |
| | |
| | | private final BtsDevelopmentSimulator simulator; |
| | | private final DeviceDiscoveryCandidateStore candidateStore; |
| | | private final TCollectorMapper collectorMapper; |
| | | private final ICollectorDisconnectRecoveryService disconnectRecovery; |
| | | |
| | | @Autowired |
| | | public DevelopmentCollectorStatusSynchronizer(BtsDevelopmentSimulator simulator, |
| | | DeviceDiscoveryCandidateStore candidateStore, TCollectorMapper collectorMapper, |
| | | ICollectorDisconnectRecoveryService disconnectRecovery) |
| | | DeviceDiscoveryCandidateStore candidateStore, TCollectorMapper collectorMapper) |
| | | { |
| | | this.simulator = simulator; |
| | | this.candidateStore = candidateStore; |
| | | this.collectorMapper = collectorMapper; |
| | | this.disconnectRecovery = disconnectRecovery; |
| | | } |
| | | |
| | | /** 保留单元测试及独立模拟器装配使用的旧构造入口。 */ |
| | | public DevelopmentCollectorStatusSynchronizer(BtsDevelopmentSimulator simulator, |
| | | DeviceDiscoveryCandidateStore candidateStore, TCollectorMapper collectorMapper) |
| | | { |
| | | this(simulator, candidateStore, collectorMapper, (codes, at) -> { }); |
| | | } |
| | | |
| | | /** 完整替换 dev-sim 采集器快照,删除配置后候选立即消失。 */ |
| | | @Scheduled(fixedDelay = BtsDevelopmentSimulator.POLL_INTERVAL_MS) |
| | |
| | | candidateStore.replaceCollectors(BtsDevelopmentSimulator.ADAPTER_CODE, candidates); |
| | | candidates.forEach(candidate -> collectorMapper.updateRegisteredObservation(candidate.deviceCode(), |
| | | candidate.online() ? "ONLINE" : "OFFLINE")); |
| | | disconnectRecovery.reconcile(simulatorState.collectors().stream() |
| | | .filter(item -> item.online()).map(item -> item.deviceCode()).collect(java.util.stream.Collectors.toSet()), observedAt); |
| | | } |
| | | } |