From 3534f4492ae747baff492f4bc10bf06994ee1bc6 Mon Sep 17 00:00:00 2001
From: Mic Bowman
Date: Fri, 22 Apr 2011 14:01:12 -0700
Subject: Various clean ups. Removed some debugging code. Added a new "show
pqueues" command to look at the entity update priority queue. Added a "name"
parameter to show queues, show pqueues and show throttles to look at data for
a specific user.
---
.../Region/ClientStack/LindenUDP/LLClientView.cs | 5 +
.../Region/ClientStack/LindenUDP/LLUDPClient.cs | 24 +----
.../Agent/UDP/Linden/LindenUDPInfoModule.cs | 103 ++++++++++++++++++++-
3 files changed, 107 insertions(+), 25 deletions(-)
(limited to 'OpenSim/Region')
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 6129e10..32a075a 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -385,6 +385,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); }
///
+ /// Entity update queues
+ ///
+ public PriorityQueue EntityUpdateQueue { get { return m_entityUpdates; } }
+
+ ///
/// First name of the agent/avatar represented by the client
///
public string FirstName { get { return m_firstName; } }
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
index 20bfec8..103ec66 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLUDPClient.cs
@@ -228,26 +228,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
/// Information about the client connection
public ClientInfo GetClientInfo()
{
-///
- TokenBucket tb;
-
- tb = m_throttleClient.Parent;
- m_log.WarnFormat("[TOKENS] {3}: Actual={0},Request={1},TotalRequest={2}",tb.DripRate,tb.RequestedDripRate,tb.TotalDripRequest,"ROOT");
-
- tb = m_throttleClient;
- m_log.WarnFormat("[TOKENS] {3}: Actual={0},Request={1},TotalRequest={2}",tb.DripRate,tb.RequestedDripRate,tb.TotalDripRequest," CLIENT");
-
- tb = m_throttleCategory;
- m_log.WarnFormat("[TOKENS] {3}: Actual={0},Request={1},TotalRequest={2}",tb.DripRate,tb.RequestedDripRate,tb.TotalDripRequest," CATEGORY");
-
- for (int i = 0; i < THROTTLE_CATEGORY_COUNT; i++)
- {
- tb = m_throttleCategories[i];
- m_log.WarnFormat("[TOKENS] {4} <{0}:{1}>: Actual={2},Requested={3}",AgentID,i,tb.DripRate,tb.RequestedDripRate," BUCKET");
- }
-
-///
-
// TODO: This data structure is wrong in so many ways. Locking and copying the entire lists
// of pending and needed ACKs for every client every time some method wants information about
// this connection is a recipe for poor performance
@@ -259,12 +239,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP
info.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate;
info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate;
info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate;
- // info.taskThrottle = m_throttleCategories[(int)ThrottleOutPacketType.State].DripRate + m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate;
info.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate;
info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate;
info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate;
- info.totalThrottle = info.resendThrottle + info.landThrottle + info.windThrottle + info.cloudThrottle +
- info.taskThrottle + info.assetThrottle + info.textureThrottle;
+ info.totalThrottle = (int)m_throttleCategory.DripRate;
return info;
}
diff --git a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
index 6a24cc1..ddbc079 100644
--- a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
+++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs
@@ -82,6 +82,14 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
m_scenes[scene.RegionInfo.RegionID] = scene;
scene.AddCommand(
+ this, "show pqueues",
+ "show pqueues [full]",
+ "Show priority queue data for each client",
+ "Without the 'full' option, only root agents are shown."
+ + " With the 'full' option child agents are also shown.",
+ ShowPQueuesReport);
+
+ scene.AddCommand(
this, "show queues",
"show queues [full]",
"Show queue data for each client",
@@ -119,6 +127,11 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName);
}
+ protected void ShowPQueuesReport(string module, string[] cmd)
+ {
+ MainConsole.Instance.Output(GetPQueuesReport(cmd));
+ }
+
protected void ShowQueuesReport(string module, string[] cmd)
{
MainConsole.Instance.Output(GetQueuesReport(cmd));
@@ -155,6 +168,80 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
"");
}
+
+ ///
+ /// Generate UDP Queue data report for each client
+ ///
+ ///
+ ///
+ protected string GetPQueuesReport(string[] showParams)
+ {
+ bool showChildren = false;
+ string pname = "";
+
+ if (showParams.Length > 2 && showParams[2] == "full")
+ showChildren = true;
+ else if (showParams.Length > 3)
+ pname = showParams[2] + " " + showParams[3];
+
+ StringBuilder report = new StringBuilder();
+
+ int columnPadding = 2;
+ int maxNameLength = 18;
+ int maxRegionNameLength = 14;
+ int maxTypeLength = 4;
+ int totalInfoFieldsLength = maxNameLength + columnPadding + maxRegionNameLength + columnPadding + maxTypeLength + columnPadding;
+
+ report.Append(GetColumnEntry("User", maxNameLength, columnPadding));
+ report.Append(GetColumnEntry("Region", maxRegionNameLength, columnPadding));
+ report.Append(GetColumnEntry("Type", maxTypeLength, columnPadding));
+
+ report.AppendFormat(
+ "{0,7} {1,7} {2,7} {3,7} {4,7} {5,7} {6,7} {7,7} {8,7} {9,7} {10,7} {11,7}\n",
+ "Pri 0",
+ "Pri 1",
+ "Pri 2",
+ "Pri 3",
+ "Pri 4",
+ "Pri 5",
+ "Pri 6",
+ "Pri 7",
+ "Pri 8",
+ "Pri 9",
+ "Pri 10",
+ "Pri 11");
+
+ lock (m_scenes)
+ {
+ foreach (Scene scene in m_scenes.Values)
+ {
+ scene.ForEachClient(
+ delegate(IClientAPI client)
+ {
+ if (client is LLClientView)
+ {
+ bool isChild = scene.PresenceChildStatus(client.AgentId);
+ if (isChild && !showChildren)
+ return;
+
+ string name = client.Name;
+ if (pname != "" && name != pname)
+ return;
+
+ string regionName = scene.RegionInfo.RegionName;
+
+ report.Append(GetColumnEntry(name, maxNameLength, columnPadding));
+ report.Append(GetColumnEntry(regionName, maxRegionNameLength, columnPadding));
+ report.Append(GetColumnEntry(isChild ? "Cd" : "Rt", maxTypeLength, columnPadding));
+ report.AppendLine(((LLClientView)client).EntityUpdateQueue.ToString());
+ }
+ });
+ }
+ }
+
+ return report.ToString();
+ }
+
///
/// Generate UDP Queue data report for each client
///
@@ -163,10 +250,13 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
protected string GetQueuesReport(string[] showParams)
{
bool showChildren = false;
+ string pname = "";
if (showParams.Length > 2 && showParams[2] == "full")
showChildren = true;
-
+ else if (showParams.Length > 3)
+ pname = showParams[2] + " " + showParams[3];
+
StringBuilder report = new StringBuilder();
int columnPadding = 2;
@@ -224,6 +314,9 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
return;
string name = client.Name;
+ if (pname != "" && name != pname)
+ return;
+
string regionName = scene.RegionInfo.RegionName;
report.Append(GetColumnEntry(name, maxNameLength, columnPadding));
@@ -249,10 +342,13 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
protected string GetThrottlesReport(string[] showParams)
{
bool showChildren = false;
+ string pname = "";
if (showParams.Length > 2 && showParams[2] == "full")
showChildren = true;
-
+ else if (showParams.Length > 3)
+ pname = showParams[2] + " " + showParams[3];
+
StringBuilder report = new StringBuilder();
int columnPadding = 2;
@@ -314,6 +410,9 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
return;
string name = client.Name;
+ if (pname != "" && name != pname)
+ return;
+
string regionName = scene.RegionInfo.RegionName;
LLUDPClient llUdpClient = llClient.UDPClient;
--
cgit v1.1