From 2a17c39dfe97b0637aab9f24b7152d5080da0969 Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 17 Nov 2010 19:39:12 +0000
Subject: Fix "show queues" console command
For each agent, this command shows how many packets have been sent/received and how many bytes remain in each of the send queues (resend, land, texture, etc.)
Sometimes useful for diagnostics
---
OpenSim/Region/Application/OpenSim.cs | 101 +++++++++++++++++++++++-----------
1 file changed, 69 insertions(+), 32 deletions(-)
(limited to 'OpenSim/Region/Application')
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index f80cb34..c20a4e8 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -30,6 +30,7 @@ using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
+using System.Text;
using System.Timers;
using log4net;
using Nini.Config;
@@ -988,38 +989,74 @@ namespace OpenSim
///
private string GetQueuesReport()
{
- string report = String.Empty;
-
- m_sceneManager.ForEachScene(delegate(Scene scene)
- {
- scene.ForEachClient(delegate(IClientAPI client)
- {
- if (client is IStatsCollector)
- {
- report = report + client.FirstName +
- " " + client.LastName;
-
- IStatsCollector stats =
- (IStatsCollector) client;
-
- report = report + string.Format("{0,7} {1,7} {2,7} {3,7} {4,7} {5,7} {6,7} {7,7} {8,7} {9,7}\n",
- "Send",
- "In",
- "Out",
- "Resend",
- "Land",
- "Wind",
- "Cloud",
- "Task",
- "Texture",
- "Asset");
- report = report + stats.Report() +
- "\n";
- }
- });
- });
-
- return report;
+ StringBuilder report = new StringBuilder();
+
+ int columnPadding = 2;
+ int maxNameLength = 18;
+ int maxRegionNameLength = 14;
+ int maxTypeLength = 5;
+ int totalInfoFieldsLength = maxNameLength + columnPadding + maxRegionNameLength + columnPadding + maxTypeLength + columnPadding;
+
+ report.AppendFormat("{0,-" + maxNameLength + "}{1,-" + columnPadding + "}", "User", "");
+ report.AppendFormat("{0,-" + maxRegionNameLength + "}{1,-" + columnPadding + "}", "Region", "");
+ report.AppendFormat("{0,-" + maxTypeLength + "}{1,-" + columnPadding + "}", "Type", "");
+
+ report.AppendFormat(
+ "{0,9} {1,10} {2,8} {3,7} {4,7} {5,7} {6,7} {7,9} {8,7} {9,7}\n",
+ "Packets",
+ "Packets",
+ "Bytes",
+ "Bytes",
+ "Bytes",
+ "Bytes",
+ "Bytes",
+ "Bytes",
+ "Bytes",
+ "Bytes");
+
+ report.AppendFormat("{0,-" + totalInfoFieldsLength + "}", "");
+ report.AppendFormat(
+ "{0,9} {1,10} {2,8} {3,7} {4,7} {5,7} {6,7} {7,9} {8,7} {9,7}\n",
+ "Sent",
+ "Received",
+ "Resend",
+ "Land",
+ "Wind",
+ "Cloud",
+ "Task",
+ "Texture",
+ "Asset",
+ "State");
+
+ m_sceneManager.ForEachScene(
+ delegate(Scene scene)
+ {
+ scene.ForEachClient(
+ delegate(IClientAPI client)
+ {
+ if (client is IStatsCollector)
+ {
+ string name = client.Name;
+ string regionName = scene.RegionInfo.RegionName;
+
+ report.AppendFormat(
+ "{0,-" + maxNameLength + "}{1,-" + columnPadding + "}",
+ name.Length > maxNameLength ? name.Substring(0, maxNameLength) : name, "");
+ report.AppendFormat(
+ "{0,-" + maxRegionNameLength + "}{1,-" + columnPadding + "}",
+ regionName.Length > maxRegionNameLength ? regionName.Substring(0, maxRegionNameLength) : regionName, "");
+ report.AppendFormat(
+ "{0,-" + maxTypeLength + "}{1,-" + columnPadding + "}",
+ scene.PresenceChildStatus(client.AgentId) ? "Child" : "Root", "");
+
+ IStatsCollector stats = (IStatsCollector)client;
+
+ report.AppendLine(stats.Report());
+ }
+ });
+ });
+
+ return report.ToString();
}
///
--
cgit v1.1