Skip to content

Commit 1f92032

Browse files
committed
add classes from "selfprofiler" POC DSLink
1 parent 9f00aca commit 1f92032

13 files changed

+824
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.iot.dsa.profiler;
2+
3+
import java.lang.management.ClassLoadingMXBean;
4+
import java.lang.management.ManagementFactory;
5+
import java.lang.management.PlatformManagedObject;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class ClassLoadingNode extends MXBeanNode {
10+
11+
private ClassLoadingMXBean mxbean;
12+
13+
@Override
14+
public void setupMXBean() {
15+
mxbean = ManagementFactory.getClassLoadingMXBean();
16+
}
17+
18+
@Override
19+
public void refreshImpl() {
20+
}
21+
22+
@Override
23+
public PlatformManagedObject getMXBean() {
24+
return mxbean;
25+
}
26+
27+
@Override
28+
public Class<? extends PlatformManagedObject> getMXInterface() {
29+
return ClassLoadingMXBean.class;
30+
}
31+
32+
private static List<String> overriden = new ArrayList<String>();
33+
34+
@Override
35+
public List<String> getOverriden() {
36+
return overriden;
37+
}
38+
39+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.iot.dsa.profiler;
2+
3+
import java.lang.management.CompilationMXBean;
4+
import java.lang.management.ManagementFactory;
5+
import java.lang.management.PlatformManagedObject;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
import org.iot.dsa.node.DSString;
10+
11+
public class CompilationNode extends MXBeanNode {
12+
13+
private CompilationMXBean mxbean;
14+
15+
@Override
16+
public void setupMXBean() {
17+
mxbean = ManagementFactory.getCompilationMXBean();
18+
}
19+
20+
@Override
21+
public void refreshImpl() {
22+
putProp("TotalCompilationTime", DSString.valueOf(ProfilerUtils.millisToString(mxbean.getTotalCompilationTime())));
23+
}
24+
25+
@Override
26+
public PlatformManagedObject getMXBean() {
27+
return mxbean;
28+
}
29+
30+
@Override
31+
public Class<? extends PlatformManagedObject> getMXInterface() {
32+
return CompilationMXBean.class;
33+
}
34+
35+
private static List<String> overriden = new ArrayList<String>();
36+
static {
37+
overriden.add("TotalCompilationTime");
38+
}
39+
40+
@Override
41+
public List<String> getOverriden() {
42+
return overriden;
43+
}
44+
45+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.iot.dsa.profiler;
2+
3+
import java.lang.management.GarbageCollectorMXBean;
4+
import java.lang.management.PlatformManagedObject;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
import org.iot.dsa.node.DSString;
9+
10+
public class GarbageCollectorNode extends MXBeanNode {
11+
12+
private GarbageCollectorMXBean mxbean;
13+
14+
public GarbageCollectorNode() {
15+
}
16+
17+
public GarbageCollectorNode(GarbageCollectorMXBean mxbean) {
18+
this.mxbean = mxbean;
19+
}
20+
21+
@Override
22+
public void setupMXBean() {
23+
if (mxbean == null) {
24+
getParent().remove(getInfo());
25+
}
26+
}
27+
28+
@Override
29+
public void refreshImpl() {
30+
putProp("CollectionTime", DSString.valueOf(ProfilerUtils.millisToString(mxbean.getCollectionTime())));
31+
}
32+
33+
@Override
34+
public PlatformManagedObject getMXBean() {
35+
return mxbean;
36+
}
37+
38+
@Override
39+
public Class<? extends PlatformManagedObject> getMXInterface() {
40+
return GarbageCollectorMXBean.class;
41+
}
42+
43+
private static List<String> overriden = new ArrayList<String>();
44+
static {
45+
overriden.add("CollectionTime");
46+
}
47+
48+
@Override
49+
public List<String> getOverriden() {
50+
return overriden;
51+
}
52+
53+
}
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package org.iot.dsa.profiler;
2+
3+
import java.lang.management.PlatformManagedObject;
4+
import java.lang.reflect.InvocationTargetException;
5+
import java.lang.reflect.Method;
6+
import java.util.List;
7+
8+
import org.iot.dsa.node.DSIObject;
9+
import org.iot.dsa.node.DSInfo;
10+
import org.iot.dsa.node.DSNode;
11+
import org.iot.dsa.node.DSString;
12+
import org.iot.dsa.node.action.ActionInvocation;
13+
import org.iot.dsa.node.action.ActionResult;
14+
import org.iot.dsa.node.action.DSAction;
15+
16+
public abstract class MXBeanNode extends DSNode {
17+
18+
@Override
19+
protected void declareDefaults() {
20+
super.declareDefaults();
21+
DSAction act = new DSAction() {
22+
@Override
23+
public ActionResult invoke(DSInfo info, ActionInvocation invocation) {
24+
((MXBeanNode) info.getParent()).refresh();
25+
return null;
26+
}
27+
};
28+
declareDefault("Refresh", act);
29+
}
30+
31+
@Override
32+
protected void onStable() {
33+
setupMXBean();
34+
refresh();
35+
}
36+
37+
private void refresh() {
38+
refreshImpl();
39+
discover();
40+
}
41+
42+
public abstract void setupMXBean();
43+
44+
public abstract void refreshImpl();
45+
46+
public abstract PlatformManagedObject getMXBean();
47+
48+
public abstract Class<? extends PlatformManagedObject> getMXInterface();
49+
50+
public abstract List<String> getOverriden();
51+
52+
public void discover() {
53+
PlatformManagedObject bean = getMXBean();
54+
Class<? extends PlatformManagedObject> clazz = getMXInterface();
55+
for (Method meth: clazz.getMethods()) {
56+
String methName = meth.getName();
57+
if (meth.getParameterCount() == 0 &&
58+
meth.getReturnType() != Void.TYPE) {
59+
String name;
60+
if (methName.startsWith("get")) {
61+
name = methName.substring(3);
62+
} else if (methName.startsWith("is")) {
63+
name = methName.substring(2);
64+
} else {
65+
continue;
66+
}
67+
if (!name.isEmpty() && !getOverriden().contains(name)) {
68+
try {
69+
Object o = meth.invoke(bean);
70+
putProp(name, o != null ? ProfilerUtils.objectToDSIValue(o) : DSString.EMPTY);
71+
} catch (Exception e) {
72+
warn(e);
73+
}
74+
}
75+
}
76+
}
77+
}
78+
79+
protected void putProp(String name, DSIObject obj) {
80+
put(name, obj).setReadOnly(true).setTransient(true);
81+
}
82+
83+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.iot.dsa.profiler;
2+
3+
import java.lang.management.MemoryManagerMXBean;
4+
import java.lang.management.PlatformManagedObject;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class MemoryManagerNode extends MXBeanNode {
9+
10+
private MemoryManagerMXBean mxbean;
11+
12+
public MemoryManagerNode() {
13+
}
14+
15+
public MemoryManagerNode(MemoryManagerMXBean mxbean) {
16+
this.mxbean = mxbean;
17+
}
18+
19+
@Override
20+
public void setupMXBean() {
21+
if (mxbean == null) {
22+
getParent().remove(getInfo());
23+
}
24+
}
25+
26+
@Override
27+
public void refreshImpl() {
28+
// TODO Auto-generated method stub
29+
30+
}
31+
32+
@Override
33+
public PlatformManagedObject getMXBean() {
34+
return mxbean;
35+
}
36+
37+
@Override
38+
public Class<? extends PlatformManagedObject> getMXInterface() {
39+
return MemoryManagerMXBean.class;
40+
}
41+
42+
private static List<String> overriden = new ArrayList<String>();
43+
44+
@Override
45+
public List<String> getOverriden() {
46+
return overriden;
47+
}
48+
49+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.iot.dsa.profiler;
2+
3+
import java.lang.management.ManagementFactory;
4+
import java.lang.management.MemoryMXBean;
5+
import java.lang.management.PlatformManagedObject;
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
public class MemoryNode extends MXBeanNode {
10+
11+
private MemoryMXBean mxbean;
12+
13+
@Override
14+
public void setupMXBean() {
15+
mxbean = ManagementFactory.getMemoryMXBean();
16+
}
17+
18+
@Override
19+
public void refreshImpl() {
20+
// TODO Auto-generated method stub
21+
}
22+
23+
@Override
24+
public PlatformManagedObject getMXBean() {
25+
return mxbean;
26+
}
27+
28+
@Override
29+
public Class<? extends PlatformManagedObject> getMXInterface() {
30+
return MemoryMXBean.class;
31+
}
32+
33+
private static List<String> overriden = new ArrayList<String>();
34+
35+
@Override
36+
public List<String> getOverriden() {
37+
return overriden;
38+
}
39+
40+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.iot.dsa.profiler;
2+
3+
import java.lang.management.MemoryPoolMXBean;
4+
import java.lang.management.PlatformManagedObject;
5+
import java.util.ArrayList;
6+
import java.util.List;
7+
8+
public class MemoryPoolNode extends MXBeanNode {
9+
10+
private MemoryPoolMXBean mxbean;
11+
12+
public MemoryPoolNode() {
13+
}
14+
15+
public MemoryPoolNode(MemoryPoolMXBean mxbean) {
16+
this.mxbean = mxbean;
17+
}
18+
19+
@Override
20+
public void setupMXBean() {
21+
if (mxbean == null) {
22+
getParent().remove(getInfo());
23+
}
24+
}
25+
26+
@Override
27+
public void refreshImpl() {
28+
// TODO Auto-generated method stub
29+
30+
}
31+
32+
@Override
33+
public PlatformManagedObject getMXBean() {
34+
return mxbean;
35+
}
36+
37+
@Override
38+
public Class<? extends PlatformManagedObject> getMXInterface() {
39+
return MemoryPoolMXBean.class;
40+
}
41+
42+
private static List<String> overriden = new ArrayList<String>();
43+
44+
@Override
45+
public List<String> getOverriden() {
46+
return overriden;
47+
}
48+
49+
}

0 commit comments

Comments
 (0)