Source code: com/webobjects/woextensions/WOStatsPage.java
1 /*
2 * WOStatsPage.java
3 * © Copyright 2001 Apple Computer, Inc. All rights reserved.
4 * This a modified version.
5 * Original license: http://www.opensource.apple.com/apsl/
6 */
7
8 package com.webobjects.woextensions;
9
10 import java.util.*;
11 import com.webobjects.appserver.*;
12 import com.webobjects.foundation.*;
13
14 import java.net.UnknownHostException;
15
16 public class WOStatsPage extends WOComponent {
17 public NSDictionary detailsDict;
18 public NSDictionary pagesDict;
19 public NSDictionary directActionsDict;
20 public NSDictionary sessionMemoryDict;
21 public NSDictionary transactions;
22 public NSDictionary statsDict;
23 public NSDictionary memoryDict;
24 public NSArray sessionStats;
25 public NSMutableDictionary sessionsDict;
26 public long maxPageCount;
27 public long maxActionCount;
28 public NSTimestamp maxSessionsDate;
29 public String userName;
30 public Object currentKey;
31 public Object currentItem;
32 public String password;
33
34 public WOStatsPage(WOContext aContext) {
35 super(aContext);
36 }
37
38 public WOComponent submit() {
39 session().validateStatisticsLogin(password, userName);
40 return this;
41 }
42
43 public String host() throws UnknownHostException {
44 if (WOApplication.application().host() != null) {
45 return WOApplication.application().host();
46 }
47 return java.net.InetAddress.getLocalHost().getHostName();
48 }
49
50 public String instance() {
51 int instance = context().request().applicationNumber();
52 return ""+instance;
53 }
54
55 protected long _maxServedForDictionary(NSDictionary aDictionary) {
56 long aMaxServedCount = 0;
57 NSDictionary aPage = null;
58 Enumeration aPageEnumerator = aDictionary.objectEnumerator();
59 while (aPageEnumerator.hasMoreElements()) {
60 aPage = (NSDictionary)aPageEnumerator.nextElement();
61 long newCount = ((Long)aPage.objectForKey("Served")).longValue();
62 aMaxServedCount += newCount;
63 }
64 return aMaxServedCount;
65 }
66
67 public void _initIvars() {
68 statsDict = WOApplication.application().statistics();
69 pagesDict = (NSDictionary)statsDict.objectForKey("Pages");
70 directActionsDict = (NSDictionary)statsDict.objectForKey("DirectActions");
71 detailsDict = (NSDictionary)statsDict.objectForKey("Details");
72 transactions = (NSDictionary)statsDict.objectForKey("Transactions");
73 memoryDict = (NSDictionary)statsDict.objectForKey("Memory");
74 sessionsDict = ((NSDictionary)statsDict.objectForKey("Sessions")).mutableClone();
75 sessionMemoryDict = (NSDictionary)sessionsDict.removeObjectForKey("Avg. Memory Per Session");
76 sessionStats = (NSArray)sessionsDict.removeObjectForKey("Last Session's Statistics");
77 maxSessionsDate = (NSTimestamp) sessionsDict.removeObjectForKey("Peak Active Sessions Date");
78
79
80 maxPageCount = 0;
81 maxActionCount = 0;
82 long currentCount;
83 int i;
84
85 maxPageCount = _maxServedForDictionary(pagesDict);
86 maxActionCount = _maxServedForDictionary(directActionsDict);
87 }
88
89 public void appendToResponse(WOResponse aResponse, WOContext aContext) {
90 // ** This should probably be somewhere else.
91 _initIvars();
92 super.appendToResponse(aResponse, aContext);
93 }
94
95 public long pageCount() {
96 return ((Long)((NSDictionary)currentItem).objectForKey("Served")).longValue();
97 }
98
99 public double pageAvg() {
100 return ((Double)((NSDictionary)currentItem).objectForKey("Avg Resp. Time")).doubleValue();
101 }
102
103 public double pageMin() {
104 return ((Double)((NSDictionary)currentItem).objectForKey("Min Resp. Time")).doubleValue();
105 }
106
107 public double pageMax() {
108 return ((Double)((NSDictionary)currentItem).objectForKey("Max Resp. Time")).doubleValue();
109 }
110
111 public long detailCount() {
112 return ((Long)detailsDict.objectForKey(currentKey)).longValue();
113 }
114
115 public void setDetailPercent(String aValue) {
116 }
117
118 public long detailPercent() {
119 double aTransactionsCount = ((Number)transactions.objectForKey("Transactions") ).doubleValue();
120 double aDetailCount = (double)detailCount();
121 if (aTransactionsCount > 0L) {
122 return (long)((aDetailCount / aTransactionsCount) * 100);
123 } else {
124 return 0;
125 }
126 }
127
128 public Long componentActionTransactions() {
129 return (Long)transactions.objectForKey("Component Action Transactions");
130 }
131
132 public Long directActionTransactions() {
133 return (Long)transactions.objectForKey("Direct Action Transactions");
134 }
135
136 public Double avgComponentActionTransactions() {
137 return (Double)transactions.objectForKey("Component Action Avg. Transaction Time");
138 }
139
140 public Double avgDirectActionTransactions() {
141 return (Double)transactions.objectForKey("Direct Action Avg. Transaction Time");
142 }
143
144 public Double avgTransactionTime() {
145 return (Double)transactions.objectForKey("Avg. Transaction Time");
146 }
147
148 public Double avgIdleTime() {
149 return (Double)transactions.objectForKey("Avg. Idle Time");
150 }
151
152 public Double movingAvgTransactionTime() {
153 return (Double)transactions.objectForKey("Moving Avg. Transaction Time");
154 }
155
156 public Double movingAvgIdleTime() {
157 return (Double)transactions.objectForKey("Moving Avg. Idle Time");
158 }
159
160 public Long movingAvgSampleSize() {
161 return (Long)transactions.objectForKey("Sample Size For Moving Avg.");
162 }
163
164 public String runningTime() {
165 long aRunningTime = System.currentTimeMillis()-((NSTimestamp)statsDict.objectForKey("StartedAt")).getTime();
166 String aRunningTimeString = WOStatsPage._timeIntervalDescription(aRunningTime);
167 return aRunningTimeString;
168 }
169
170 public boolean isLogPath() {
171 if (statsDict.objectForKey("LogFile")!=null) {
172 return true;
173 }
174 return false;
175 }
176
177 public boolean isLastUser() {
178 if (sessionStats!=null && (sessionStats.count() != 0)) {
179 return true;
180 }
181 return false;
182 }
183
184 public long actionCount() {
185 return ((Long)((NSDictionary)currentItem).objectForKey("Served")).longValue();
186 }
187
188 public double actionAvg() {
189 return ((Double)((NSDictionary)currentItem).objectForKey("Avg Resp. Time")).doubleValue();
190 }
191
192 public double actionMin() {
193 return ((Double)((NSDictionary)currentItem).objectForKey("Min Resp. Time")).doubleValue();
194 }
195
196 public double actionMax() {
197 return ((Double)((NSDictionary)currentItem).objectForKey("Max Resp. Time")).doubleValue();
198 }
199
200 protected static String _timeIntervalDescription(long aTimeInterval) {
201 String aTimeIntervalString;
202 long timeInterval = aTimeInterval / 1000;
203 long days;
204 long hours;
205 long minutes;
206 long seconds;
207
208 days = (timeInterval / (60*60*24));
209 timeInterval = timeInterval - (days * (60*60*24));
210
211 hours = (timeInterval / (60*60));
212 timeInterval = timeInterval - (hours * (60*60));
213
214 minutes = (timeInterval / (60));
215 timeInterval = timeInterval - (minutes * (60));
216
217 seconds = timeInterval;
218
219 aTimeIntervalString = days+" days, "+hours+" hours, "+minutes+" minutes, "+seconds+" seconds";
220 return aTimeIntervalString;
221 }
222
223 public String vendorDescription() {
224 return System.getProperty("java.vendor");
225 }
226
227 public String vendorURL() {
228 return System.getProperty("java.vendor.url");
229 }
230
231 public boolean vendorURLdisabled() {
232 String url = vendorURL();
233 if (url == null || url.length() == 0)
234 return true;
235 return false;
236 }
237
238 public String jdkVersion() {
239 return System.getProperty("java.version");
240 }
241
242 public String operatingSystem() {
243 return System.getProperty("os.name") + " " + System.getProperty("os.version") + " " + System.getProperty("os.arch");
244 }
245
246 }