Add the beginnings of a sim health check (through remote admin)

0.6.0-stable
Melanie Thielker 2008-10-10 01:10:33 +00:00
parent 8178f78095
commit 96689723e5
3 changed files with 75 additions and 0 deletions

View File

@ -97,6 +97,7 @@ namespace OpenSim.ApplicationPlugins.RemoteController
m_httpd.AddXmlRPCHandler("admin_load_xml", XmlRpcLoadXMLMethod);
m_httpd.AddXmlRPCHandler("admin_save_xml", XmlRpcSaveXMLMethod);
m_httpd.AddXmlRPCHandler("admin_load_oar", XmlRpcLoadOARMethod);
m_httpd.AddXmlRPCHandler("admin_region_query", XmlRpcRegionQueryMethod);
}
}
catch (NullReferenceException)
@ -1084,6 +1085,61 @@ namespace OpenSim.ApplicationPlugins.RemoteController
return response;
}
public XmlRpcResponse XmlRpcRegionQueryMethod(XmlRpcRequest request)
{
m_log.Info("[RADMIN]: Received Save XML Administrator Request");
XmlRpcResponse response = new XmlRpcResponse();
Hashtable responseData = new Hashtable();
try
{
responseData["success"] = "true";
Hashtable requestData = (Hashtable)request.Params[0];
// check completeness
if (!requestData.Contains("password"))
throw new Exception(String.Format("missing required parameter"));
if (!String.IsNullOrEmpty(requiredPassword) &&
(string)requestData["password"] != requiredPassword) throw new Exception("wrong password");
if (requestData.Contains("region_uuid"))
{
UUID region_uuid = (UUID)(string)requestData["region_uuid"];
if (!m_app.SceneManager.TrySetCurrentScene(region_uuid))
throw new Exception(String.Format("failed to switch to region {0}", region_uuid.ToString()));
m_log.InfoFormat("[RADMIN] Switched to region {0}", region_uuid.ToString());
}
else if (requestData.Contains("region_name"))
{
string region_name = (string)requestData["region_name"];
if (!m_app.SceneManager.TrySetCurrentScene(region_name))
throw new Exception(String.Format("failed to switch to region {0}", region_name));
m_log.InfoFormat("[RADMIN] Switched to region {0}", region_name);
}
else throw new Exception("neither region_name nor region_uuid given");
Scene s = m_app.SceneManager.CurrentScene;
int health = s.GetHealth();
responseData["health"] = health;
response.Value = responseData;
}
catch (Exception e)
{
m_log.InfoFormat("[RADMIN] RegionQuery: {0}", e.Message);
responseData["success"] = "false";
responseData["error"] = e.Message;
response.Value = responseData;
}
return response;
}
public void Dispose()
{
}

View File

@ -585,6 +585,11 @@ namespace OpenSim.Region.Environment.Modules.World.Estate
args.SimOwner = m_scene.RegionInfo.EstateSettings.EstateOwner;
else
args.SimOwner = m_scene.RegionInfo.MasterAvatarAssignedUUID;
// Fudge estate owner
if (m_scene.ExternalChecks.ExternalChecksCanBeGodLike(remoteClient.AgentId))
args.SimOwner = remoteClient.AgentId;
args.terrainBase0 = UUID.Zero;
args.terrainBase1 = UUID.Zero;
args.terrainBase2 = UUID.Zero;

View File

@ -168,6 +168,7 @@ namespace OpenSim.Region.Environment.Scenes
private bool m_physics_enabled = true;
private bool m_scripts_enabled = true;
private string m_defaultScriptEngine;
private int m_LastLogin = 0;
#endregion
@ -2142,6 +2143,7 @@ namespace OpenSim.Region.Environment.Scenes
CreateAndAddScenePresence(client, child);
}
m_LastLogin = System.Environment.TickCount;
EventManager.TriggerOnNewClient(client);
}
@ -4258,5 +4260,17 @@ namespace OpenSim.Region.Environment.Scenes
{
m_storageManager.DataStore.RemoveObject(uuid, m_regInfo.RegionID);
}
public int GetHealth()
{
int health=1; // Start at 1, means we're up
// A login in the last 4 mins? We can't be doing too badly
//
if ((System.Environment.TickCount - m_LastLogin) < 240000)
health++;
return 0;
}
}
}