|
@@ -0,0 +1,102 @@
|
|
|
+package com.its.op.service;
|
|
|
+
|
|
|
+import com.its.op.dto.ThreadMonitoringDto;
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@RequiredArgsConstructor
|
|
|
+@Service
|
|
|
+public class ResourceMonitoringService {
|
|
|
+
|
|
|
+ private final Map<String, Set<Thread>> threadMap = new HashMap<String, Set<Thread>>();
|
|
|
+
|
|
|
+ private Set<Thread> getActiveThreadSet() {
|
|
|
+ Set<Thread> activeThreads = Thread.getAllStackTraces().keySet();
|
|
|
+ for (Thread t : activeThreads) {
|
|
|
+ log.info("{}", t);
|
|
|
+ }
|
|
|
+ return activeThreads;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ThreadMonitoringDto> threadMonitoringSave(String tag) {
|
|
|
+ List<ThreadMonitoringDto> result = new ArrayList<>();
|
|
|
+ Set<Thread> currentThreadSet = getActiveThreadSet();
|
|
|
+ for (Thread t : currentThreadSet) {
|
|
|
+ result.add(ThreadMonitoringDto.builder()
|
|
|
+ .name(t.getName())
|
|
|
+ .state(t.getState().toString())
|
|
|
+ .priority(t.getPriority())
|
|
|
+ .isDaemon(t.isDaemon())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ this.threadMap.put(tag, currentThreadSet);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ThreadMonitoringDto> threadMonitoringDelete(String tag) {
|
|
|
+ List<ThreadMonitoringDto> result = new ArrayList<>();
|
|
|
+ Set<Thread> tagThreadSet = this.threadMap.get(tag);
|
|
|
+ for (Thread t : tagThreadSet) {
|
|
|
+ result.add(ThreadMonitoringDto.builder()
|
|
|
+ .name(t.getName())
|
|
|
+ .state(t.getState().toString())
|
|
|
+ .priority(t.getPriority())
|
|
|
+ .isDaemon(t.isDaemon())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ this.threadMap.remove(tag);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ThreadMonitoringDto> threadMonitoringQuery(String tag) {
|
|
|
+ List<ThreadMonitoringDto> result = new ArrayList<>();
|
|
|
+ Set<Thread> tagThreadSet = this.threadMap.get(tag);
|
|
|
+ for (Thread t : tagThreadSet) {
|
|
|
+ result.add(ThreadMonitoringDto.builder()
|
|
|
+ .name(t.getName())
|
|
|
+ .state(t.getState().toString())
|
|
|
+ .priority(t.getPriority())
|
|
|
+ .isDaemon(t.isDaemon())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ThreadMonitoringDto> threadMonitoringDiff(String tag) {
|
|
|
+ Set<Thread> tagThreadSet = this.threadMap.get(tag);
|
|
|
+ Set<Thread> currentThreadSet = getActiveThreadSet();
|
|
|
+
|
|
|
+ List<ThreadMonitoringDto> result = currentThreadSet.stream()
|
|
|
+ .filter(Thread::isAlive)
|
|
|
+ .filter(thread -> !tagThreadSet.contains(thread))
|
|
|
+ .sorted(Comparator.comparing(Thread::getName))
|
|
|
+ .map(thread -> ThreadMonitoringDto.builder()
|
|
|
+ .name(thread.getName())
|
|
|
+ .state(thread.getState().toString())
|
|
|
+ .priority(thread.getPriority())
|
|
|
+ .isDaemon(thread.isDaemon())
|
|
|
+ .build())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<ThreadMonitoringDto> threadMonitoringCurrent() {
|
|
|
+ List<ThreadMonitoringDto> result = new ArrayList<>();
|
|
|
+ Set<Thread> currentThreadSet = getActiveThreadSet();
|
|
|
+ for (Thread t : currentThreadSet) {
|
|
|
+ result.add(ThreadMonitoringDto.builder()
|
|
|
+ .name(t.getName())
|
|
|
+ .state(t.getState().toString())
|
|
|
+ .priority(t.getPriority())
|
|
|
+ .isDaemon(t.isDaemon())
|
|
|
+ .build());
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+}
|