opensim – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | eva | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ |
||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
||
4 | * |
||
5 | * Redistribution and use in source and binary forms, with or without |
||
6 | * modification, are permitted provided that the following conditions are met: |
||
7 | * * Redistributions of source code must retain the above copyright |
||
8 | * notice, this list of conditions and the following disclaimer. |
||
9 | * * Redistributions in binary form must reproduce the above copyright |
||
10 | * notice, this list of conditions and the following disclaimer in the |
||
11 | * documentation and/or other materials provided with the distribution. |
||
12 | * * Neither the name of the OpenSimulator Project nor the |
||
13 | * names of its contributors may be used to endorse or promote products |
||
14 | * derived from this software without specific prior written permission. |
||
15 | * |
||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY |
||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY |
||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||
26 | */ |
||
27 | |||
28 | using System; |
||
29 | using System.Collections; |
||
30 | using System.Collections.Generic; |
||
31 | using System.Reflection; |
||
32 | using System.Text; |
||
33 | using Mono.Data.SqliteClient; |
||
34 | using OpenMetaverse; |
||
35 | using OpenMetaverse.StructuredData; |
||
36 | using OpenSim.Region.Framework.Scenes; |
||
37 | using OpenSim.Framework.Monitoring; |
||
38 | |||
39 | namespace OpenSim.Region.UserStatistics |
||
40 | { |
||
41 | public class SimStatsAJAX : IStatsController |
||
42 | { |
||
43 | #region IStatsController Members |
||
44 | |||
45 | public string ReportName |
||
46 | { |
||
47 | get { return ""; } |
||
48 | } |
||
49 | |||
50 | public Hashtable ProcessModel(Hashtable pParams) |
||
51 | { |
||
52 | List<Scene> m_scene = (List<Scene>)pParams["Scenes"]; |
||
53 | |||
54 | Hashtable nh = new Hashtable(); |
||
55 | nh.Add("hdata", m_scene); |
||
56 | nh.Add("simstats", pParams["SimStats"]); |
||
57 | return nh; |
||
58 | } |
||
59 | |||
60 | public string RenderView(Hashtable pModelResult) |
||
61 | { |
||
62 | StringBuilder output = new StringBuilder(); |
||
63 | List<Scene> all_scenes = (List<Scene>) pModelResult["hdata"]; |
||
64 | Dictionary<UUID, USimStatsData> sdatadic = (Dictionary<UUID,USimStatsData>)pModelResult["simstats"]; |
||
65 | |||
66 | const string TableClass = "defaultr"; |
||
67 | const string TRClass = "defaultr"; |
||
68 | const string TDHeaderClass = "header"; |
||
69 | const string TDDataClass = "content"; |
||
70 | //const string TDDataClassRight = "contentright"; |
||
71 | const string TDDataClassCenter = "contentcenter"; |
||
72 | |||
73 | foreach (USimStatsData sdata in sdatadic.Values) |
||
74 | { |
||
75 | |||
76 | |||
77 | foreach (Scene sn in all_scenes) |
||
78 | { |
||
79 | if (sn.RegionInfo.RegionID == sdata.RegionId) |
||
80 | { |
||
81 | output.Append("<H2>"); |
||
82 | output.Append(sn.RegionInfo.RegionName); |
||
83 | output.Append("</H2>"); |
||
84 | } |
||
85 | } |
||
86 | HTMLUtil.TABLE_O(ref output, TableClass); |
||
87 | HTMLUtil.TR_O(ref output, TRClass); |
||
88 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
89 | output.Append("Dilatn"); |
||
90 | HTMLUtil.TD_C(ref output); |
||
91 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
92 | output.Append("SimFPS"); |
||
93 | HTMLUtil.TD_C(ref output); |
||
94 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
95 | output.Append("PhysFPS"); |
||
96 | HTMLUtil.TD_C(ref output); |
||
97 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
98 | output.Append("AgntUp"); |
||
99 | HTMLUtil.TD_C(ref output); |
||
100 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
101 | output.Append("RootAg"); |
||
102 | HTMLUtil.TD_C(ref output); |
||
103 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
104 | output.Append("ChldAg"); |
||
105 | HTMLUtil.TD_C(ref output); |
||
106 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
107 | output.Append("Prims"); |
||
108 | HTMLUtil.TD_C(ref output); |
||
109 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
110 | output.Append("ATvPrm"); |
||
111 | HTMLUtil.TD_C(ref output); |
||
112 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
113 | output.Append("AtvScr"); |
||
114 | HTMLUtil.TD_C(ref output); |
||
115 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
116 | output.Append("ScrLPS"); |
||
117 | HTMLUtil.TD_C(ref output); |
||
118 | HTMLUtil.TR_C(ref output); |
||
119 | HTMLUtil.TR_O(ref output, TRClass); |
||
120 | HTMLUtil.TD_O(ref output, TDDataClass); |
||
121 | output.Append(sdata.TimeDilation); |
||
122 | HTMLUtil.TD_C(ref output); |
||
123 | HTMLUtil.TD_O(ref output, TDDataClass); |
||
124 | output.Append(sdata.SimFps); |
||
125 | HTMLUtil.TD_C(ref output); |
||
126 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
127 | output.Append(sdata.PhysicsFps); |
||
128 | HTMLUtil.TD_C(ref output); |
||
129 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
130 | output.Append(sdata.AgentUpdates); |
||
131 | HTMLUtil.TD_C(ref output); |
||
132 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
133 | output.Append(sdata.RootAgents); |
||
134 | HTMLUtil.TD_C(ref output); |
||
135 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
136 | output.Append(sdata.ChildAgents); |
||
137 | HTMLUtil.TD_C(ref output); |
||
138 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
139 | output.Append(sdata.TotalPrims); |
||
140 | HTMLUtil.TD_C(ref output); |
||
141 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
142 | output.Append(sdata.ActivePrims); |
||
143 | HTMLUtil.TD_C(ref output); |
||
144 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
145 | output.Append(sdata.ActiveScripts); |
||
146 | HTMLUtil.TD_C(ref output); |
||
147 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
148 | output.Append(sdata.ScriptLinesPerSecond); |
||
149 | HTMLUtil.TD_C(ref output); |
||
150 | HTMLUtil.TR_C(ref output); |
||
151 | HTMLUtil.TR_O(ref output, TRClass); |
||
152 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
153 | output.Append("FrmMS"); |
||
154 | HTMLUtil.TD_C(ref output); |
||
155 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
156 | output.Append("AgtMS"); |
||
157 | HTMLUtil.TD_C(ref output); |
||
158 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
159 | output.Append("PhysMS"); |
||
160 | HTMLUtil.TD_C(ref output); |
||
161 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
162 | output.Append("OthrMS"); |
||
163 | HTMLUtil.TD_C(ref output); |
||
164 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
165 | output.Append("ScrLPS"); |
||
166 | HTMLUtil.TD_C(ref output); |
||
167 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
168 | output.Append("OutPPS"); |
||
169 | HTMLUtil.TD_C(ref output); |
||
170 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
171 | output.Append("InPPS"); |
||
172 | HTMLUtil.TD_C(ref output); |
||
173 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
174 | output.Append("NoAckKB"); |
||
175 | HTMLUtil.TD_C(ref output); |
||
176 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
177 | output.Append("PndDWN"); |
||
178 | HTMLUtil.TD_C(ref output); |
||
179 | HTMLUtil.TD_O(ref output, TDHeaderClass); |
||
180 | output.Append("PndUP"); |
||
181 | HTMLUtil.TD_C(ref output); |
||
182 | HTMLUtil.TR_C(ref output); |
||
183 | HTMLUtil.TR_O(ref output, TRClass); |
||
184 | HTMLUtil.TD_O(ref output, TDDataClass); |
||
185 | output.Append(sdata.TotalFrameTime); |
||
186 | HTMLUtil.TD_C(ref output); |
||
187 | HTMLUtil.TD_O(ref output, TDDataClass); |
||
188 | output.Append(sdata.AgentFrameTime); |
||
189 | HTMLUtil.TD_C(ref output); |
||
190 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
191 | output.Append(sdata.PhysicsFrameTime); |
||
192 | HTMLUtil.TD_C(ref output); |
||
193 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
194 | output.Append(sdata.OtherFrameTime); |
||
195 | HTMLUtil.TD_C(ref output); |
||
196 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
197 | output.Append(sdata.ScriptLinesPerSecond); |
||
198 | HTMLUtil.TD_C(ref output); |
||
199 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
200 | output.Append(sdata.OutPacketsPerSecond); |
||
201 | HTMLUtil.TD_C(ref output); |
||
202 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
203 | output.Append(sdata.InPacketsPerSecond); |
||
204 | HTMLUtil.TD_C(ref output); |
||
205 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
206 | output.Append(sdata.UnackedBytes); |
||
207 | HTMLUtil.TD_C(ref output); |
||
208 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
209 | output.Append(sdata.PendingDownloads); |
||
210 | HTMLUtil.TD_C(ref output); |
||
211 | HTMLUtil.TD_O(ref output, TDDataClassCenter); |
||
212 | output.Append(sdata.PendingUploads); |
||
213 | HTMLUtil.TD_C(ref output); |
||
214 | HTMLUtil.TR_C(ref output); |
||
215 | HTMLUtil.TABLE_C(ref output); |
||
216 | |||
217 | } |
||
218 | |||
219 | return output.ToString(); |
||
220 | } |
||
221 | |||
222 | /// <summary> |
||
223 | /// Return stat information for all regions in the sim. Returns data of the form: |
||
224 | /// <pre> |
||
225 | /// {"REGIONNAME": { |
||
226 | /// "region": "REGIONNAME", |
||
227 | /// "timeDilation": "101", |
||
228 | /// ... // the rest of the stat info |
||
229 | /// }, |
||
230 | /// ... // entries for each region |
||
231 | /// } |
||
232 | /// </pre> |
||
233 | /// </summary> |
||
234 | /// <param name="pModelResult"></param> |
||
235 | /// <returns></returns> |
||
236 | public string RenderJson(Hashtable pModelResult) |
||
237 | { |
||
238 | List<Scene> all_scenes = (List<Scene>) pModelResult["hdata"]; |
||
239 | Dictionary<UUID, USimStatsData> sdatadic = (Dictionary<UUID,USimStatsData>)pModelResult["simstats"]; |
||
240 | |||
241 | OSDMap allStatsInfo = new OpenMetaverse.StructuredData.OSDMap(); |
||
242 | foreach (USimStatsData sdata in sdatadic.Values) |
||
243 | { |
||
244 | OSDMap statsInfo = new OpenMetaverse.StructuredData.OSDMap(); |
||
245 | string regionName = "unknown"; |
||
246 | foreach (Scene sn in all_scenes) |
||
247 | { |
||
248 | if (sn.RegionInfo.RegionID == sdata.RegionId) |
||
249 | { |
||
250 | regionName = sn.RegionInfo.RegionName; |
||
251 | break; |
||
252 | } |
||
253 | } |
||
254 | statsInfo.Add("region", new OSDString(regionName)); |
||
255 | statsInfo.Add("timeDilation", new OSDString(sdata.TimeDilation.ToString())); |
||
256 | statsInfo.Add("simFPS", new OSDString(sdata.SimFps.ToString())); |
||
257 | statsInfo.Add("physicsFPS", new OSDString(sdata.PhysicsFps.ToString())); |
||
258 | statsInfo.Add("agentUpdates", new OSDString(sdata.AgentUpdates.ToString())); |
||
259 | statsInfo.Add("rootAgents", new OSDString(sdata.RootAgents.ToString())); |
||
260 | statsInfo.Add("childAgents", new OSDString(sdata.ChildAgents.ToString())); |
||
261 | statsInfo.Add("totalPrims", new OSDString(sdata.TotalPrims.ToString())); |
||
262 | statsInfo.Add("activePrims", new OSDString(sdata.ActivePrims.ToString())); |
||
263 | statsInfo.Add("activeScripts", new OSDString(sdata.ActiveScripts.ToString())); |
||
264 | statsInfo.Add("scriptLinesPerSec", new OSDString(sdata.ScriptLinesPerSecond.ToString())); |
||
265 | statsInfo.Add("totalFrameTime", new OSDString(sdata.TotalFrameTime.ToString())); |
||
266 | statsInfo.Add("agentFrameTime", new OSDString(sdata.AgentFrameTime.ToString())); |
||
267 | statsInfo.Add("physicsFrameTime", new OSDString(sdata.PhysicsFrameTime.ToString())); |
||
268 | statsInfo.Add("otherFrameTime", new OSDString(sdata.OtherFrameTime.ToString())); |
||
269 | statsInfo.Add("outPacketsPerSec", new OSDString(sdata.OutPacketsPerSecond.ToString())); |
||
270 | statsInfo.Add("inPacketsPerSec", new OSDString(sdata.InPacketsPerSecond.ToString())); |
||
271 | statsInfo.Add("unackedByptes", new OSDString(sdata.UnackedBytes.ToString())); |
||
272 | statsInfo.Add("pendingDownloads", new OSDString(sdata.PendingDownloads.ToString())); |
||
273 | statsInfo.Add("pendingUploads", new OSDString(sdata.PendingUploads.ToString())); |
||
274 | |||
275 | allStatsInfo.Add(regionName, statsInfo); |
||
276 | } |
||
277 | return allStatsInfo.ToString(); |
||
278 | } |
||
279 | |||
280 | #endregion |
||
281 | } |
||
282 | } |