Skip to content

Commit 0cfaf5c

Browse files
authored
0.37.0
- Set Profiler to auto-refresh subscribed properties on a 5 second interval - Add "Get Thread Dump" action to sys/Profiler/Thread, which returns a full thread dump - Remove dependency on Java 1.7 (by removing references to PlatformManagedObject) - Suppress expected InvocationTargetExceptions during profiler setup - Add unit test for basic profiler features
1 parent bc6643b commit 0cfaf5c

File tree

14 files changed

+250
-51
lines changed

14 files changed

+250
-51
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ subprojects {
44
apply plugin: 'maven'
55

66
group 'org.iot-dsa'
7-
version '0.36.0'
7+
version '0.37.0'
88

99
sourceCompatibility = 1.6
1010
targetCompatibility = 1.6

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.lang.management.ClassLoadingMXBean;
44
import java.lang.management.ManagementFactory;
5-
import java.lang.management.PlatformManagedObject;
65
import java.util.ArrayList;
76
import java.util.List;
87

@@ -20,12 +19,12 @@ public void refreshImpl() {
2019
}
2120

2221
@Override
23-
public PlatformManagedObject getMXBean() {
22+
public Object getMXBean() {
2423
return mxbean;
2524
}
2625

2726
@Override
28-
public Class<? extends PlatformManagedObject> getMXInterface() {
27+
public Class<? extends Object> getMXInterface() {
2928
return ClassLoadingMXBean.class;
3029
}
3130

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.lang.management.CompilationMXBean;
44
import java.lang.management.ManagementFactory;
5-
import java.lang.management.PlatformManagedObject;
65
import java.util.ArrayList;
76
import java.util.List;
87
import org.iot.dsa.node.DSString;
@@ -23,12 +22,12 @@ public void refreshImpl() {
2322
}
2423

2524
@Override
26-
public PlatformManagedObject getMXBean() {
25+
public Object getMXBean() {
2726
return mxbean;
2827
}
2928

3029
@Override
31-
public Class<? extends PlatformManagedObject> getMXInterface() {
30+
public Class<? extends Object> getMXInterface() {
3231
return CompilationMXBean.class;
3332
}
3433

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.acuity.iot.dsa.dslink.sys.profiler;
22

33
import java.lang.management.GarbageCollectorMXBean;
4-
import java.lang.management.PlatformManagedObject;
54
import java.util.ArrayList;
65
import java.util.List;
76
import org.iot.dsa.node.DSString;
@@ -31,12 +30,12 @@ public void refreshImpl() {
3130
}
3231

3332
@Override
34-
public PlatformManagedObject getMXBean() {
33+
public Object getMXBean() {
3534
return mxbean;
3635
}
3736

3837
@Override
39-
public Class<? extends PlatformManagedObject> getMXInterface() {
38+
public Class<? extends Object> getMXInterface() {
4039
return GarbageCollectorMXBean.class;
4140
}
4241

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.acuity.iot.dsa.dslink.sys.profiler;
22

3-
import java.lang.management.PlatformManagedObject;
3+
import java.lang.management.MemoryPoolMXBean;
44
import java.lang.reflect.Method;
55
import java.util.List;
6+
import org.iot.dsa.DSRuntime;
7+
import org.iot.dsa.DSRuntime.Timer;
68
import org.iot.dsa.node.DSIObject;
79
import org.iot.dsa.node.DSInfo;
810
import org.iot.dsa.node.DSNode;
@@ -11,7 +13,9 @@
1113
import org.iot.dsa.node.action.ActionResult;
1214
import org.iot.dsa.node.action.DSAction;
1315

14-
public abstract class MXBeanNode extends DSNode {
16+
public abstract class MXBeanNode extends DSNode implements Runnable {
17+
18+
private Timer pollTimer;
1519

1620
private static DSAction refreshAction = new DSAction() {
1721
@Override
@@ -31,6 +35,23 @@ protected void declareDefaults() {
3135
protected void onStable() {
3236
setupMXBean();
3337
refresh();
38+
setupPolling();
39+
}
40+
41+
private void setupPolling() {
42+
pollTimer = DSRuntime.run(this, 0, 5000);
43+
}
44+
45+
@Override
46+
public void run() {
47+
if (isTreeSubscribed()) {
48+
refresh();
49+
}
50+
}
51+
52+
@Override
53+
protected void onStopped() {
54+
pollTimer.cancel();
3455
}
3556

3657
private void refresh() {
@@ -42,15 +63,15 @@ private void refresh() {
4263

4364
public abstract void refreshImpl();
4465

45-
public abstract PlatformManagedObject getMXBean();
66+
public abstract Object getMXBean();
4667

47-
public abstract Class<? extends PlatformManagedObject> getMXInterface();
68+
public abstract Class<? extends Object> getMXInterface();
4869

4970
public abstract List<String> getOverriden();
5071

5172
public void discover() {
52-
PlatformManagedObject bean = getMXBean();
53-
Class<? extends PlatformManagedObject> clazz = getMXInterface();
73+
Object bean = getMXBean();
74+
Class<? extends Object> clazz = getMXInterface();
5475
for (Method meth : clazz.getMethods()) {
5576
String methName = meth.getName();
5677
if (meth.getParameterCount() == 0 && meth.getReturnType() != Void.TYPE) {
@@ -68,7 +89,11 @@ public void discover() {
6889
putProp(name,
6990
o != null ? ProfilerUtils.objectToDSIValue(o) : DSString.EMPTY);
7091
} catch (Exception e) {
71-
debug(e);
92+
if (bean instanceof MemoryPoolMXBean && (name.startsWith("UsageThreshold") || name.startsWith("CollectionUsageThreshold"))) {
93+
// ignore
94+
} else {
95+
debug("Exception when invoking " + clazz.getName() + "." + meth.getName() + " on " + getName() + ": ", e);
96+
}
7297
}
7398
}
7499
}
@@ -78,5 +103,4 @@ public void discover() {
78103
protected void putProp(String name, DSIObject obj) {
79104
put(name, obj).setReadOnly(true).setTransient(true);
80105
}
81-
82106
}

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.acuity.iot.dsa.dslink.sys.profiler;
22

33
import java.lang.management.MemoryManagerMXBean;
4-
import java.lang.management.PlatformManagedObject;
54
import java.util.ArrayList;
65
import java.util.List;
76

@@ -30,12 +29,12 @@ public void refreshImpl() {
3029
}
3130

3231
@Override
33-
public PlatformManagedObject getMXBean() {
32+
public Object getMXBean() {
3433
return mxbean;
3534
}
3635

3736
@Override
38-
public Class<? extends PlatformManagedObject> getMXInterface() {
37+
public Class<? extends Object> getMXInterface() {
3938
return MemoryManagerMXBean.class;
4039
}
4140

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.lang.management.ManagementFactory;
44
import java.lang.management.MemoryMXBean;
5-
import java.lang.management.PlatformManagedObject;
65
import java.util.ArrayList;
76
import java.util.List;
87

@@ -21,12 +20,12 @@ public void refreshImpl() {
2120
}
2221

2322
@Override
24-
public PlatformManagedObject getMXBean() {
23+
public Object getMXBean() {
2524
return mxbean;
2625
}
2726

2827
@Override
29-
public Class<? extends PlatformManagedObject> getMXInterface() {
28+
public Class<? extends Object> getMXInterface() {
3029
return MemoryMXBean.class;
3130
}
3231

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.acuity.iot.dsa.dslink.sys.profiler;
22

33
import java.lang.management.MemoryPoolMXBean;
4-
import java.lang.management.PlatformManagedObject;
54
import java.util.ArrayList;
65
import java.util.List;
76

@@ -25,17 +24,15 @@ public void setupMXBean() {
2524

2625
@Override
2726
public void refreshImpl() {
28-
// TODO Auto-generated method stub
29-
3027
}
3128

3229
@Override
33-
public PlatformManagedObject getMXBean() {
30+
public Object getMXBean() {
3431
return mxbean;
3532
}
3633

3734
@Override
38-
public Class<? extends PlatformManagedObject> getMXInterface() {
35+
public Class<? extends Object> getMXInterface() {
3936
return MemoryPoolMXBean.class;
4037
}
4138

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.lang.management.ManagementFactory;
44
import java.lang.management.OperatingSystemMXBean;
5-
import java.lang.management.PlatformManagedObject;
65
import java.util.ArrayList;
76
import java.util.List;
87

@@ -22,12 +21,12 @@ public void refreshImpl() {
2221
}
2322

2423
@Override
25-
public PlatformManagedObject getMXBean() {
24+
public Object getMXBean() {
2625
return mxbean;
2726
}
2827

2928
@Override
30-
public Class<? extends PlatformManagedObject> getMXInterface() {
29+
public Class<? extends Object> getMXInterface() {
3130
return OperatingSystemMXBean.class;
3231
}
3332

dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.acuity.iot.dsa.dslink.sys.profiler;
22

33
import java.lang.management.ManagementFactory;
4-
import java.lang.management.PlatformManagedObject;
54
import java.lang.management.RuntimeMXBean;
65
import java.time.Instant;
76
import java.util.ArrayList;
@@ -46,12 +45,12 @@ public void refreshImpl() {
4645
}
4746

4847
@Override
49-
public PlatformManagedObject getMXBean() {
48+
public Object getMXBean() {
5049
return mxbean;
5150
}
5251

5352
@Override
54-
public Class<? extends PlatformManagedObject> getMXInterface() {
53+
public Class<? extends Object> getMXInterface() {
5554
return RuntimeMXBean.class;
5655
}
5756

0 commit comments

Comments
 (0)