aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs (renamed from OpenSim/Region/CoreModules/Agent/UDP/Linden/LindenUDPModule.cs)150
1 files changed, 140 insertions, 10 deletions
diff --git a/OpenSim/Region/CoreModules/Agent/UDP/Linden/LindenUDPModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
index 29583dc..480df31 100644
--- a/OpenSim/Region/CoreModules/Agent/UDP/Linden/LindenUDPModule.cs
+++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
@@ -36,19 +36,20 @@ using OpenMetaverse;
36using OpenSim.Framework; 36using OpenSim.Framework;
37using OpenSim.Framework.Console; 37using OpenSim.Framework.Console;
38using OpenSim.Framework.Statistics; 38using OpenSim.Framework.Statistics;
39using OpenSim.Region.ClientStack.LindenUDP;
39using OpenSim.Region.Framework.Interfaces; 40using OpenSim.Region.Framework.Interfaces;
40using OpenSim.Region.Framework.Scenes; 41using OpenSim.Region.Framework.Scenes;
41 42
42namespace OpenSim.Region.CoreModules.UDP.Linden 43namespace OpenSim.Region.CoreModules.UDP.Linden
43{ 44{
44 /// <summary> 45 /// <summary>
45 /// A module that just holds commands for inspecting/changing the Linden UDP client stack 46 /// A module that just holds commands for inspecting the current state of the Linden UDP stack.
46 /// </summary> 47 /// </summary>
47 /// <remarks> 48 /// <remarks>
48 /// All actual client stack functionality remains in OpenSim.Region.ClientStack.LindenUDP 49 /// All actual client stack functionality remains in OpenSim.Region.ClientStack.LindenUDP
49 /// </remarks> 50 /// </remarks>
50 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LindenUDPModule")] 51 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LindenUDPInfoModule")]
51 public class LindenUDPModule : ISharedRegionModule 52 public class LindenUDPInfoModule : ISharedRegionModule
52 { 53 {
53 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 54 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
54 55
@@ -60,22 +61,22 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
60 61
61 public void Initialise(IConfigSource source) 62 public void Initialise(IConfigSource source)
62 { 63 {
63// m_log.DebugFormat("[LINDEN UDP MODULE]: INITIALIZED MODULE"); 64// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: INITIALIZED MODULE");
64 } 65 }
65 66
66 public void PostInitialise() 67 public void PostInitialise()
67 { 68 {
68// m_log.DebugFormat("[LINDEN UDP MODULE]: POST INITIALIZED MODULE"); 69// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: POST INITIALIZED MODULE");
69 } 70 }
70 71
71 public void Close() 72 public void Close()
72 { 73 {
73// m_log.DebugFormat("[LINDEN UDP MODULE]: CLOSED MODULE"); 74// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: CLOSED MODULE");
74 } 75 }
75 76
76 public void AddRegion(Scene scene) 77 public void AddRegion(Scene scene)
77 { 78 {
78// m_log.DebugFormat("[LINDEN UDP MODULE]: REGION {0} ADDED", scene.RegionInfo.RegionName); 79// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: REGION {0} ADDED", scene.RegionInfo.RegionName);
79 80
80 lock (m_scenes) 81 lock (m_scenes)
81 m_scenes[scene.RegionInfo.RegionID] = scene; 82 m_scenes[scene.RegionInfo.RegionID] = scene;
@@ -86,12 +87,20 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
86 "Show queue data for each client", 87 "Show queue data for each client",
87 "Without the 'full' option, only root agents are shown." 88 "Without the 'full' option, only root agents are shown."
88 + " With the 'full' option child agents are also shown.", 89 + " With the 'full' option child agents are also shown.",
89 ShowQueuesReport); 90 ShowQueuesReport);
91
92 scene.AddCommand(
93 this, "show throttles",
94 "show throttles [full]",
95 "Show throttle settings for each client and for the server overall",
96 "Without the 'full' option, only root agents are shown."
97 + " With the 'full' option child agents are also shown.",
98 ShowThrottlesReport);
90 } 99 }
91 100
92 public void RemoveRegion(Scene scene) 101 public void RemoveRegion(Scene scene)
93 { 102 {
94// m_log.DebugFormat("[LINDEN UDP MODULE]: REGION {0} REMOVED", scene.RegionInfo.RegionName); 103// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: REGION {0} REMOVED", scene.RegionInfo.RegionName);
95 104
96 lock (m_scenes) 105 lock (m_scenes)
97 m_scenes.Remove(scene.RegionInfo.RegionID); 106 m_scenes.Remove(scene.RegionInfo.RegionID);
@@ -99,7 +108,7 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
99 108
100 public void RegionLoaded(Scene scene) 109 public void RegionLoaded(Scene scene)
101 { 110 {
102// m_log.DebugFormat("[LINDEN UDP MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); 111// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName);
103 } 112 }
104 113
105 protected void ShowQueuesReport(string module, string[] cmd) 114 protected void ShowQueuesReport(string module, string[] cmd)
@@ -107,6 +116,11 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
107 MainConsole.Instance.Output(GetQueuesReport(cmd)); 116 MainConsole.Instance.Output(GetQueuesReport(cmd));
108 } 117 }
109 118
119 protected void ShowThrottlesReport(string module, string[] cmd)
120 {
121 MainConsole.Instance.Output(GetThrottlesReport(cmd));
122 }
123
110 /// <summary> 124 /// <summary>
111 /// Generate UDP Queue data report for each client 125 /// Generate UDP Queue data report for each client
112 /// </summary> 126 /// </summary>
@@ -195,6 +209,122 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
195 } 209 }
196 210
197 return report.ToString(); 211 return report.ToString();
212 }
213
214 /// <summary>
215 /// Show throttle data
216 /// </summary>
217 /// <param name="showParams"></param>
218 /// <returns></returns>
219 protected string GetThrottlesReport(string[] showParams)
220 {
221 bool showChildren = false;
222
223 if (showParams.Length > 2 && showParams[2] == "full")
224 showChildren = true;
225
226 StringBuilder report = new StringBuilder();
227
228 int columnPadding = 2;
229 int maxNameLength = 18;
230 int maxRegionNameLength = 14;
231 int maxTypeLength = 4;
232 int totalInfoFieldsLength = maxNameLength + columnPadding + maxRegionNameLength + columnPadding + maxTypeLength + columnPadding;
233
234 report.AppendFormat("{0,-" + maxNameLength + "}{1,-" + columnPadding + "}", "User", "");
235 report.AppendFormat("{0,-" + maxRegionNameLength + "}{1,-" + columnPadding + "}", "Region", "");
236 report.AppendFormat("{0,-" + maxTypeLength + "}{1,-" + columnPadding + "}", "Type\n", "");
237
238 bool firstClient = true;
239
240 lock (m_scenes)
241 {
242 foreach (Scene scene in m_scenes.Values)
243 {
244 scene.ForEachClient(
245 delegate(IClientAPI client)
246 {
247 if (client is LLClientView)
248 {
249 LLClientView llClient = client as LLClientView;
250
251 if (firstClient)
252 {
253 report.AppendLine(GetServerThrottlesReport(llClient.UDPServer, scene));
254 firstClient = false;
255 }
256
257 bool isChild = scene.PresenceChildStatus(client.AgentId);
258 if (isChild && !showChildren)
259 return;
260
261 string name = client.Name;
262 string regionName = scene.RegionInfo.RegionName;
263
264 LLUDPClient llUdpClient = llClient.UDPClient;
265 ClientInfo ci = llUdpClient.GetClientInfo();
266
267 report.AppendFormat(
268 "{0,-" + maxNameLength + "}{1,-" + columnPadding + "}",
269 name.Length > maxNameLength ? name.Substring(0, maxNameLength) : name, "");
270 report.AppendFormat(
271 "{0,-" + maxRegionNameLength + "}{1,-" + columnPadding + "}",
272 regionName.Length > maxRegionNameLength ? regionName.Substring(0, maxRegionNameLength) : regionName, "");
273 report.AppendFormat(
274 "{0,-" + maxTypeLength + "}{1,-" + columnPadding + "}",
275 isChild ? "Cd" : "Rt", "");
276
277 report.Append((ci.totalThrottle * 8) / 1000 + " ");
278 report.Append((ci.resendThrottle * 8) / 1000 + " ");
279 report.Append((ci.landThrottle * 8) / 1000 + " ");
280 report.Append((ci.windThrottle * 8) / 1000 + " ");
281 report.Append((ci.cloudThrottle * 8) / 1000 + " ");
282 report.Append((ci.taskThrottle * 8) / 1000 + " ");
283 report.Append((ci.textureThrottle * 8) / 1000 + " ");
284 report.Append((ci.assetThrottle * 8) / 1000 + " ");
285
286 report.AppendLine();
287 }
288 });
289 }
290 }
291
292 return report.ToString();
198 } 293 }
294
295 protected string GetServerThrottlesReport(LLUDPServer udpServer, Scene scene)
296 {
297 StringBuilder report = new StringBuilder();
298
299 int columnPadding = 2;
300 int maxNameLength = 18;
301 int maxRegionNameLength = 14;
302 int maxTypeLength = 4;
303 int totalInfoFieldsLength = maxNameLength + columnPadding + maxRegionNameLength + columnPadding + maxTypeLength + columnPadding;
304
305 string name = "SERVER LIMITS";
306 string regionName = scene.RegionInfo.RegionName;
307
308 report.AppendFormat(
309 "{0,-" + maxNameLength + "}{1,-" + columnPadding + "}",
310 name.Length > maxNameLength ? name.Substring(0, maxNameLength) : name, "");
311 report.AppendFormat(
312 "{0,-" + maxRegionNameLength + "}{1,-" + columnPadding + "}",
313 regionName.Length > maxRegionNameLength ? regionName.Substring(0, maxRegionNameLength) : regionName, "");
314 report.AppendFormat(
315 "{0,-" + maxTypeLength + "}{1,-" + columnPadding + "}", "n/a", "");
316
317 ThrottleRates throttleRates = udpServer.ThrottleRates;
318 report.Append("n/a");
319 report.Append((throttleRates.ResendLimit * 8) / 1000 + " ");
320 report.Append((throttleRates.LandLimit * 8) / 1000 + " ");
321 report.Append((throttleRates.WindLimit * 8) / 1000 + " ");
322 report.Append((throttleRates.CloudLimit * 8) / 1000 + " ");
323 report.Append((throttleRates.TaskLimit * 8) / 1000 + " ");
324 report.Append((throttleRates.TextureLimit * 8) / 1000 + " ");
325 report.Append((throttleRates.AssetLimit * 8) / 1000 + " ");
326
327 return report.ToString();
328 }
199 } 329 }
200} \ No newline at end of file 330} \ No newline at end of file