aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Application/OpenSimBase.cs8
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs2
-rw-r--r--OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs234
-rw-r--r--OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs2
-rw-r--r--OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs2
-rw-r--r--OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs2
-rw-r--r--OpenSim/Region/OptionalModules/World/WorldView/WorldViewRequestHandler.cs2
8 files changed, 240 insertions, 14 deletions
diff --git a/OpenSim/Region/Application/OpenSimBase.cs b/OpenSim/Region/Application/OpenSimBase.cs
index 841069c..f0c088a 100644
--- a/OpenSim/Region/Application/OpenSimBase.cs
+++ b/OpenSim/Region/Application/OpenSimBase.cs
@@ -766,7 +766,7 @@ namespace OpenSim
766 { 766 {
767 public SimStatusHandler() : base("GET", "/simstatus", "SimStatus", "Simulator Status") {} 767 public SimStatusHandler() : base("GET", "/simstatus", "SimStatus", "Simulator Status") {}
768 768
769 public override byte[] Handle(string path, Stream request, 769 protected override byte[] ProcessRequest(string path, Stream request,
770 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 770 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
771 { 771 {
772 return Util.UTF8.GetBytes("OK"); 772 return Util.UTF8.GetBytes("OK");
@@ -792,7 +792,7 @@ namespace OpenSim
792 m_opensim = sim; 792 m_opensim = sim;
793 } 793 }
794 794
795 public override byte[] Handle(string path, Stream request, 795 protected override byte[] ProcessRequest(string path, Stream request,
796 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 796 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
797 { 797 {
798 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); 798 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
@@ -810,7 +810,7 @@ namespace OpenSim
810 /// If the request contains a key, "callback" the response will be wrappend in the 810 /// If the request contains a key, "callback" the response will be wrappend in the
811 /// associated value for jsonp used with ajax/javascript 811 /// associated value for jsonp used with ajax/javascript
812 /// </summary> 812 /// </summary>
813 public class UXSimStatusHandler : BaseStreamHandler 813 protected class UXSimStatusHandler : BaseStreamHandler
814 { 814 {
815 OpenSimBase m_opensim; 815 OpenSimBase m_opensim;
816 816
@@ -820,7 +820,7 @@ namespace OpenSim
820 m_opensim = sim; 820 m_opensim = sim;
821 } 821 }
822 822
823 public override byte[] Handle(string path, Stream request, 823 protected override byte[] ProcessRequest(string path, Stream request,
824 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 824 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
825 { 825 {
826 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest)); 826 return Util.UTF8.GetBytes(m_opensim.StatReport(httpRequest));
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs
index 69dd76f..a133a69 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/RegionConsoleModule.cs
@@ -176,7 +176,7 @@ namespace OpenSim.Region.ClientStack.Linden
176 m_isGod = m_scene.Permissions.IsGod(agentID); 176 m_isGod = m_scene.Permissions.IsGod(agentID);
177 } 177 }
178 178
179 public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 179 protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
180 { 180 {
181 StreamReader reader = new StreamReader(request); 181 StreamReader reader = new StreamReader(request);
182 string message = reader.ReadToEnd(); 182 string message = reader.ReadToEnd();
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
index 08196f1..2116605 100644
--- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsRequestHandler.cs
@@ -54,7 +54,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends
54 m_FriendsModule = fmodule; 54 m_FriendsModule = fmodule;
55 } 55 }
56 56
57 public override byte[] Handle( 57 protected override byte[] ProcessRequest(
58 string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 58 string path, Stream requestData, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
59 { 59 {
60 StreamReader sr = new StreamReader(requestData); 60 StreamReader sr = new StreamReader(requestData);
diff --git a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
index c8b341b..bd60611 100644
--- a/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/Caps/CapabilitiesModule.cs
@@ -28,6 +28,7 @@
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Linq;
31using System.Reflection; 32using System.Reflection;
32using System.Text; 33using System.Text;
33using log4net; 34using log4net;
@@ -37,6 +38,7 @@ using OpenMetaverse;
37using OpenSim.Framework; 38using OpenSim.Framework;
38using OpenSim.Framework.Console; 39using OpenSim.Framework.Console;
39using OpenSim.Framework.Servers; 40using OpenSim.Framework.Servers;
41using OpenSim.Framework.Servers.HttpServer;
40using OpenSim.Region.Framework.Interfaces; 42using OpenSim.Region.Framework.Interfaces;
41using OpenSim.Region.Framework.Scenes; 43using OpenSim.Region.Framework.Scenes;
42using Caps=OpenSim.Framework.Capabilities.Caps; 44using Caps=OpenSim.Framework.Capabilities.Caps;
@@ -58,6 +60,7 @@ namespace OpenSim.Region.CoreModules.Framework
58 protected Dictionary<UUID, Caps> m_capsObjects = new Dictionary<UUID, Caps>(); 60 protected Dictionary<UUID, Caps> m_capsObjects = new Dictionary<UUID, Caps>();
59 61
60 protected Dictionary<UUID, string> m_capsPaths = new Dictionary<UUID, string>(); 62 protected Dictionary<UUID, string> m_capsPaths = new Dictionary<UUID, string>();
63
61 protected Dictionary<UUID, Dictionary<ulong, string>> m_childrenSeeds 64 protected Dictionary<UUID, Dictionary<ulong, string>> m_childrenSeeds
62 = new Dictionary<UUID, Dictionary<ulong, string>>(); 65 = new Dictionary<UUID, Dictionary<ulong, string>>();
63 66
@@ -70,9 +73,24 @@ namespace OpenSim.Region.CoreModules.Framework
70 m_scene = scene; 73 m_scene = scene;
71 m_scene.RegisterModuleInterface<ICapabilitiesModule>(this); 74 m_scene.RegisterModuleInterface<ICapabilitiesModule>(this);
72 75
73 MainConsole.Instance.Commands.AddCommand("Comms", false, "show caps", 76 MainConsole.Instance.Commands.AddCommand(
74 "show caps", 77 "Comms", false, "show caps list",
75 "Shows all registered capabilities for users", HandleShowCapsCommand); 78 "show caps list",
79 "Shows list of registered capabilities for users.", HandleShowCapsListCommand);
80
81 MainConsole.Instance.Commands.AddCommand(
82 "Comms", false, "show caps stats by user",
83 "show caps stats [<first-name> <last-name>]",
84 "Shows statistics on capabilities use by user.",
85 "If a user name is given, then prints a detailed breakdown of caps use ordered by number of requests received.",
86 HandleShowCapsStatsByUserCommand);
87
88 MainConsole.Instance.Commands.AddCommand(
89 "Comms", false, "show caps stats by cap",
90 "show caps stats by cap [<cap-name>]",
91 "Shows statistics on capabilities use by capability.",
92 "If a capability name is given, then prints a detailed breakdown of use by each user.",
93 HandleShowCapsStatsByCapCommand);
76 } 94 }
77 95
78 public void RegionLoaded(Scene scene) 96 public void RegionLoaded(Scene scene)
@@ -262,8 +280,11 @@ namespace OpenSim.Region.CoreModules.Framework
262 } 280 }
263 } 281 }
264 282
265 private void HandleShowCapsCommand(string module, string[] cmdparams) 283 private void HandleShowCapsListCommand(string module, string[] cmdParams)
266 { 284 {
285 if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
286 return;
287
267 StringBuilder caps = new StringBuilder(); 288 StringBuilder caps = new StringBuilder();
268 caps.AppendFormat("Region {0}:\n", m_scene.RegionInfo.RegionName); 289 caps.AppendFormat("Region {0}:\n", m_scene.RegionInfo.RegionName);
269 290
@@ -286,5 +307,210 @@ namespace OpenSim.Region.CoreModules.Framework
286 307
287 MainConsole.Instance.Output(caps.ToString()); 308 MainConsole.Instance.Output(caps.ToString());
288 } 309 }
310
311 private void HandleShowCapsStatsByCapCommand(string module, string[] cmdParams)
312 {
313 if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
314 return;
315
316 if (cmdParams.Length != 5 && cmdParams.Length != 6)
317 {
318 MainConsole.Instance.Output("Usage: show caps stats by cap [<cap-name>]");
319 return;
320 }
321
322 StringBuilder sb = new StringBuilder();
323 sb.AppendFormat("Region {0}:\n", m_scene.Name);
324
325 if (cmdParams.Length == 5)
326 {
327 BuildSummaryStatsByCapReport(sb);
328 }
329 else if (cmdParams.Length == 6)
330 {
331 BuildDetailedStatsByCapReport(sb, cmdParams[5]);
332 }
333
334 MainConsole.Instance.Output(sb.ToString());
335 }
336
337 private void BuildDetailedStatsByCapReport(StringBuilder sb, string capName)
338 {
339 sb.AppendFormat("Capability name {0}\n", capName);
340
341 ConsoleDisplayTable cdt = new ConsoleDisplayTable();
342 cdt.AddColumn("User Name", 34);
343 cdt.AddColumn("Req Received", 12);
344 cdt.AddColumn("Req Handled", 12);
345 cdt.Indent = 2;
346
347 Dictionary<string, int> receivedStats = new Dictionary<string, int>();
348 Dictionary<string, int> handledStats = new Dictionary<string, int>();
349
350 m_scene.ForEachScenePresence(
351 sp =>
352 {
353 Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
354
355 if (caps == null)
356 return;
357
358 Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
359
360 IRequestHandler reqHandler;
361 if (capsHandlers.TryGetValue(capName, out reqHandler))
362 {
363 receivedStats[sp.Name] = reqHandler.RequestsReceived;
364 handledStats[sp.Name] = reqHandler.RequestsHandled;
365 }
366 }
367 );
368
369 foreach (KeyValuePair<string, int> kvp in receivedStats.OrderByDescending(kp => kp.Value))
370 {
371 cdt.AddRow(kvp.Key, kvp.Value, handledStats[kvp.Key]);
372 }
373
374 sb.Append(cdt.ToString());
375 }
376
377 private void BuildSummaryStatsByCapReport(StringBuilder sb)
378 {
379 ConsoleDisplayTable cdt = new ConsoleDisplayTable();
380 cdt.AddColumn("Name", 34);
381 cdt.AddColumn("Req Received", 12);
382 cdt.AddColumn("Req Handled", 12);
383 cdt.Indent = 2;
384
385 Dictionary<string, int> receivedStats = new Dictionary<string, int>();
386 Dictionary<string, int> handledStats = new Dictionary<string, int>();
387
388 m_scene.ForEachScenePresence(
389 sp =>
390 {
391 Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
392
393 if (caps == null)
394 return;
395
396 Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
397
398 foreach (IRequestHandler reqHandler in capsHandlers.Values)
399 {
400 string reqName = reqHandler.Name ?? "";
401
402 if (!receivedStats.ContainsKey(reqName))
403 {
404 receivedStats[reqName] = reqHandler.RequestsReceived;
405 handledStats[reqName] = reqHandler.RequestsHandled;
406 }
407 else
408 {
409 receivedStats[reqName] += reqHandler.RequestsReceived;
410 handledStats[reqName] += reqHandler.RequestsHandled;
411 }
412 }
413 }
414 );
415
416 foreach (KeyValuePair<string, int> kvp in receivedStats.OrderByDescending(kp => kp.Value))
417 cdt.AddRow(kvp.Key, kvp.Value, handledStats[kvp.Key]);
418
419 sb.Append(cdt.ToString());
420 }
421
422 private void HandleShowCapsStatsByUserCommand(string module, string[] cmdParams)
423 {
424 if (SceneManager.Instance.CurrentScene != null && SceneManager.Instance.CurrentScene != m_scene)
425 return;
426
427 if (cmdParams.Length != 5 && cmdParams.Length != 7)
428 {
429 MainConsole.Instance.Output("Usage: show caps stats by user [<first-name> <last-name>]");
430 return;
431 }
432
433 StringBuilder sb = new StringBuilder();
434 sb.AppendFormat("Region {0}:\n", m_scene.Name);
435
436 if (cmdParams.Length == 5)
437 {
438 BuildSummaryStatsByUserReport(sb);
439 }
440 else if (cmdParams.Length == 7)
441 {
442 string firstName = cmdParams[5];
443 string lastName = cmdParams[6];
444
445 ScenePresence sp = m_scene.GetScenePresence(firstName, lastName);
446
447 if (sp == null)
448 return;
449
450 BuildDetailedStatsByUserReport(sb, sp);
451 }
452
453 MainConsole.Instance.Output(sb.ToString());
454 }
455
456 private void BuildDetailedStatsByUserReport(StringBuilder sb, ScenePresence sp)
457 {
458 sb.AppendFormat("Avatar name {0}, type {1}\n", sp.Name, sp.IsChildAgent ? "child" : "root");
459
460 ConsoleDisplayTable cdt = new ConsoleDisplayTable();
461 cdt.AddColumn("Cap Name", 34);
462 cdt.AddColumn("Req Received", 12);
463 cdt.AddColumn("Req Handled", 12);
464 cdt.Indent = 2;
465
466 Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
467
468 if (caps == null)
469 return;
470
471 Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
472
473 foreach (IRequestHandler reqHandler in capsHandlers.Values.OrderByDescending(rh => rh.RequestsReceived))
474 {
475 cdt.AddRow(reqHandler.Name, reqHandler.RequestsReceived, reqHandler.RequestsHandled);
476 }
477
478 sb.Append(cdt.ToString());
479 }
480
481 private void BuildSummaryStatsByUserReport(StringBuilder sb)
482 {
483 ConsoleDisplayTable cdt = new ConsoleDisplayTable();
484 cdt.AddColumn("Name", 32);
485 cdt.AddColumn("Type", 5);
486 cdt.AddColumn("Req Received", 12);
487 cdt.AddColumn("Req Handled", 12);
488 cdt.Indent = 2;
489
490 m_scene.ForEachScenePresence(
491 sp =>
492 {
493 Caps caps = m_scene.CapsModule.GetCapsForUser(sp.UUID);
494
495 if (caps == null)
496 return;
497
498 Dictionary<string, IRequestHandler> capsHandlers = caps.CapsHandlers.GetCapsHandlers();
499
500 int totalRequestsReceived = 0;
501 int totalRequestsHandled = 0;
502
503 foreach (IRequestHandler reqHandler in capsHandlers.Values)
504 {
505 totalRequestsReceived += reqHandler.RequestsReceived;
506 totalRequestsHandled += reqHandler.RequestsHandled;
507 }
508
509 cdt.AddRow(sp.Name, sp.IsChildAgent ? "child" : "root", totalRequestsReceived, totalRequestsHandled);
510 }
511 );
512
513 sb.Append(cdt.ToString());
514 }
289 } 515 }
290} \ No newline at end of file 516} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
index eb74cda..2366767 100644
--- a/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
+++ b/OpenSim/Region/CoreModules/World/Estate/XEstateRequestHandler.cs
@@ -55,7 +55,7 @@ namespace OpenSim.Region.CoreModules.World.Estate
55 m_EstateModule = fmodule; 55 m_EstateModule = fmodule;
56 } 56 }
57 57
58 public override byte[] Handle(string path, Stream requestData, 58 protected override byte[] ProcessRequest(string path, Stream requestData,
59 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 59 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
60 { 60 {
61 StreamReader sr = new StreamReader(requestData); 61 StreamReader sr = new StreamReader(requestData);
diff --git a/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs b/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs
index 726becf..f208afb 100644
--- a/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs
+++ b/OpenSim/Region/Framework/Scenes/RegionStatsHandler.cs
@@ -63,7 +63,7 @@ namespace OpenSim.Region.Framework.Scenes
63 osXStatsURI = Util.SHA1Hash(regionInfo.osSecret); 63 osXStatsURI = Util.SHA1Hash(regionInfo.osSecret);
64 } 64 }
65 65
66 public override byte[] Handle( 66 protected override byte[] ProcessRequest(
67 string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 67 string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
68 { 68 {
69 return Util.UTF8.GetBytes(Report()); 69 return Util.UTF8.GetBytes(Report());
diff --git a/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs
index 1ea1c20..6e0a80a 100644
--- a/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs
+++ b/OpenSim/Region/OptionalModules/ViewerSupport/DynamicMenuModule.cs
@@ -281,7 +281,7 @@ namespace OpenSim.Region.OptionalModules.ViewerSupport
281 m_module = module; 281 m_module = module;
282 } 282 }
283 283
284 public override byte[] Handle(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 284 protected override byte[] ProcessRequest(string path, Stream request, IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
285 { 285 {
286 StreamReader reader = new StreamReader(request); 286 StreamReader reader = new StreamReader(request);
287 string requestBody = reader.ReadToEnd(); 287 string requestBody = reader.ReadToEnd();
diff --git a/OpenSim/Region/OptionalModules/World/WorldView/WorldViewRequestHandler.cs b/OpenSim/Region/OptionalModules/World/WorldView/WorldViewRequestHandler.cs
index 550b5d4..8720cc7 100644
--- a/OpenSim/Region/OptionalModules/World/WorldView/WorldViewRequestHandler.cs
+++ b/OpenSim/Region/OptionalModules/World/WorldView/WorldViewRequestHandler.cs
@@ -55,7 +55,7 @@ namespace OpenSim.Region.OptionalModules.World.WorldView
55 m_WorldViewModule = fmodule; 55 m_WorldViewModule = fmodule;
56 } 56 }
57 57
58 public override byte[] Handle(string path, Stream requestData, 58 protected override byte[] ProcessRequest(string path, Stream requestData,
59 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse) 59 IOSHttpRequest httpRequest, IOSHttpResponse httpResponse)
60 { 60 {
61 httpResponse.ContentType = "image/jpeg"; 61 httpResponse.ContentType = "image/jpeg";