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