From 56faeafdae5b4b76593e268bc994a7f663bd5685 Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Wed, 14 May 2008 21:27:54 +0000
Subject: * Refactor: Renaming non viewer statistics classes from Reporters to
Collectors - this seems more intuitive
---
.../Framework/Statistics/SimExtraStatsCollector.cs | 156 +++++++++++++++++++++
1 file changed, 156 insertions(+)
create mode 100644 OpenSim/Framework/Statistics/SimExtraStatsCollector.cs
(limited to 'OpenSim/Framework/Statistics/SimExtraStatsCollector.cs')
diff --git a/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs
new file mode 100644
index 0000000..4e69d17
--- /dev/null
+++ b/OpenSim/Framework/Statistics/SimExtraStatsCollector.cs
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using libsecondlife;
+using OpenSim.Framework.Statistics.Interfaces;
+
+namespace OpenSim.Framework.Statistics
+{
+ ///
+ /// Collects sim statistics which aren't already being collected for the linden viewer's statistics pane
+ ///
+ public class SimExtraStatsCollector
+ {
+ private long assetsInCache;
+ private long texturesInCache;
+ private long assetCacheMemoryUsage;
+ private long textureCacheMemoryUsage;
+
+ public long AssetsInCache { get { return assetsInCache; } }
+ public long TexturesInCache { get { return texturesInCache; } }
+ public long AssetCacheMemoryUsage { get { return assetCacheMemoryUsage; } }
+ public long TextureCacheMemoryUsage { get { return textureCacheMemoryUsage; } }
+
+ ///
+ /// Retain a dictionary of all packet queues stats reporters
+ ///
+ private IDictionary packetQueueStatsCollectors
+ = new Dictionary();
+
+ public void AddAsset(AssetBase asset)
+ {
+ assetsInCache++;
+ assetCacheMemoryUsage += asset.Data.Length;
+ }
+
+ public void AddTexture(AssetBase image)
+ {
+ // Tedd: I added null check to avoid exception. Don't know if texturesInCache should ++ anyway?
+ if (image.Data != null)
+ {
+ texturesInCache++;
+ textureCacheMemoryUsage += image.Data.Length;
+ }
+ }
+
+ ///
+ /// Register as a packet queue stats provider
+ ///
+ /// An agent LLUUID
+ ///
+ public void RegisterPacketQueueStatsProvider(LLUUID uuid, IPullStatsProvider provider)
+ {
+ lock (packetQueueStatsCollectors)
+ {
+ packetQueueStatsCollectors[uuid] = new PacketQueueStatsCollector(provider);
+ }
+ }
+
+ ///
+ /// Deregister a packet queue stats provider
+ ///
+ /// An agent LLUUID
+ public void DeregisterPacketQueueStatsProvider(LLUUID uuid)
+ {
+ lock (packetQueueStatsCollectors)
+ {
+ packetQueueStatsCollectors.Remove(uuid);
+ }
+ }
+
+ ///
+ /// Report back collected statistical information.
+ ///
+ ///
+ public string Report()
+ {
+ StringBuilder sb = new StringBuilder(Environment.NewLine);
+ sb.Append("ASSET CACHE STATISTICS");
+ sb.Append(Environment.NewLine);
+ sb.Append(
+ string.Format(
+@"Asset cache contains {0,6} assets using {1,10:0.000}K
+Texture cache contains {2,6} textures using {3,10:0.000}K" + Environment.NewLine,
+ AssetsInCache, AssetCacheMemoryUsage / 1024.0,
+ TexturesInCache, TextureCacheMemoryUsage / 1024.0));
+
+ sb.Append(Environment.NewLine);
+ sb.Append("PACKET QUEUE STATISTICS");
+ sb.Append(Environment.NewLine);
+ sb.Append("Agent UUID ");
+ sb.Append(
+ string.Format(
+ " {0,7} {1,7} {2,7} {3,7} {4,7} {5,7} {6,7} {7,7} {8,7} {9,7}",
+ "Send", "In", "Out", "Resend", "Land", "Wind", "Cloud", "Task", "Texture", "Asset"));
+ sb.Append(Environment.NewLine);
+
+ foreach (LLUUID key in packetQueueStatsCollectors.Keys)
+ {
+ sb.Append(string.Format("{0}: ", key));
+ sb.Append(packetQueueStatsCollectors[key].Report());
+ sb.Append(Environment.NewLine);
+ }
+
+ return sb.ToString();
+ }
+ }
+
+ ///
+ /// Pull packet queue stats from packet queues and report
+ ///
+ public class PacketQueueStatsCollector
+ {
+ private IPullStatsProvider m_statsProvider;
+
+ public PacketQueueStatsCollector(IPullStatsProvider provider)
+ {
+ m_statsProvider = provider;
+ }
+
+ ///
+ /// Report back collected statistical information.
+ ///
+ ///
+ public string Report()
+ {
+ return m_statsProvider.GetStats();
+ }
+ }
+}
--
cgit v1.1