Sync statistics to a file
parent
d514c31cc2
commit
cc2a679121
|
@ -64,10 +64,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
// The client connection to the RegionSyncServer
|
// The client connection to the RegionSyncServer
|
||||||
private TcpClient m_client = new TcpClient();
|
private TcpClient m_client = new TcpClient();
|
||||||
|
|
||||||
|
|
||||||
//KittyL: Comment out m_statsTimer for now, will figure out whether we need it for PhysEngine later
|
|
||||||
//private System.Timers.Timer m_statsTimer = new System.Timers.Timer(30000);
|
|
||||||
|
|
||||||
// The queue of incoming messages which need handling
|
// The queue of incoming messages which need handling
|
||||||
//private Queue<string> m_inQ = new Queue<string>();
|
//private Queue<string> m_inQ = new Queue<string>();
|
||||||
|
|
||||||
|
@ -105,11 +101,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
m_addrString = addr;
|
m_addrString = addr;
|
||||||
m_port = port;
|
m_port = port;
|
||||||
m_debugWithViewer = debugWithViewer;
|
m_debugWithViewer = debugWithViewer;
|
||||||
//m_statsTimer.Elapsed += new System.Timers.ElapsedEventHandler(StatsTimerElapsed);
|
|
||||||
m_sysConfig = sysConfig;
|
m_sysConfig = sysConfig;
|
||||||
|
|
||||||
SceneToPhysEngineSyncServer.logEnabled = m_sysConfig.GetBoolean("LogEnabled", false);
|
SceneToPhysEngineSyncServer.logEnabled = m_sysConfig.GetBoolean("PhysLogEnabled", false);
|
||||||
SceneToPhysEngineSyncServer.logDir = m_sysConfig.GetString("LogDir", ".");
|
SceneToPhysEngineSyncServer.logDir = m_sysConfig.GetString("PhysLogDir", ".");
|
||||||
|
|
||||||
//assume we are connecting to the whole scene as one big quark
|
//assume we are connecting to the whole scene as one big quark
|
||||||
m_subscribedQuarks = new QuarkSubsriptionInfo(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize);
|
m_subscribedQuarks = new QuarkSubsriptionInfo(0, 0, (int)Constants.RegionSize, (int)Constants.RegionSize);
|
||||||
|
@ -534,5 +529,29 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
|
|
||||||
#endregion Handlers for events/updates from Scene
|
#endregion Handlers for events/updates from Scene
|
||||||
|
|
||||||
|
public string StatisticIdentifier()
|
||||||
|
{
|
||||||
|
return "PhysEngineToSceneConnector";
|
||||||
|
}
|
||||||
|
|
||||||
|
public string StatisticLine(bool clearFlag)
|
||||||
|
{
|
||||||
|
string ret = "";
|
||||||
|
/*
|
||||||
|
lock (stats)
|
||||||
|
{
|
||||||
|
ret = String.Format("{0},{1},{2},{3},{4},{5}",
|
||||||
|
msgsIn, msgsOut, bytesIn, bytesOut
|
||||||
|
);
|
||||||
|
if (clearFlag)
|
||||||
|
msgsIn = msgsOut = bytesIn = bytesOut = 0;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
public string StatisticTitle()
|
||||||
|
{
|
||||||
|
return "msgsIn,msgsOut,bytesIn,bytesOut";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
// The SceneToPhysEngineConnector acts as a thread on the RegionSyncServer to handle incoming
|
// The SceneToPhysEngineConnector acts as a thread on the RegionSyncServer to handle incoming
|
||||||
// messages from PhysEngineToSceneConnectors that run on Physics Engines. It connects the
|
// messages from PhysEngineToSceneConnectors that run on Physics Engines. It connects the
|
||||||
// authoratative Scene with remote script engines.
|
// authoratative Scene with remote script engines.
|
||||||
public class SceneToPhysEngineConnector
|
public class SceneToPhysEngineConnector : ISyncStatistics
|
||||||
{
|
{
|
||||||
#region SceneToPhysEngineConnector members
|
#region SceneToPhysEngineConnector members
|
||||||
|
|
||||||
|
@ -38,9 +38,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
private long bytesIn;
|
private long bytesIn;
|
||||||
private long bytesOut;
|
private long bytesOut;
|
||||||
private long pollBlocks;
|
private long pollBlocks;
|
||||||
private int lastTotalCount;
|
|
||||||
private int lastLocalCount;
|
|
||||||
private int lastRemoteCount;
|
|
||||||
|
|
||||||
private int msgCount = 0;
|
private int msgCount = 0;
|
||||||
|
|
||||||
|
@ -49,7 +46,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
// Set the addr and port for TcpListener
|
// Set the addr and port for TcpListener
|
||||||
private IPAddress m_addr;
|
private IPAddress m_addr;
|
||||||
private Int32 m_port;
|
private Int32 m_port;
|
||||||
private int m_connection_number;
|
private static int m_connection_number = 0;
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
|
||||||
object m_syncRoot = new object();
|
object m_syncRoot = new object();
|
||||||
|
@ -93,32 +90,33 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
get { return m_connection_number; }
|
get { return m_connection_number; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetStats()
|
public string StatisticIdentifier()
|
||||||
{
|
{
|
||||||
string ret;
|
return "SceneToPhysEngineConnector" + ConnectionNum.ToString();
|
||||||
//lock (m_syncRoot)
|
}
|
||||||
// syncedAvCount = m_syncedAvatars.Count;
|
|
||||||
|
public string StatisticLine(bool clearFlag)
|
||||||
|
{
|
||||||
|
string ret = "";
|
||||||
lock (stats)
|
lock (stats)
|
||||||
{
|
{
|
||||||
double secondsSinceLastStats = DateTime.Now.Subtract(lastStatTime).TotalSeconds;
|
double secondsSinceLastStats = DateTime.Now.Subtract(lastStatTime).TotalSeconds;
|
||||||
lastStatTime = DateTime.Now;
|
lastStatTime = DateTime.Now;
|
||||||
|
|
||||||
// ret = String.Format("[{0,4}/{1,4}], [{2,4}/{3,4}], [{4,4}/{5,4}], [{6,4} ({7,4})], [{8,8} ({9,8:00.00})], [{10,4} ({11,4})], [{12,8} ({13,8:00.00})], [{14,8} ({15,4}]",
|
ret = String.Format("{0},{1},{2},{3},{4}",
|
||||||
ret = String.Format("[{0,4}/{1,4}], [{2,6}/{3,6}], [{4,4}/{5,4}], [{6,6} ({7,6})], [{8,4} ({9,4})]",
|
msgsIn, msgsOut, bytesIn, bytesOut, pollBlocks
|
||||||
//lastTotalCount, totalAvCount, // TOTAL AVATARS
|
);
|
||||||
//lastLocalCount, syncedAvCount, // LOCAL TO THIS CLIENT VIEW
|
if (clearFlag)
|
||||||
//lastRemoteCount, totalAvCount - syncedAvCount, // REMOTE (SHOULD = TOTAL - LOCAL)
|
|
||||||
msgsIn, (int)(msgsIn / secondsSinceLastStats),
|
|
||||||
bytesIn, 8 * (bytesIn / secondsSinceLastStats / 1000000), // IN
|
|
||||||
msgsOut, (int)(msgsOut / secondsSinceLastStats),
|
|
||||||
bytesOut, 8 * (bytesOut / secondsSinceLastStats / 1000000), // OUT
|
|
||||||
pollBlocks, (int)(pollBlocks / secondsSinceLastStats)); // NUMBER OF TIMES WE BLOCKED WRITING TO SOCKET
|
|
||||||
|
|
||||||
msgsIn = msgsOut = bytesIn = bytesOut = pollBlocks = 0;
|
msgsIn = msgsOut = bytesIn = bytesOut = pollBlocks = 0;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string StatisticTitle()
|
||||||
|
{
|
||||||
|
return "msgsIn,msgsOut,bytesIn,bytesOut,pollBlocks";
|
||||||
|
}
|
||||||
|
|
||||||
// Check if the client is connected
|
// Check if the client is connected
|
||||||
public bool Connected
|
public bool Connected
|
||||||
{ get { return m_tcpclient.Connected; } }
|
{ get { return m_tcpclient.Connected; } }
|
||||||
|
@ -163,6 +161,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
//m_log.WarnFormat("{0} Started thread: {1}", LogHeader, m_receive_loop.Name);
|
//m_log.WarnFormat("{0} Started thread: {1}", LogHeader, m_receive_loop.Name);
|
||||||
m_receive_loop.Start();
|
m_receive_loop.Start();
|
||||||
|
|
||||||
|
SyncStatisticCollector.Register(this);
|
||||||
|
|
||||||
//tell the remote script engine about the locX, locY of this authoritative scene
|
//tell the remote script engine about the locX, locY of this authoritative scene
|
||||||
// SendSceneLoc();
|
// SendSceneLoc();
|
||||||
m_log.DebugFormat("{0}: SceneToPhysEngineConnector initialized", LogHeader);
|
m_log.DebugFormat("{0}: SceneToPhysEngineConnector initialized", LogHeader);
|
||||||
|
|
|
@ -174,7 +174,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
m_log.Warn(LogHeader + " Synchronized");
|
m_log.Warn(LogHeader + " Synchronized");
|
||||||
foreach (SceneToPhysEngineConnector pec in m_physEngineConnectors)
|
foreach (SceneToPhysEngineConnector pec in m_physEngineConnectors)
|
||||||
{
|
{
|
||||||
m_log.Warn(pec.GetStats());
|
m_log.Warn(pec.StatisticLine(true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
m_log.Warn("[REGION SYNC MODULE] Initialised for actor "+ m_actorID);
|
m_log.Warn("[REGION SYNC MODULE] Initialised for actor "+ m_actorID);
|
||||||
|
|
||||||
//The ActorType configuration will be read in and process by an ActorSyncModule, not here.
|
//The ActorType configuration will be read in and process by an ActorSyncModule, not here.
|
||||||
|
|
||||||
|
// parameters for statistic logging
|
||||||
|
SyncStatisticCollector.LogEnabled = m_sysConfig.GetBoolean("SyncLogEnabled", false);
|
||||||
|
SyncStatisticCollector.LogDirectory = m_sysConfig.GetString("SyncLogDirectory", ".");
|
||||||
|
SyncStatisticCollector.LogInterval = m_sysConfig.GetInt("SyncLogInterval", 5000);
|
||||||
|
SyncStatisticCollector.LogMaxFileTimeMin = m_sysConfig.GetInt("SyncLogMaxFileTimeMin", 5);
|
||||||
|
SyncStatisticCollector.LogFileHeader = m_sysConfig.GetString("SyncLogFileHeader", "stats-");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Called after Initialise()
|
//Called after Initialise()
|
||||||
|
@ -1163,10 +1170,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
|
|
||||||
private void SyncStatus(Object[] args)
|
private void SyncStatus(Object[] args)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[REGION SYNC MODULE]: Description: {0}", SyncConnector.StatusTitle());
|
int connectorCount = 0;
|
||||||
ForEachSyncConnector(delegate(SyncConnector connector)
|
ForEachSyncConnector(delegate(SyncConnector connector)
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("{0}: {1}: {2}", "[REGION SYNC MODULE}", connector.Description, connector.StatusLine());
|
if (connectorCount++ == 0)
|
||||||
|
m_log.WarnFormat("[REGION SYNC MODULE]: Description: {0}", connector.StatisticTitle());
|
||||||
|
m_log.WarnFormat("{0}: {1}: {2}", "[REGION SYNC MODULE}", connector.Description, connector.StatisticLine(true));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ using OpenMetaverse;
|
||||||
namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
{
|
{
|
||||||
// For implementations, a lot was copied from RegionSyncClientView, especially the SendLoop/ReceiveLoop.
|
// For implementations, a lot was copied from RegionSyncClientView, especially the SendLoop/ReceiveLoop.
|
||||||
public class SyncConnector
|
public class SyncConnector : ISyncStatistics
|
||||||
{
|
{
|
||||||
private TcpClient m_tcpConnection = null;
|
private TcpClient m_tcpConnection = null;
|
||||||
private RegionSyncListenerInfo m_remoteListenerInfo = null;
|
private RegionSyncListenerInfo m_remoteListenerInfo = null;
|
||||||
|
@ -39,7 +39,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
|
|
||||||
private RegionSyncModule m_regionSyncModule = null;
|
private RegionSyncModule m_regionSyncModule = null;
|
||||||
|
|
||||||
private int m_connectorNum;
|
// unique connector number across all regions
|
||||||
|
private static int m_connectorNum = 0;
|
||||||
public int ConnectorNum
|
public int ConnectorNum
|
||||||
{
|
{
|
||||||
get { return m_connectorNum; }
|
get { return m_connectorNum; }
|
||||||
|
@ -69,8 +70,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (m_syncOtherSideRegionName == null)
|
if (m_syncOtherSideRegionName == null)
|
||||||
return String.Format("SyncConnector#{0}", m_connectorNum);
|
return String.Format("SyncConnector{0}", m_connectorNum);
|
||||||
return String.Format("SyncConnector#{0}(A={2},R={1:10})",
|
return String.Format("SyncConnector{0}({2}/{1:10})",
|
||||||
m_connectorNum, m_syncOtherSideRegionName, m_syncOtherSideActorID);
|
m_connectorNum, m_syncOtherSideRegionName, m_syncOtherSideActorID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,6 +87,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
m_connectorNum = connectorNum;
|
m_connectorNum = connectorNum;
|
||||||
m_regionSyncModule = syncModule;
|
m_regionSyncModule = syncModule;
|
||||||
lastStatTime = DateTime.Now;
|
lastStatTime = DateTime.Now;
|
||||||
|
SyncStatisticCollector.Register(this);
|
||||||
m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,6 +102,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
m_connectorNum = connectorNum;
|
m_connectorNum = connectorNum;
|
||||||
m_regionSyncModule = syncModule;
|
m_regionSyncModule = syncModule;
|
||||||
lastStatTime = DateTime.Now;
|
lastStatTime = DateTime.Now;
|
||||||
|
SyncStatisticCollector.Register(this);
|
||||||
m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
m_log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,7 +302,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
m_regionSyncModule.HandleIncomingMessage(msg, m_syncOtherSideActorID);
|
m_regionSyncModule.HandleIncomingMessage(msg, m_syncOtherSideActorID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public string StatusLine()
|
public string StatisticIdentifier()
|
||||||
|
{
|
||||||
|
return this.Description;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string StatisticLine(bool clearFlag)
|
||||||
{
|
{
|
||||||
string statLine = "";
|
string statLine = "";
|
||||||
lock (stats)
|
lock (stats)
|
||||||
|
@ -310,14 +318,15 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
msgsIn, msgsOut, bytesIn, bytesOut, m_outQ.Count,
|
msgsIn, msgsOut, bytesIn, bytesOut, m_outQ.Count,
|
||||||
8 * (bytesIn / secondsSinceLastStats / 1000000),
|
8 * (bytesIn / secondsSinceLastStats / 1000000),
|
||||||
8 * (bytesOut / secondsSinceLastStats / 1000000) );
|
8 * (bytesOut / secondsSinceLastStats / 1000000) );
|
||||||
|
if (clearFlag)
|
||||||
msgsIn = msgsOut = bytesIn = bytesOut = 0;
|
msgsIn = msgsOut = bytesIn = bytesOut = 0;
|
||||||
}
|
}
|
||||||
return statLine;
|
return statLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string StatusTitle()
|
public string StatisticTitle()
|
||||||
{
|
{
|
||||||
return "msgsIn,msgsOut,queueSize,Mbps In,Mbps Out";
|
return "msgsIn,msgsOut,bytesIn,bytesOut,queueSize,Mbps In,Mbps Out";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue