clockwerk-opensim – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | vero | 1 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
2 | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
||
3 | <html xmlns="http://www.w3.org/1999/xhtml"> |
||
4 | <head> |
||
5 | <title>Simulator statistics</title> |
||
6 | <link rel="stylesheet" href="sim.css" type="text/css"/> |
||
7 | <!-- <script type="text/javascript" src="jquery.js"></script> --> |
||
8 | <!-- <script type="text/javascript" src="https://code.jquery.com/jquery-1.9.0.min.js"></script> --> |
||
9 | <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> |
||
10 | <!-- <script type="text/javascript" src="https://ajax.aspnetcdn.com/ajax/libs/jQuery/jquery-1.9.0.min.js"></script> --> |
||
11 | <noscript> |
||
12 | <p color="red"> |
||
13 | Your browser does not support Javascript. This won't work for you. |
||
14 | </p> |
||
15 | </noscript> |
||
16 | <script type="text/javascript"> |
||
17 | $(document).ready(function() { |
||
18 | // Major divisions in the content accordioning |
||
19 | $('.SimSection').show('slow'); |
||
20 | $('.SimSectionHeader').click(function() { |
||
21 | $(this).next().slideToggle('slow'); |
||
22 | return false; |
||
23 | }); |
||
24 | |||
25 | // Start the timed functions |
||
26 | TimerDataStuff(); |
||
27 | }); |
||
28 | |||
29 | // One of the sections is viewer statistics. Poll for the data. |
||
30 | var statTimerHandle; |
||
31 | var graphFPS; |
||
32 | var lastFPS = 10; |
||
33 | var xxThru = 0; |
||
34 | function TimerDataStuff() { |
||
35 | statTimerHandle = setInterval('TimerStatDisplay()', 5000); |
||
36 | } |
||
37 | |||
38 | // called by timer to fetch and display statistic information |
||
39 | var doingStatDisplay = false; |
||
40 | function TimerStatDisplay() { |
||
41 | if (doingStatDisplay) return; |
||
42 | doingStatDisplay = true; |
||
43 | if ($('#SimSimStats').is(':visible')) { |
||
44 | DisplaySimStats(); |
||
45 | } |
||
46 | if ($('#SimRegionStats').is(':visible')) { |
||
47 | DisplayPerRegionStats(); |
||
48 | } |
||
49 | if ($('#SimSessionStats').is(':visible')) { |
||
50 | DisplaySessionStats(); |
||
51 | } |
||
52 | if ($('#SimLogFile').is(':visible')) { |
||
53 | DisplayLogFile(); |
||
54 | } |
||
55 | doingStatDisplay = false; |
||
56 | } |
||
57 | |||
58 | var simName = "127.0.0.1"; |
||
59 | var simPort = "9000"; |
||
60 | function DisplaySimStats() { |
||
61 | var statURL = "http://" + simName + ":" + simPort + "/SStats/?json=1"; |
||
62 | $.ajax({ |
||
63 | type: "GET", |
||
64 | url: statURL, |
||
65 | dataType: 'json', |
||
66 | timeout: 1000, |
||
67 | success: function(data, status) { |
||
68 | if (status == 'success') { |
||
69 | DisplaySimStatDetails(data); |
||
70 | } |
||
71 | }, |
||
72 | error: function(xmlHTTPRequest, errorType) { |
||
73 | // DebugLog('Failed fetch'); |
||
74 | } |
||
75 | }); |
||
76 | } |
||
77 | |||
78 | function DisplayPerRegionStats() { |
||
79 | var statURL = "http://" + simName + ":" + simPort + "/SStats/simstatsajax.html?json=1"; |
||
80 | $.ajax({ |
||
81 | type: "GET", |
||
82 | url: statURL, |
||
83 | dataType: 'json', |
||
84 | timeout: 1000, |
||
85 | success: function(data, status) { |
||
86 | if (status == 'success') { |
||
87 | DisplayRegionStatDetails(data); |
||
88 | } |
||
89 | }, |
||
90 | error: function(xmlHTTPRequest, errorType) { |
||
91 | // DebugLog('Failed fetch'); |
||
92 | } |
||
93 | }); |
||
94 | }; |
||
95 | |||
96 | function DisplayLogFile() { |
||
97 | var statURL = "http://" + simName + ":" + simPort + "/SStats/activelogajax.html?json=1"; |
||
98 | $.ajax({ |
||
99 | type: "GET", |
||
100 | url: statURL, |
||
101 | dataType: 'json', |
||
102 | timeout: 1000, |
||
103 | success: function(data, status) { |
||
104 | if (status == 'success') { |
||
105 | DisplayLogFileDetails(data); |
||
106 | } |
||
107 | }, |
||
108 | error: function(xmlHTTPRequest, errorType) { |
||
109 | // DebugLog('Failed fetch'); |
||
110 | } |
||
111 | }); |
||
112 | }; |
||
113 | |||
114 | function DisplaySessionStats() { |
||
115 | var statURL = "http://" + simName + ":" + simPort + "/SStats/activeconnectionsajax.html?json=1"; |
||
116 | $.ajax({ |
||
117 | type: "GET", |
||
118 | url: statURL, |
||
119 | dataType: 'json', |
||
120 | timeout: 1000, |
||
121 | success: function(data, status) { |
||
122 | if (status == 'success') { |
||
123 | DisplaySessionStatsDetails(data); |
||
124 | } |
||
125 | }, |
||
126 | error: function(xmlHTTPRequest, errorType) { |
||
127 | // DebugLog('Failed fetch'); |
||
128 | } |
||
129 | }); |
||
130 | }; |
||
131 | |||
132 | function DisplaySimStatDetails(data) { |
||
133 | var simInfo = new StringBuffer(); |
||
134 | simInfo.append('<table id="RegionStatsTable">'); |
||
135 | simInfo.append('<tr>'); |
||
136 | simInfo.append('<th>Total Users</th>'); |
||
137 | simInfo.append('<th>Total Sessions</th>'); |
||
138 | simInfo.append('<th>Avg client FPS</th>'); |
||
139 | simInfo.append('<th>Avg client Mem</th>'); |
||
140 | simInfo.append('<th>Avg ping time</th>'); |
||
141 | simInfo.append('<th>KB out</th>'); |
||
142 | simInfo.append('<th>KB in</th>'); |
||
143 | simInfo.append('</tr>'); |
||
144 | simInfo.append('<tr>'); |
||
145 | simInfo.append('<td>' + data.totalUsers + '</td>'); |
||
146 | simInfo.append('<td>' + data.totalSessions + '</td>'); |
||
147 | simInfo.append('<td>' + data.averageClientFPS + '</td>'); |
||
148 | simInfo.append('<td>' + data.averageClientMem + '</td>'); |
||
149 | simInfo.append('<td>' + data.averagePingTime + '</td>'); |
||
150 | simInfo.append('<td>' + data.totalKBOut + '</td>'); |
||
151 | simInfo.append('<td>' + data.totalKBIn + '</td>'); |
||
152 | simInfo.append('</tr>'); |
||
153 | simInfo.append('</table>'); |
||
154 | $('#SimSimStats').empty(); |
||
155 | $('#SimSimStats').append(simInfo.toString()); |
||
156 | } |
||
157 | |||
158 | function DisplayRegionStatDetails(data) { |
||
159 | var regionInfo = new StringBuffer(); |
||
160 | regionInfo.append('<table id="RegionStatsTable">'); |
||
161 | regionInfo.append('<tr>'); |
||
162 | regionInfo.append('<th>Region</th>'); |
||
163 | regionInfo.append('<th>Agents</th>'); |
||
164 | regionInfo.append('<th>Child</th>'); |
||
165 | regionInfo.append('<th>FPS</th>'); |
||
166 | regionInfo.append('<th>Frame Time</th>'); |
||
167 | regionInfo.append('<th>Phys Time</th>'); |
||
168 | regionInfo.append('<th>Prims</th>'); |
||
169 | regionInfo.append('</tr>'); |
||
170 | for (region in data) { |
||
171 | regionInfo.append('<tr>'); |
||
172 | regionInfo.append('<td>' + data[region].region + '</td>'); |
||
173 | regionInfo.append('<td>' + data[region].rootAgents + '</td>'); |
||
174 | regionInfo.append('<td>' + data[region].childAgents + '</td>'); |
||
175 | regionInfo.append('<td>' + data[region].simFPS + '</td>'); |
||
176 | regionInfo.append('<td>' + data[region].totalFrameTime + '</td>'); |
||
177 | regionInfo.append('<td>' + data[region].physicsFrameTime + '</td>'); |
||
178 | regionInfo.append('<td>' + data[region].totalPrims + '</td>'); |
||
179 | regionInfo.append('</tr>'); |
||
180 | } |
||
181 | regionInfo.append('</table>'); |
||
182 | $('#SimRegionStats').empty(); |
||
183 | $('#SimRegionStats').append(regionInfo.toString()); |
||
184 | } |
||
185 | |||
186 | function DisplayLogFileDetails(data) { |
||
187 | var logInfo = new StringBuffer(); |
||
188 | var logPattern = /^(.+),\d\d\d .* \[(.+)\]: (.+)$/; |
||
189 | for (logLine in data['logLines']) { |
||
190 | logInfo.append('<div>'); |
||
191 | var logPieces = logPattern.exec(data['logLines'][logLine]); |
||
192 | if (logPieces) { |
||
193 | logInfo.append(logPieces[1] + ' [' + logPieces[2] |
||
194 | + '] ' + logPieces[3]); |
||
195 | } |
||
196 | else { |
||
197 | logInfo.append(data['logLines'][logLine]); |
||
198 | } |
||
199 | |||
200 | logInfo.append('</div>'); |
||
201 | } |
||
202 | $('#SimLogFile').empty(); |
||
203 | $('#SimLogFile').append(logInfo.toString()); |
||
204 | } |
||
205 | |||
206 | function DisplaySessionStatsDetails(data) { |
||
207 | var userInfo = new StringBuffer(); |
||
208 | userInfo.append('<table>'); |
||
209 | userInfo.append('<tr>'); |
||
210 | userInfo.append('<th>region</th>'); |
||
211 | userInfo.append('<th>user</th>'); |
||
212 | userInfo.append('<th></th>'); |
||
213 | userInfo.append('<th>position</th>'); |
||
214 | userInfo.append('</tr>'); |
||
215 | for (region in data) { |
||
216 | for (user in data[region]) { |
||
217 | if (user != 'queues') { |
||
218 | userInfo.append('<tr>'); |
||
219 | userInfo.append('<td>' + region + '</td>'); |
||
220 | userInfo.append('<td>' + data[region][user].Name + '</td>'); |
||
221 | if (data[region][user].isRoot == 'true') { |
||
222 | userInfo.append('<td>root</td>'); |
||
223 | } |
||
224 | else { |
||
225 | userInfo.append('<td>child</td>'); |
||
226 | } |
||
227 | userInfo.append('<td>' + data[region][user].position + '</td>'); |
||
228 | userInfo.append('</tr>'); |
||
229 | } |
||
230 | } |
||
231 | } |
||
232 | userInfo.append('</table>'); |
||
233 | $('#SimSessionStats').empty(); |
||
234 | $('#SimSessionStats').append(userInfo.toString()); |
||
235 | } |
||
236 | |||
237 | function DebugLog(msg) { |
||
238 | $("#DEBUG").append('<div>' + msg + '</div>'); |
||
239 | $("#DEBUG").show(); |
||
240 | } |
||
241 | |||
242 | function StringBuffer() { |
||
243 | this.__strings__ = new Array; |
||
244 | } |
||
245 | StringBuffer.prototype.append = function(str) { |
||
246 | this.__strings__.push(str); |
||
247 | } |
||
248 | StringBuffer.prototype.toString = function() { |
||
249 | return this.__strings__.join(""); |
||
250 | } |
||
251 | |||
252 | </script> |
||
253 | </head> |
||
254 | <body id="SimBody"> |
||
255 | <div id="SimHeader"></div> |
||
256 | <div id="SimContent"> |
||
257 | |||
258 | <!-- ============================================== --> |
||
259 | <div class="SimSectionContainer"> |
||
260 | <a class="SimSectionHeader" href="#">Simulator Stats</a> |
||
261 | <div id="SimSimStats" class="SimSection"> |
||
262 | </div> <!-- SimSimStats --> |
||
263 | </div> <!-- SimSectionContainer --> |
||
264 | |||
265 | <!-- ============================================== --> |
||
266 | <div class="SimSectionContainer"> |
||
267 | <a class="SimSectionHeader" href="#">Region Stats</a> |
||
268 | <div id="SimRegionStats" class="SimSection"> |
||
269 | </div> <!-- SimRegionStats --> |
||
270 | </div> <!-- SimSectionContainer --> |
||
271 | |||
272 | <!-- ============================================== --> |
||
273 | <div class="SimSectionContainer"> |
||
274 | <a class="SimSectionHeader" href="#">Sessions</a> |
||
275 | <div id="SimSessionStats" class="SimSection"> |
||
276 | </div> <!-- SimSessionStats --> |
||
277 | </div> <!-- SimSectionContainer --> |
||
278 | |||
279 | <!-- ============================================== --> |
||
280 | <div class="SimSectionContainer"> |
||
281 | <a class="SimSectionHeader" href="#">Log File</a> |
||
282 | <div id="SimLogFile" class="SimSection"> |
||
283 | </div> <!-- SimLogFile --> |
||
284 | </div> <!-- SimSectionContainer --> |
||
285 | |||
286 | <!-- ============================================== --> |
||
287 | </div> <!-- SimContent --> |
||
288 | <div id="DEBUG"></div> |
||
289 | <div id="SimFooter"></div> |
||
290 | </body> |
||
291 | </html> |