diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/World')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | 77 |
1 files changed, 47 insertions, 30 deletions
diff --git a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs index c303d6d..d363b15 100644 --- a/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Estate/EstateManagementModule.cs | |||
@@ -26,8 +26,10 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections; | ||
29 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
30 | using System.IO; | 31 | using System.IO; |
32 | using System.Linq; | ||
31 | using System.Reflection; | 33 | using System.Reflection; |
32 | using System.Security; | 34 | using System.Security; |
33 | using log4net; | 35 | using log4net; |
@@ -876,52 +878,67 @@ namespace OpenSim.Region.CoreModules.World.Estate | |||
876 | if (!Scene.Permissions.CanIssueEstateCommand(remoteClient.AgentId, false)) | 878 | if (!Scene.Permissions.CanIssueEstateCommand(remoteClient.AgentId, false)) |
877 | return; | 879 | return; |
878 | 880 | ||
879 | Dictionary<uint, float> SceneData = new Dictionary<uint,float>(); | 881 | Dictionary<uint, float> sceneData = null; |
880 | List<UUID> uuidNameLookupList = new List<UUID>(); | 882 | List<UUID> uuidNameLookupList = new List<UUID>(); |
881 | 883 | ||
882 | if (reportType == 1) | 884 | if (reportType == 1) |
883 | { | 885 | { |
884 | SceneData = Scene.PhysicsScene.GetTopColliders(); | 886 | sceneData = Scene.PhysicsScene.GetTopColliders(); |
885 | } | 887 | } |
886 | else if (reportType == 0) | 888 | else if (reportType == 0) |
887 | { | 889 | { |
888 | SceneData = Scene.SceneGraph.GetTopScripts(); | 890 | IScriptModule scriptModule = Scene.RequestModuleInterface<IScriptModule>(); |
891 | |||
892 | if (scriptModule != null) | ||
893 | sceneData = scriptModule.GetObjectScriptsExecutionTimes(); | ||
889 | } | 894 | } |
890 | 895 | ||
891 | List<LandStatReportItem> SceneReport = new List<LandStatReportItem>(); | 896 | List<LandStatReportItem> SceneReport = new List<LandStatReportItem>(); |
892 | lock (SceneData) | 897 | if (sceneData != null) |
893 | { | 898 | { |
894 | foreach (uint obj in SceneData.Keys) | 899 | var sortedSceneData |
900 | = sceneData.Select( | ||
901 | item => new { Measurement = item.Value, Part = Scene.GetSceneObjectPart(item.Key) }); | ||
902 | |||
903 | sortedSceneData.OrderBy(item => item.Measurement); | ||
904 | |||
905 | int items = 0; | ||
906 | |||
907 | foreach (var entry in sortedSceneData) | ||
895 | { | 908 | { |
896 | SceneObjectPart prt = Scene.GetSceneObjectPart(obj); | 909 | if (entry.Part == null) |
897 | if (prt != null) | 910 | continue; |
911 | |||
912 | items++; | ||
913 | SceneObjectGroup so = entry.Part.ParentGroup; | ||
914 | |||
915 | LandStatReportItem lsri = new LandStatReportItem(); | ||
916 | lsri.LocationX = so.AbsolutePosition.X; | ||
917 | lsri.LocationY = so.AbsolutePosition.Y; | ||
918 | lsri.LocationZ = so.AbsolutePosition.Z; | ||
919 | lsri.Score = entry.Measurement; | ||
920 | lsri.TaskID = so.UUID; | ||
921 | lsri.TaskLocalID = so.LocalId; | ||
922 | lsri.TaskName = entry.Part.Name; | ||
923 | lsri.OwnerName = "waiting"; | ||
924 | lock (uuidNameLookupList) | ||
925 | uuidNameLookupList.Add(so.OwnerID); | ||
926 | |||
927 | if (filter.Length != 0) | ||
898 | { | 928 | { |
899 | SceneObjectGroup sog = prt.ParentGroup; | 929 | if ((lsri.OwnerName.Contains(filter) || lsri.TaskName.Contains(filter))) |
900 | LandStatReportItem lsri = new LandStatReportItem(); | ||
901 | lsri.LocationX = sog.AbsolutePosition.X; | ||
902 | lsri.LocationY = sog.AbsolutePosition.Y; | ||
903 | lsri.LocationZ = sog.AbsolutePosition.Z; | ||
904 | lsri.Score = SceneData[obj]; | ||
905 | lsri.TaskID = sog.UUID; | ||
906 | lsri.TaskLocalID = sog.LocalId; | ||
907 | lsri.TaskName = sog.GetPartName(obj); | ||
908 | lsri.OwnerName = "waiting"; | ||
909 | lock (uuidNameLookupList) | ||
910 | uuidNameLookupList.Add(sog.OwnerID); | ||
911 | |||
912 | if (filter.Length != 0) | ||
913 | { | 930 | { |
914 | if ((lsri.OwnerName.Contains(filter) || lsri.TaskName.Contains(filter))) | ||
915 | { | ||
916 | } | ||
917 | else | ||
918 | { | ||
919 | continue; | ||
920 | } | ||
921 | } | 931 | } |
922 | 932 | else | |
923 | SceneReport.Add(lsri); | 933 | { |
934 | continue; | ||
935 | } | ||
924 | } | 936 | } |
937 | |||
938 | SceneReport.Add(lsri); | ||
939 | |||
940 | if (items >= 100) | ||
941 | break; | ||
925 | } | 942 | } |
926 | } | 943 | } |
927 | 944 | ||