| | |
| | | return result; |
| | | } |
| | | |
| | | public List<StationTaskTraceVo> listPlanningActiveTraceSnapshots() { |
| | | ensureCacheLoaded(); |
| | | cleanupExpired(); |
| | | List<StationTaskTraceVo> result = new ArrayList<>(); |
| | | for (TraceTaskState state : taskStateMap.values()) { |
| | | if (state == null) { |
| | | continue; |
| | | } |
| | | StationTaskTraceVo traceVo = state.toPlanningVo(); |
| | | if (traceVo == null) { |
| | | continue; |
| | | } |
| | | result.add(traceVo); |
| | | } |
| | | result.sort(new Comparator<StationTaskTraceVo>() { |
| | | @Override |
| | | public int compare(StationTaskTraceVo a, StationTaskTraceVo b) { |
| | | long av = a.getUpdatedAt() == null ? 0L : a.getUpdatedAt(); |
| | | long bv = b.getUpdatedAt() == null ? 0L : b.getUpdatedAt(); |
| | | return Long.compare(bv, av); |
| | | } |
| | | }); |
| | | return result; |
| | | } |
| | | |
| | | private void cleanupExpired() { |
| | | long now = System.currentTimeMillis(); |
| | | for (Map.Entry<Integer, TraceTaskState> entry : taskStateMap.entrySet()) { |
| | |
| | | return vo; |
| | | } |
| | | |
| | | private synchronized StationTaskTraceVo toPlanningVo() { |
| | | if (isTerminalStatus(this.status)) { |
| | | return null; |
| | | } |
| | | StationTaskTraceVo vo = new StationTaskTraceVo(); |
| | | vo.setTaskNo(taskNo); |
| | | vo.setThreadImpl(threadImpl); |
| | | vo.setStatus(status); |
| | | vo.setTraceVersion(traceVersion); |
| | | vo.setStartStationId(startStationId); |
| | | vo.setCurrentStationId(currentStationId); |
| | | vo.setFinalTargetStationId(finalTargetStationId); |
| | | vo.setPendingStationIds(copyIntegerList(pendingStationIds)); |
| | | vo.setLatestIssuedSegmentPath(copyIntegerList(latestIssuedSegmentPath)); |
| | | vo.setUpdatedAt(updatedAt); |
| | | return vo; |
| | | } |
| | | |
| | | private synchronized TraceSnapshot toSnapshot() { |
| | | TraceSnapshot snapshot = new TraceSnapshot(); |
| | | snapshot.setTaskNo(taskNo); |