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