1 // ======================================================================== 2 // Copyright (c) Webtide LLC 3 // ------------------------------------------------------------------------ 4 // All rights reserved. This program and the accompanying materials 5 // are made available under the terms of the Eclipse Public License v1.0 6 // and Apache License v2.0 which accompanies this distribution. 7 // The Eclipse Public License is available at 8 // http://www.eclipse.org/legal/epl-v10.html 9 // The Apache License v2.0 is available at 10 // http://www.opensource.org/licenses/apache2.0.php 11 // You may elect to redistribute this code under either of these licenses. 12 // ======================================================================== 13 14 15 package org.eclipse.jetty.monitor.thread; 16 17 18 /* ------------------------------------------------------------ */ 19 /** 20 */ 21 public class ThreadMonitorInfo 22 { 23 private Thread _thread; 24 private StackTraceElement[] _stackTrace; 25 26 private boolean _threadSpinning = false; 27 private int _traceCount = -1; 28 29 private long _prevCpuTime; 30 private long _prevSampleTime; 31 private long _currCpuTime; 32 private long _currSampleTime; 33 34 35 /* ------------------------------------------------------------ */ 36 /** 37 * Instantiates a new thread monitor info. 38 * 39 * @param thread the thread this object is created for 40 */ 41 public ThreadMonitorInfo(Thread thread) 42 { 43 _thread = thread; 44 } 45 46 /* ------------------------------------------------------------ */ 47 /** 48 * @return Id of the thread 49 */ 50 public long getThreadId() 51 { 52 return _thread.getId(); 53 } 54 55 /* ------------------------------------------------------------ */ 56 /** 57 * Gets the thread name. 58 * 59 * @return the thread name 60 */ 61 public String getThreadName() 62 { 63 return _thread.getName(); 64 } 65 66 /* ------------------------------------------------------------ */ 67 /** 68 * Gets the thread state. 69 * 70 * @return the thread state 71 */ 72 public String getThreadState() 73 { 74 return _thread.getState().toString(); 75 } 76 77 /* ------------------------------------------------------------ */ 78 /** 79 * Gets the stack trace. 80 * 81 * @return the stack trace 82 */ 83 public StackTraceElement[] getStackTrace() 84 { 85 return _stackTrace; 86 } 87 88 /* ------------------------------------------------------------ */ 89 /** 90 * Sets the stack trace. 91 * 92 * @param stackTrace the new stack trace 93 */ 94 public void setStackTrace(StackTraceElement[] stackTrace) 95 { 96 _stackTrace = stackTrace; 97 } 98 99 /* ------------------------------------------------------------ */ 100 /** 101 * Checks if is spinning. 102 * 103 * @return true, if is spinning 104 */ 105 public boolean isSpinning() 106 { 107 return _threadSpinning; 108 } 109 110 /* ------------------------------------------------------------ */ 111 /** 112 * Sets the spinning flag. 113 * 114 * @param value the new value 115 */ 116 public void setSpinning(boolean value) 117 { 118 _threadSpinning = value; 119 } 120 121 /* ------------------------------------------------------------ */ 122 /** 123 * Sets the trace count. 124 * 125 * @param traceCount the new trace count 126 */ 127 public void setTraceCount(int traceCount) 128 { 129 _traceCount = traceCount; 130 } 131 132 /* ------------------------------------------------------------ */ 133 /** 134 * Gets the trace count. 135 * 136 * @return the trace count 137 */ 138 public int getTraceCount() 139 { 140 return _traceCount; 141 } 142 143 /* ------------------------------------------------------------ */ 144 /** 145 * @return the CPU time of the thread 146 */ 147 public long getCpuTime() 148 { 149 return _currCpuTime; 150 } 151 152 /* ------------------------------------------------------------ */ 153 /** 154 * Set the CPU time. 155 * 156 * @param ns new CPU time 157 */ 158 public void setCpuTime(long ns) 159 { 160 _prevCpuTime = _currCpuTime; 161 _currCpuTime = ns; 162 } 163 164 /* ------------------------------------------------------------ */ 165 /** 166 * @return the time of sample 167 */ 168 public long getSampleTime() 169 { 170 return _currSampleTime; 171 } 172 173 /* ------------------------------------------------------------ */ 174 /** 175 * Sets the sample time. 176 * 177 * @param ns the time of sample 178 */ 179 public void setSampleTime(long ns) 180 { 181 _prevSampleTime = _currSampleTime; 182 _currSampleTime = ns; 183 } 184 185 /* ------------------------------------------------------------ */ 186 /** 187 * Gets the CPU utilization. 188 * 189 * @return the CPU utilization percentage 190 */ 191 public float getCpuUtilization() 192 { 193 long elapsedCpuTime = _currCpuTime - _prevCpuTime; 194 long elapsedNanoTime = _currSampleTime - _prevSampleTime; 195 196 return elapsedNanoTime > 0 ? Math.min((elapsedCpuTime * 100.0f) / elapsedNanoTime, 100.0f) : 0; 197 } 198 }