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.bulletsim
parent
0897647709
commit
3534f4492a
|
@ -174,14 +174,13 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// </summary>
|
||||||
public override string ToString()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
string s = "";
|
string s = "";
|
||||||
for (int i = 0; i < NumberOfQueues; i++)
|
for (int i = 0; i < NumberOfQueues; i++)
|
||||||
{
|
s += String.Format("{0,7} ",m_heaps[i].Count);
|
||||||
if (s != "") s += ",";
|
|
||||||
s += m_heaps[i].Count.ToString();
|
|
||||||
}
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -384,6 +384,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } }
|
public ulong ActiveGroupPowers { get { return m_activeGroupPowers; } }
|
||||||
public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); }
|
public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Entity update queues
|
||||||
|
/// </summary>
|
||||||
|
public PriorityQueue EntityUpdateQueue { get { return m_entityUpdates; } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// First name of the agent/avatar represented by the client
|
/// First name of the agent/avatar represented by the client
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -228,26 +228,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
/// <returns>Information about the client connection</returns>
|
/// <returns>Information about the client connection</returns>
|
||||||
public ClientInfo GetClientInfo()
|
public ClientInfo GetClientInfo()
|
||||||
{
|
{
|
||||||
///<mic>
|
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
///</mic>
|
|
||||||
|
|
||||||
// TODO: This data structure is wrong in so many ways. Locking and copying the entire lists
|
// 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
|
// of pending and needed ACKs for every client every time some method wants information about
|
||||||
// this connection is a recipe for poor performance
|
// 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.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate;
|
||||||
info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate;
|
info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate;
|
||||||
info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].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.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate;
|
||||||
info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate;
|
info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate;
|
||||||
info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate;
|
info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate;
|
||||||
info.totalThrottle = info.resendThrottle + info.landThrottle + info.windThrottle + info.cloudThrottle +
|
info.totalThrottle = (int)m_throttleCategory.DripRate;
|
||||||
info.taskThrottle + info.assetThrottle + info.textureThrottle;
|
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,6 +81,14 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
|
||||||
lock (m_scenes)
|
lock (m_scenes)
|
||||||
m_scenes[scene.RegionInfo.RegionID] = scene;
|
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(
|
scene.AddCommand(
|
||||||
this, "show queues",
|
this, "show queues",
|
||||||
"show queues [full]",
|
"show queues [full]",
|
||||||
|
@ -119,6 +127,11 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
|
||||||
// m_log.DebugFormat("[LINDEN UDP INFO MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName);
|
// 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)
|
protected void ShowQueuesReport(string module, string[] cmd)
|
||||||
{
|
{
|
||||||
MainConsole.Instance.Output(GetQueuesReport(cmd));
|
MainConsole.Instance.Output(GetQueuesReport(cmd));
|
||||||
|
@ -155,6 +168,80 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
|
||||||
"");
|
"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Generate UDP Queue data report for each client
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="showParams"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generate UDP Queue data report for each client
|
/// Generate UDP Queue data report for each client
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -163,9 +250,12 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
|
||||||
protected string GetQueuesReport(string[] showParams)
|
protected string GetQueuesReport(string[] showParams)
|
||||||
{
|
{
|
||||||
bool showChildren = false;
|
bool showChildren = false;
|
||||||
|
string pname = "";
|
||||||
|
|
||||||
if (showParams.Length > 2 && showParams[2] == "full")
|
if (showParams.Length > 2 && showParams[2] == "full")
|
||||||
showChildren = true;
|
showChildren = true;
|
||||||
|
else if (showParams.Length > 3)
|
||||||
|
pname = showParams[2] + " " + showParams[3];
|
||||||
|
|
||||||
StringBuilder report = new StringBuilder();
|
StringBuilder report = new StringBuilder();
|
||||||
|
|
||||||
|
@ -224,6 +314,9 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
|
||||||
return;
|
return;
|
||||||
|
|
||||||
string name = client.Name;
|
string name = client.Name;
|
||||||
|
if (pname != "" && name != pname)
|
||||||
|
return;
|
||||||
|
|
||||||
string regionName = scene.RegionInfo.RegionName;
|
string regionName = scene.RegionInfo.RegionName;
|
||||||
|
|
||||||
report.Append(GetColumnEntry(name, maxNameLength, columnPadding));
|
report.Append(GetColumnEntry(name, maxNameLength, columnPadding));
|
||||||
|
@ -249,9 +342,12 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
|
||||||
protected string GetThrottlesReport(string[] showParams)
|
protected string GetThrottlesReport(string[] showParams)
|
||||||
{
|
{
|
||||||
bool showChildren = false;
|
bool showChildren = false;
|
||||||
|
string pname = "";
|
||||||
|
|
||||||
if (showParams.Length > 2 && showParams[2] == "full")
|
if (showParams.Length > 2 && showParams[2] == "full")
|
||||||
showChildren = true;
|
showChildren = true;
|
||||||
|
else if (showParams.Length > 3)
|
||||||
|
pname = showParams[2] + " " + showParams[3];
|
||||||
|
|
||||||
StringBuilder report = new StringBuilder();
|
StringBuilder report = new StringBuilder();
|
||||||
|
|
||||||
|
@ -314,6 +410,9 @@ namespace OpenSim.Region.CoreModules.UDP.Linden
|
||||||
return;
|
return;
|
||||||
|
|
||||||
string name = client.Name;
|
string name = client.Name;
|
||||||
|
if (pname != "" && name != pname)
|
||||||
|
return;
|
||||||
|
|
||||||
string regionName = scene.RegionInfo.RegionName;
|
string regionName = scene.RegionInfo.RegionName;
|
||||||
|
|
||||||
LLUDPClient llUdpClient = llClient.UDPClient;
|
LLUDPClient llUdpClient = llClient.UDPClient;
|
||||||
|
|
Loading…
Reference in New Issue