* Implemented some tweaks to monitoring module.
* Output is prettier & more useful. * Added 'Alerts' to allow rules to be constructed using Monitors to detect for events such as deadlocks. This will be translated to SNMP Traps when I get SNMP implemented.0.6.8-post-fixes
parent
711dde34e4
commit
838bc80ab9
|
@ -0,0 +1,37 @@
|
|||
using OpenSim.Region.CoreModules.Framework.Monitoring.Monitors;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Framework.Monitoring.Alerts
|
||||
{
|
||||
class DeadlockAlert : IAlert
|
||||
{
|
||||
private LastFrameTimeMonitor m_monitor;
|
||||
|
||||
public DeadlockAlert(LastFrameTimeMonitor m_monitor)
|
||||
{
|
||||
this.m_monitor = m_monitor;
|
||||
}
|
||||
|
||||
#region Implementation of IAlert
|
||||
|
||||
public string GetName()
|
||||
{
|
||||
return "Potential Deadlock Alert";
|
||||
}
|
||||
|
||||
public void Test()
|
||||
{
|
||||
if (m_monitor.GetValue() > 60 * 1000)
|
||||
{
|
||||
if(OnTriggerAlert != null)
|
||||
{
|
||||
OnTriggerAlert(typeof (DeadlockAlert),
|
||||
(int) (m_monitor.GetValue()/1000) + " second(s) since last frame processed.", true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public event Alert OnTriggerAlert;
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -2,6 +2,7 @@
|
|||
using System.Reflection;
|
||||
using log4net;
|
||||
using Nini.Config;
|
||||
using OpenSim.Region.CoreModules.Framework.Monitoring.Alerts;
|
||||
using OpenSim.Region.CoreModules.Framework.Monitoring.Monitors;
|
||||
using OpenSim.Region.Framework.Interfaces;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
@ -12,13 +13,22 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
|||
{
|
||||
private Scene m_scene;
|
||||
private readonly List<IMonitor> m_monitors = new List<IMonitor>();
|
||||
private readonly List<IAlert> m_alerts = new List<IAlert>();
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
public void DebugMonitors(string module, string[] args)
|
||||
{
|
||||
foreach (IMonitor monitor in m_monitors)
|
||||
{
|
||||
m_log.Info("[MonitorModule] " + m_scene.RegionInfo.RegionName + " reports " + monitor.GetName() + " = " + monitor.GetValue());
|
||||
m_log.Info("[MonitorModule] " + m_scene.RegionInfo.RegionName + " reports " + monitor.GetName() + " = " + monitor.GetFriendlyValue());
|
||||
}
|
||||
}
|
||||
|
||||
public void TestAlerts()
|
||||
{
|
||||
foreach (IAlert alert in m_alerts)
|
||||
{
|
||||
alert.Test();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -48,6 +58,19 @@ namespace OpenSim.Region.CoreModules.Framework.Monitoring
|
|||
m_monitors.Add(new TotalFrameMonitor(m_scene));
|
||||
m_monitors.Add(new EventFrameMonitor(m_scene));
|
||||
m_monitors.Add(new LandFrameMonitor(m_scene));
|
||||
m_monitors.Add(new LastFrameTimeMonitor(m_scene));
|
||||
|
||||
m_alerts.Add(new DeadlockAlert(m_monitors.Find(x => x is LastFrameTimeMonitor) as LastFrameTimeMonitor));
|
||||
|
||||
foreach (IAlert alert in m_alerts)
|
||||
{
|
||||
alert.OnTriggerAlert += OnTriggerAlert;
|
||||
}
|
||||
}
|
||||
|
||||
void OnTriggerAlert(System.Type reporter, string reason, bool fatal)
|
||||
{
|
||||
m_log.Error("[Monitor] " + reporter.Name + " for " + m_scene.RegionInfo.RegionName + " reports " + reason + " (Fatal: " + fatal + ")");
|
||||
}
|
||||
|
||||
public void Close()
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
using System;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
|
||||
namespace OpenSim.Region.CoreModules.Framework.Monitoring.Monitors
|
||||
{
|
||||
class LastFrameTimeMonitor : IMonitor
|
||||
{
|
||||
private readonly Scene m_scene;
|
||||
|
||||
public LastFrameTimeMonitor(Scene scene)
|
||||
{
|
||||
m_scene = scene;
|
||||
}
|
||||
|
||||
#region Implementation of IMonitor
|
||||
|
||||
public double GetValue()
|
||||
{
|
||||
return Environment.TickCount - m_scene.MonitorLastFrameTick;
|
||||
}
|
||||
|
||||
public string GetName()
|
||||
{
|
||||
return "Last Completed Frame At";
|
||||
}
|
||||
|
||||
public string GetFriendlyValue()
|
||||
{
|
||||
return (int)GetValue() + "ms ago";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
|
@ -279,6 +279,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
private int backupMS;
|
||||
private int terrainMS;
|
||||
private int landMS;
|
||||
private int lastCompletedFrame;
|
||||
|
||||
public int MonitorFrameTime { get { return frameMS; } }
|
||||
public int MonitorPhysicsUpdateTime { get { return physicsMS; } }
|
||||
|
@ -289,6 +290,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public int MonitorBackupTime { get { return backupMS; } }
|
||||
public int MonitorTerrainTime { get { return terrainMS; } }
|
||||
public int MonitorLandTime { get { return landMS; } }
|
||||
public int MonitorLastFrameTick { get { return lastCompletedFrame; } }
|
||||
|
||||
private bool m_physics_enabled = true;
|
||||
private bool m_scripts_enabled = true;
|
||||
|
@ -1129,6 +1131,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
otherMS = tickCount - otherMS;
|
||||
tmpFrameMS -= tickCount;
|
||||
frameMS = tmpFrameMS;
|
||||
lastCompletedFrame = tickCount;
|
||||
|
||||
// if (m_frame%m_update_avatars == 0)
|
||||
// UpdateInWorldTime();
|
||||
|
|
Loading…
Reference in New Issue