11package com .splunk .splunkjenkins ;
22
3+ import com .splunk .splunkjenkins .model .EventType ;
34import com .splunk .splunkjenkins .utils .SplunkLogService ;
45import hudson .Extension ;
56import hudson .model .*;
67import hudson .model .Queue ;
78import jenkins .model .Jenkins ;
89
910import java .io .IOException ;
10- import java .lang .reflect .Method ;
11+ import java .lang .management .ManagementFactory ;
12+ import java .lang .management .MemoryPoolMXBean ;
13+ import java .lang .management .MemoryUsage ;
1114import java .util .*;
1215import java .util .concurrent .TimeUnit ;
1316
1821import static com .splunk .splunkjenkins .utils .LogEventHelper .getMasterStats ;
1922import static com .splunk .splunkjenkins .utils .LogEventHelper .getRunningJob ;
2023import static com .splunk .splunkjenkins .utils .LogEventHelper .getSlaveStats ;
21- import static org .apache .commons .lang .reflect .MethodUtils .getAccessibleMethod ;
2224
2325@ Extension
2426public class HealthMonitor extends AsyncPeriodicWork {
@@ -41,11 +43,11 @@ protected void execute(TaskListener listener) throws IOException, InterruptedExc
4143 return ;
4244 }
4345 lastAccessTime = System .currentTimeMillis ();
44- sendSlaveUpdate ();
45- listener .getLogger ().println ("execute sendSlaveUpdate " );
46+ sendNodeUpdate ();
47+ listener .getLogger ().println ("execute sendNodeUpdate " );
4648 }
4749
48- private void sendSlaveUpdate () {
50+ private void sendNodeUpdate () {
4951 Map <String , Map <String , Object >> slaveStats = getSlaveStats ();
5052 Set <String > aliveSlaves = slaveStats .keySet ();
5153 //send event one by one instead of list to aid search
@@ -61,14 +63,28 @@ private void sendSlaveUpdate() {
6163 }
6264 }
6365 SplunkLogService .getInstance ().sendBatch (removedSlavs , SLAVE_INFO );
64- SplunkLogService .getInstance ().sendBatch (getRunningJob (),QUEUE_INFO );
66+ SplunkLogService .getInstance ().sendBatch (getRunningJob (), QUEUE_INFO );
6567 //replace slave names, at one time should only one thread is running, so modify slaveNames is safe without lock
6668 slaveNames = aliveSlaves ;
6769 //update master stats
6870 Map masterEvent = getMasterStats ();
6971 masterEvent .put ("item" , name );
7072 masterEvent .put (Constants .TAG , Constants .QUEUE_TAG_NAME );
7173 SplunkLogService .getInstance ().send (masterEvent , QUEUE_INFO );
74+ //send memory details
75+ List <Map > memoryUsages = new ArrayList ();
76+ for (MemoryPoolMXBean memoryPoolMXBean : ManagementFactory .getMemoryPoolMXBeans ()) {
77+ Map <String , Object > memoryPoolUsage = new HashMap ();
78+ MemoryUsage usageDetail = memoryPoolMXBean .getUsage ();
79+ memoryPoolUsage .put (Constants .TAG , "jvm_memory" );
80+ memoryPoolUsage .put ("memory_pool" , memoryPoolMXBean .getName ());
81+ memoryPoolUsage .put ("init_size" , usageDetail .getInit () >> 20 );
82+ memoryPoolUsage .put ("max_size" , usageDetail .getMax () >> 20 );
83+ memoryPoolUsage .put ("committed_size" , usageDetail .getCommitted () >> 20 );
84+ memoryPoolUsage .put ("used_size" , usageDetail .getUsed () >> 20 );
85+ memoryUsages .add (memoryPoolUsage );
86+ }
87+ SplunkLogService .getInstance ().sendBatch (memoryUsages , EventType .QUEUE_INFO );
7288 }
7389
7490 private void sendPendingQueue () {
0 commit comments