mirror of
https://gitee.com/huoyo/ko-time.git
synced 2025-12-08 01:38:26 +08:00
add thread statistics (base)
This commit is contained in:
parent
8bae6c2954
commit
dc59f45600
@ -7,6 +7,7 @@ import cn.langpy.kotime.model.*;
|
|||||||
import cn.langpy.kotime.service.ClassService;
|
import cn.langpy.kotime.service.ClassService;
|
||||||
import cn.langpy.kotime.service.GraphService;
|
import cn.langpy.kotime.service.GraphService;
|
||||||
import cn.langpy.kotime.service.SysUsageService;
|
import cn.langpy.kotime.service.SysUsageService;
|
||||||
|
import cn.langpy.kotime.service.ThreadUsageService;
|
||||||
import cn.langpy.kotime.util.Context;
|
import cn.langpy.kotime.util.Context;
|
||||||
import cn.langpy.kotime.util.InvalidAuthInfoException;
|
import cn.langpy.kotime.util.InvalidAuthInfoException;
|
||||||
import cn.langpy.kotime.util.KoUtil;
|
import cn.langpy.kotime.util.KoUtil;
|
||||||
@ -358,4 +359,13 @@ public class KoTimeController {
|
|||||||
graphService.clearAll();
|
graphService.clearAll();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/getThreadsInfo")
|
||||||
|
@ResponseBody
|
||||||
|
@Auth
|
||||||
|
public List getThreadsInfo() {
|
||||||
|
ThreadUsageService usageService = ThreadUsageService.newInstance();
|
||||||
|
List<ThreadInfo> threads = usageService.getThreads();
|
||||||
|
return threads;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
78
src/main/java/cn/langpy/kotime/model/ThreadInfo.java
Normal file
78
src/main/java/cn/langpy/kotime/model/ThreadInfo.java
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
package cn.langpy.kotime.model;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class ThreadInfo {
|
||||||
|
private Long id;
|
||||||
|
private String name;
|
||||||
|
private String classType;
|
||||||
|
private String state;
|
||||||
|
private Boolean isInterrupted;
|
||||||
|
private Boolean isDaemon;
|
||||||
|
private Integer priority;
|
||||||
|
private List<StackTraceElement> stacks;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(Long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getInterrupted() {
|
||||||
|
return isInterrupted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInterrupted(Boolean interrupted) {
|
||||||
|
isInterrupted = interrupted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getClassType() {
|
||||||
|
return classType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClassType(String classType) {
|
||||||
|
this.classType = classType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getState() {
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setState(String state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getDaemon() {
|
||||||
|
return isDaemon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDaemon(Boolean daemon) {
|
||||||
|
isDaemon = daemon;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getPriority() {
|
||||||
|
return priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPriority(Integer priority) {
|
||||||
|
this.priority = priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StackTraceElement> getStacks() {
|
||||||
|
return stacks;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStacks(List<StackTraceElement> stacks) {
|
||||||
|
this.stacks = stacks;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
package cn.langpy.kotime.service;
|
||||||
|
|
||||||
|
import cn.langpy.kotime.model.ThreadInfo;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
public class ThreadUsageService {
|
||||||
|
private static Logger log = Logger.getLogger(ThreadUsageService.class.toString());
|
||||||
|
|
||||||
|
public static ThreadUsageService newInstance() {
|
||||||
|
return new ThreadUsageService();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ThreadInfo> getThreads() {
|
||||||
|
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
|
||||||
|
int activeCount = threadGroup.activeCount();
|
||||||
|
Thread[] threads = new Thread[activeCount];
|
||||||
|
threadGroup.enumerate(threads);
|
||||||
|
List<ThreadInfo> list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < activeCount; i++) {
|
||||||
|
Thread thread = threads[i];
|
||||||
|
ThreadInfo threadInfo = new ThreadInfo();
|
||||||
|
threadInfo.setId(thread.getId());
|
||||||
|
threadInfo.setName(thread.getName());
|
||||||
|
threadInfo.setClassType(thread.getClass().getSimpleName());
|
||||||
|
threadInfo.setState(thread.getState().name());
|
||||||
|
threadInfo.setInterrupted(thread.isInterrupted());
|
||||||
|
threadInfo.setDaemon(thread.isDaemon());
|
||||||
|
threadInfo.setPriority(thread.getPriority());
|
||||||
|
StackTraceElement[] stackTrace = thread.getStackTrace();
|
||||||
|
threadInfo.setStacks(Arrays.stream(stackTrace).collect(Collectors.toList()));
|
||||||
|
list.add(threadInfo);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user