diff options
Diffstat (limited to '')
3 files changed, 107 insertions, 25 deletions
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 | |||
385 | public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); } | 385 | public bool IsGroupMember(UUID groupID) { return m_groupPowers.ContainsKey(groupID); } |
386 | 386 | ||
387 | /// <summary> | 387 | /// <summary> |
388 | /// Entity update queues | ||
389 | /// </summary> | ||
390 | public PriorityQueue EntityUpdateQueue { get { return m_entityUpdates; } } | ||
391 | |||
392 | /// <summary> | ||
388 | /// First name of the agent/avatar represented by the client | 393 | /// First name of the agent/avatar represented by the client |
389 | /// </summary> | 394 | /// </summary> |
390 | public string FirstName { get { return m_firstName; } } | 395 | 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 | |||
228 | /// <returns>Information about the client connection</returns> | 228 | /// <returns>Information about the client connection</returns> |
229 | public ClientInfo GetClientInfo() | 229 | public ClientInfo GetClientInfo() |
230 | { | 230 | { |
231 | ///<mic> | ||
232 | TokenBucket tb; | ||
233 | |||
234 | tb = m_throttleClient.Parent; | ||
235 | m_log.WarnFormat("[TOKENS] {3}: Actual={0},Request={1},TotalRequest={2}",tb.DripRate,tb.RequestedDripRate,tb.TotalDripRequest,"ROOT"); | ||
236 | |||
237 | tb = m_throttleClient; | ||
238 | m_log.WarnFormat("[TOKENS] {3}: Actual={0},Request={1},TotalRequest={2}",tb.DripRate,tb.RequestedDripRate,tb.TotalDripRequest," CLIENT"); | ||
239 | |||
240 | tb = m_throttleCategory; | ||
241 | m_log.WarnFormat("[TOKENS] {3}: Actual={0},Request={1},TotalRequest={2}",tb.DripRate,tb.RequestedDripRate,tb.TotalDripRequest," CATEGORY"); | ||
242 | |||
243 | for (int i = 0; i < THROTTLE_CATEGORY_COUNT; i++) | ||
244 | { | ||
245 | tb = m_throttleCategories[i]; | ||
246 | m_log.WarnFormat("[TOKENS] {4} <{0}:{1}>: Actual={2},Requested={3}",AgentID,i,tb.DripRate,tb.RequestedDripRate," BUCKET"); | ||
247 | } | ||
248 | |||
249 | ///</mic> | ||
250 | |||
251 | // TODO: This data structure is wrong in so many ways. Locking and copying the entire lists | 231 | // TODO: This data structure is wrong in so many ways. Locking and copying the entire lists |
252 | // of pending and needed ACKs for every client every time some method wants information about | 232 | // of pending and needed ACKs for every client every time some method wants information about |
253 | // this connection is a recipe for poor performance | 233 | // this connection is a recipe for poor performance |
@@ -259,12 +239,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
259 | info.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate; | 239 | info.landThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Land].DripRate; |
260 | info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate; | 240 | info.windThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Wind].DripRate; |
261 | info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate; | 241 | info.cloudThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Cloud].DripRate; |
262 | // info.taskThrottle = m_throttleCategories[(int)ThrottleOutPacketType.State].DripRate + m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate; | ||
263 | info.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate; | 242 | info.taskThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Task].DripRate; |
264 | info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate; | 243 | info.assetThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Asset].DripRate; |
265 | info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate; | 244 | info.textureThrottle = (int)m_throttleCategories[(int)ThrottleOutPacketType.Texture].DripRate; |
266 | info.totalThrottle = info.resendThrottle + info.landThrottle + info.windThrottle + info.cloudThrottle + | 245 | info.totalThrottle = (int)m_throttleCategory.DripRate; |
267 | info.taskThrottle + info.assetThrottle + info.textureThrottle; | ||
268 | 246 | ||
269 | return info; | 247 | return info; |
270 | } | 248 | } |
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 | |||
82 | m_scenes[scene.RegionInfo.RegionID] = scene; | 82 | m_scenes[scene.RegionInfo.RegionID] = scene; |
83 | 83 | ||
84 | scene.AddCommand( | 84 | scene.AddCommand( |
85 | this, "show pqueues", | ||
86 | "show pqueues [full]", | ||
87 | "Show priority queue data for each client", | ||
88 | "Without the 'full' option, only root agents are shown." | ||
89 | + " With the 'full' option child agents are also shown.", | ||
90 | ShowPQueuesReport); | ||
91 | |||
92 | scene.AddCommand( | ||
85 | this, "show queues", | 93 | this, "show queues", |
86 | "show queues [full]", | 94 | "show queues [full]", |
87 | "Show queue data for each client", | 95 | "Show queue data for each client", |
@@ -119,6 +127,11 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
119 | // m_log.DebugFormat("[LINDEN UDP INFO MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); | 127 | // m_log.DebugFormat("[LINDEN UDP INFO MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); |
120 | } | 128 | } |
121 | 129 | ||
130 | protected void ShowPQueuesReport(string module, string[] cmd) | ||
131 | { | ||
132 | MainConsole.Instance.Output(GetPQueuesReport(cmd)); | ||
133 | } | ||
134 | |||
122 | protected void ShowQueuesReport(string module, string[] cmd) | 135 | protected void ShowQueuesReport(string module, string[] cmd) |
123 | { | 136 | { |
124 | MainConsole.Instance.Output(GetQueuesReport(cmd)); | 137 | MainConsole.Instance.Output(GetQueuesReport(cmd)); |
@@ -155,6 +168,80 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
155 | ""); | 168 | ""); |
156 | } | 169 | } |
157 | 170 | ||
171 | |||
172 | /// <summary> | ||
173 | /// Generate UDP Queue data report for each client | ||
174 | /// </summary> | ||
175 | /// <param name="showParams"></param> | ||
176 | /// <returns></returns> | ||
177 | protected string GetPQueuesReport(string[] showParams) | ||
178 | { | ||
179 | bool showChildren = false; | ||
180 | string pname = ""; | ||
181 | |||
182 | if (showParams.Length > 2 && showParams[2] == "full") | ||
183 | showChildren = true; | ||
184 | else if (showParams.Length > 3) | ||
185 | pname = showParams[2] + " " + showParams[3]; | ||
186 | |||
187 | StringBuilder report = new StringBuilder(); | ||
188 | |||
189 | int columnPadding = 2; | ||
190 | int maxNameLength = 18; | ||
191 | int maxRegionNameLength = 14; | ||
192 | int maxTypeLength = 4; | ||
193 | int totalInfoFieldsLength = maxNameLength + columnPadding + maxRegionNameLength + columnPadding + maxTypeLength + columnPadding; | ||
194 | |||
195 | report.Append(GetColumnEntry("User", maxNameLength, columnPadding)); | ||
196 | report.Append(GetColumnEntry("Region", maxRegionNameLength, columnPadding)); | ||
197 | report.Append(GetColumnEntry("Type", maxTypeLength, columnPadding)); | ||
198 | |||
199 | report.AppendFormat( | ||
200 | "{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", | ||
201 | "Pri 0", | ||
202 | "Pri 1", | ||
203 | "Pri 2", | ||
204 | "Pri 3", | ||
205 | "Pri 4", | ||
206 | "Pri 5", | ||
207 | "Pri 6", | ||
208 | "Pri 7", | ||
209 | "Pri 8", | ||
210 | "Pri 9", | ||
211 | "Pri 10", | ||
212 | "Pri 11"); | ||
213 | |||
214 | lock (m_scenes) | ||
215 | { | ||
216 | foreach (Scene scene in m_scenes.Values) | ||
217 | { | ||
218 | scene.ForEachClient( | ||
219 | delegate(IClientAPI client) | ||
220 | { | ||
221 | if (client is LLClientView) | ||
222 | { | ||
223 | bool isChild = scene.PresenceChildStatus(client.AgentId); | ||
224 | if (isChild && !showChildren) | ||
225 | return; | ||
226 | |||
227 | string name = client.Name; | ||
228 | if (pname != "" && name != pname) | ||
229 | return; | ||
230 | |||
231 | string regionName = scene.RegionInfo.RegionName; | ||
232 | |||
233 | report.Append(GetColumnEntry(name, maxNameLength, columnPadding)); | ||
234 | report.Append(GetColumnEntry(regionName, maxRegionNameLength, columnPadding)); | ||
235 | report.Append(GetColumnEntry(isChild ? "Cd" : "Rt", maxTypeLength, columnPadding)); | ||
236 | report.AppendLine(((LLClientView)client).EntityUpdateQueue.ToString()); | ||
237 | } | ||
238 | }); | ||
239 | } | ||
240 | } | ||
241 | |||
242 | return report.ToString(); | ||
243 | } | ||
244 | |||
158 | /// <summary> | 245 | /// <summary> |
159 | /// Generate UDP Queue data report for each client | 246 | /// Generate UDP Queue data report for each client |
160 | /// </summary> | 247 | /// </summary> |
@@ -163,10 +250,13 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
163 | protected string GetQueuesReport(string[] showParams) | 250 | protected string GetQueuesReport(string[] showParams) |
164 | { | 251 | { |
165 | bool showChildren = false; | 252 | bool showChildren = false; |
253 | string pname = ""; | ||
166 | 254 | ||
167 | if (showParams.Length > 2 && showParams[2] == "full") | 255 | if (showParams.Length > 2 && showParams[2] == "full") |
168 | showChildren = true; | 256 | showChildren = true; |
169 | 257 | else if (showParams.Length > 3) | |
258 | pname = showParams[2] + " " + showParams[3]; | ||
259 | |||
170 | StringBuilder report = new StringBuilder(); | 260 | StringBuilder report = new StringBuilder(); |
171 | 261 | ||
172 | int columnPadding = 2; | 262 | int columnPadding = 2; |
@@ -224,6 +314,9 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
224 | return; | 314 | return; |
225 | 315 | ||
226 | string name = client.Name; | 316 | string name = client.Name; |
317 | if (pname != "" && name != pname) | ||
318 | return; | ||
319 | |||
227 | string regionName = scene.RegionInfo.RegionName; | 320 | string regionName = scene.RegionInfo.RegionName; |
228 | 321 | ||
229 | report.Append(GetColumnEntry(name, maxNameLength, columnPadding)); | 322 | report.Append(GetColumnEntry(name, maxNameLength, columnPadding)); |
@@ -249,10 +342,13 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
249 | protected string GetThrottlesReport(string[] showParams) | 342 | protected string GetThrottlesReport(string[] showParams) |
250 | { | 343 | { |
251 | bool showChildren = false; | 344 | bool showChildren = false; |
345 | string pname = ""; | ||
252 | 346 | ||
253 | if (showParams.Length > 2 && showParams[2] == "full") | 347 | if (showParams.Length > 2 && showParams[2] == "full") |
254 | showChildren = true; | 348 | showChildren = true; |
255 | 349 | else if (showParams.Length > 3) | |
350 | pname = showParams[2] + " " + showParams[3]; | ||
351 | |||
256 | StringBuilder report = new StringBuilder(); | 352 | StringBuilder report = new StringBuilder(); |
257 | 353 | ||
258 | int columnPadding = 2; | 354 | int columnPadding = 2; |
@@ -314,6 +410,9 @@ namespace OpenSim.Region.CoreModules.UDP.Linden | |||
314 | return; | 410 | return; |
315 | 411 | ||
316 | string name = client.Name; | 412 | string name = client.Name; |
413 | if (pname != "" && name != pname) | ||
414 | return; | ||
415 | |||
317 | string regionName = scene.RegionInfo.RegionName; | 416 | string regionName = scene.RegionInfo.RegionName; |
318 | 417 | ||
319 | LLUDPClient llUdpClient = llClient.UDPClient; | 418 | LLUDPClient llUdpClient = llClient.UDPClient; |