private void OnMakeRootAgent(ScenePresence agent) { // m_log.DebugFormat( // "[WEB STATS MODULE]: Looking for session {0} for {1} in {2}", // agent.ControllingClient.SessionId, agent.Name, agent.Scene.Name); lock (m_sessions) { UserSession uid; if (!m_sessions.ContainsKey(agent.UUID)) { UserSessionData usd = UserSessionUtil.newUserSessionData(); uid = new UserSession(); uid.name_f = agent.Firstname; uid.name_l = agent.Lastname; uid.session_data = usd; m_sessions.Add(agent.UUID, uid); } else { uid = m_sessions[agent.UUID]; } uid.region_id = agent.Scene.RegionInfo.RegionID; uid.session_id = agent.ControllingClient.SessionId; } }
private void UpdateUserStats(UserSession uid, SqliteConnection db) { // m_log.DebugFormat( // "[WEB STATS MODULE]: Updating user stats for {0} {1}, session {2}", uid.name_f, uid.name_l, uid.session_id); if (uid.session_id == UUID.Zero) return; lock (db) { using (SqliteCommand updatecmd = new SqliteCommand(SQL_STATS_TABLE_INSERT, db)) { updatecmd.Parameters.Add(new SqliteParameter(":session_id", uid.session_data.session_id.ToString())); updatecmd.Parameters.Add(new SqliteParameter(":agent_id", uid.session_data.agent_id.ToString())); updatecmd.Parameters.Add(new SqliteParameter(":region_id", uid.session_data.region_id.ToString())); updatecmd.Parameters.Add(new SqliteParameter(":last_updated", (int) uid.session_data.last_updated)); updatecmd.Parameters.Add(new SqliteParameter(":remote_ip", uid.session_data.remote_ip)); updatecmd.Parameters.Add(new SqliteParameter(":name_f", uid.session_data.name_f)); updatecmd.Parameters.Add(new SqliteParameter(":name_l", uid.session_data.name_l)); updatecmd.Parameters.Add(new SqliteParameter(":avg_agents_in_view", uid.session_data.avg_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":min_agents_in_view", (int) uid.session_data.min_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":max_agents_in_view", (int) uid.session_data.max_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":mode_agents_in_view", (int) uid.session_data.mode_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":avg_fps", uid.session_data.avg_fps)); updatecmd.Parameters.Add(new SqliteParameter(":min_fps", uid.session_data.min_fps)); updatecmd.Parameters.Add(new SqliteParameter(":max_fps", uid.session_data.max_fps)); updatecmd.Parameters.Add(new SqliteParameter(":mode_fps", uid.session_data.mode_fps)); updatecmd.Parameters.Add(new SqliteParameter(":a_language", uid.session_data.a_language)); updatecmd.Parameters.Add(new SqliteParameter(":mem_use", uid.session_data.mem_use)); updatecmd.Parameters.Add(new SqliteParameter(":meters_traveled", uid.session_data.meters_traveled)); updatecmd.Parameters.Add(new SqliteParameter(":avg_ping", uid.session_data.avg_ping)); updatecmd.Parameters.Add(new SqliteParameter(":min_ping", uid.session_data.min_ping)); updatecmd.Parameters.Add(new SqliteParameter(":max_ping", uid.session_data.max_ping)); updatecmd.Parameters.Add(new SqliteParameter(":mode_ping", uid.session_data.mode_ping)); updatecmd.Parameters.Add(new SqliteParameter(":regions_visited", uid.session_data.regions_visited)); updatecmd.Parameters.Add(new SqliteParameter(":run_time", uid.session_data.run_time)); updatecmd.Parameters.Add(new SqliteParameter(":avg_sim_fps", uid.session_data.avg_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":min_sim_fps", uid.session_data.min_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":max_sim_fps", uid.session_data.max_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":mode_sim_fps", uid.session_data.mode_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":start_time", uid.session_data.start_time)); updatecmd.Parameters.Add(new SqliteParameter(":client_version", uid.session_data.client_version)); updatecmd.Parameters.Add(new SqliteParameter(":s_cpu", uid.session_data.s_cpu)); updatecmd.Parameters.Add(new SqliteParameter(":s_gpu", uid.session_data.s_gpu)); updatecmd.Parameters.Add(new SqliteParameter(":s_os", uid.session_data.s_os)); updatecmd.Parameters.Add(new SqliteParameter(":s_ram", uid.session_data.s_ram)); updatecmd.Parameters.Add(new SqliteParameter(":d_object_kb", uid.session_data.d_object_kb)); updatecmd.Parameters.Add(new SqliteParameter(":d_texture_kb", uid.session_data.d_texture_kb)); updatecmd.Parameters.Add(new SqliteParameter(":d_world_kb", uid.session_data.d_world_kb)); updatecmd.Parameters.Add(new SqliteParameter(":n_in_kb", uid.session_data.n_in_kb)); updatecmd.Parameters.Add(new SqliteParameter(":n_in_pk", uid.session_data.n_in_pk)); updatecmd.Parameters.Add(new SqliteParameter(":n_out_kb", uid.session_data.n_out_kb)); updatecmd.Parameters.Add(new SqliteParameter(":n_out_pk", uid.session_data.n_out_pk)); updatecmd.Parameters.Add(new SqliteParameter(":f_dropped", uid.session_data.f_dropped)); updatecmd.Parameters.Add(new SqliteParameter(":f_failed_resends", uid.session_data.f_failed_resends)); updatecmd.Parameters.Add(new SqliteParameter(":f_invalid", uid.session_data.f_invalid)); updatecmd.Parameters.Add(new SqliteParameter(":f_off_circuit", uid.session_data.f_off_circuit)); updatecmd.Parameters.Add(new SqliteParameter(":f_resent", uid.session_data.f_resent)); updatecmd.Parameters.Add(new SqliteParameter(":f_send_packet", uid.session_data.f_send_packet)); // StringBuilder parameters = new StringBuilder(); // SqliteParameterCollection spc = updatecmd.Parameters; // foreach (SqliteParameter sp in spc) // parameters.AppendFormat("{0}={1},", sp.ParameterName, sp.Value); // // m_log.DebugFormat("[WEB STATS MODULE]: Parameters {0}", parameters); // m_log.DebugFormat("[WEB STATS MODULE]: Database stats update for {0}", uid.session_data.agent_id); updatecmd.ExecuteNonQuery(); } } }
private void UpdateUserStats(UserSession uid, SqliteConnection db) { // m_log.DebugFormat( // "[WEB STATS MODULE]: Updating user stats for {0} {1}, session {2}", uid.name_f, uid.name_l, uid.session_id); if (uid.session_id == UUID.Zero) { return; } lock (db) { using (SqliteCommand updatecmd = new SqliteCommand(SQL_STATS_TABLE_INSERT, db)) { updatecmd.Parameters.Add(new SqliteParameter(":session_id", uid.session_data.session_id.ToString())); updatecmd.Parameters.Add(new SqliteParameter(":agent_id", uid.session_data.agent_id.ToString())); updatecmd.Parameters.Add(new SqliteParameter(":region_id", uid.session_data.region_id.ToString())); updatecmd.Parameters.Add(new SqliteParameter(":last_updated", (int)uid.session_data.last_updated)); updatecmd.Parameters.Add(new SqliteParameter(":remote_ip", uid.session_data.remote_ip)); updatecmd.Parameters.Add(new SqliteParameter(":name_f", uid.session_data.name_f)); updatecmd.Parameters.Add(new SqliteParameter(":name_l", uid.session_data.name_l)); updatecmd.Parameters.Add(new SqliteParameter(":avg_agents_in_view", uid.session_data.avg_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":min_agents_in_view", (int)uid.session_data.min_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":max_agents_in_view", (int)uid.session_data.max_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":mode_agents_in_view", (int)uid.session_data.mode_agents_in_view)); updatecmd.Parameters.Add(new SqliteParameter(":avg_fps", uid.session_data.avg_fps)); updatecmd.Parameters.Add(new SqliteParameter(":min_fps", uid.session_data.min_fps)); updatecmd.Parameters.Add(new SqliteParameter(":max_fps", uid.session_data.max_fps)); updatecmd.Parameters.Add(new SqliteParameter(":mode_fps", uid.session_data.mode_fps)); updatecmd.Parameters.Add(new SqliteParameter(":a_language", uid.session_data.a_language)); updatecmd.Parameters.Add(new SqliteParameter(":mem_use", uid.session_data.mem_use)); updatecmd.Parameters.Add(new SqliteParameter(":meters_traveled", uid.session_data.meters_traveled)); updatecmd.Parameters.Add(new SqliteParameter(":avg_ping", uid.session_data.avg_ping)); updatecmd.Parameters.Add(new SqliteParameter(":min_ping", uid.session_data.min_ping)); updatecmd.Parameters.Add(new SqliteParameter(":max_ping", uid.session_data.max_ping)); updatecmd.Parameters.Add(new SqliteParameter(":mode_ping", uid.session_data.mode_ping)); updatecmd.Parameters.Add(new SqliteParameter(":regions_visited", uid.session_data.regions_visited)); updatecmd.Parameters.Add(new SqliteParameter(":run_time", uid.session_data.run_time)); updatecmd.Parameters.Add(new SqliteParameter(":avg_sim_fps", uid.session_data.avg_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":min_sim_fps", uid.session_data.min_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":max_sim_fps", uid.session_data.max_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":mode_sim_fps", uid.session_data.mode_sim_fps)); updatecmd.Parameters.Add(new SqliteParameter(":start_time", uid.session_data.start_time)); updatecmd.Parameters.Add(new SqliteParameter(":client_version", uid.session_data.client_version)); updatecmd.Parameters.Add(new SqliteParameter(":s_cpu", uid.session_data.s_cpu)); updatecmd.Parameters.Add(new SqliteParameter(":s_gpu", uid.session_data.s_gpu)); updatecmd.Parameters.Add(new SqliteParameter(":s_os", uid.session_data.s_os)); updatecmd.Parameters.Add(new SqliteParameter(":s_ram", uid.session_data.s_ram)); updatecmd.Parameters.Add(new SqliteParameter(":d_object_kb", uid.session_data.d_object_kb)); updatecmd.Parameters.Add(new SqliteParameter(":d_texture_kb", uid.session_data.d_texture_kb)); updatecmd.Parameters.Add(new SqliteParameter(":d_world_kb", uid.session_data.d_world_kb)); updatecmd.Parameters.Add(new SqliteParameter(":n_in_kb", uid.session_data.n_in_kb)); updatecmd.Parameters.Add(new SqliteParameter(":n_in_pk", uid.session_data.n_in_pk)); updatecmd.Parameters.Add(new SqliteParameter(":n_out_kb", uid.session_data.n_out_kb)); updatecmd.Parameters.Add(new SqliteParameter(":n_out_pk", uid.session_data.n_out_pk)); updatecmd.Parameters.Add(new SqliteParameter(":f_dropped", uid.session_data.f_dropped)); updatecmd.Parameters.Add(new SqliteParameter(":f_failed_resends", uid.session_data.f_failed_resends)); updatecmd.Parameters.Add(new SqliteParameter(":f_invalid", uid.session_data.f_invalid)); updatecmd.Parameters.Add(new SqliteParameter(":f_off_circuit", uid.session_data.f_off_circuit)); updatecmd.Parameters.Add(new SqliteParameter(":f_resent", uid.session_data.f_resent)); updatecmd.Parameters.Add(new SqliteParameter(":f_send_packet", uid.session_data.f_send_packet)); // StringBuilder parameters = new StringBuilder(); // SqliteParameterCollection spc = updatecmd.Parameters; // foreach (SqliteParameter sp in spc) // parameters.AppendFormat("{0}={1},", sp.ParameterName, sp.Value); // // m_log.DebugFormat("[WEB STATS MODULE]: Parameters {0}", parameters); // m_log.DebugFormat("[WEB STATS MODULE]: Database stats update for {0}", uid.session_data.agent_id); updatecmd.ExecuteNonQuery(); } } }
private UserSession ParseViewerStats(string request, UUID agentID) { UserSession uid = new UserSession(); UserSessionData usd; OSD message = OSDParser.DeserializeLLSDXml(request); OSDMap mmap; lock (m_sessions) { if (agentID != UUID.Zero) { if (!m_sessions.ContainsKey(agentID)) { m_log.WarnFormat("[WEB STATS MODULE]: no session for stat disclosure for agent {0}", agentID); return new UserSession(); } uid = m_sessions[agentID]; // m_log.DebugFormat("[WEB STATS MODULE]: Got session {0} for {1}", uid.session_id, agentID); } else { // parse through the beginning to locate the session if (message.Type != OSDType.Map) return new UserSession(); mmap = (OSDMap)message; { UUID sessionID = mmap["session_id"].AsUUID(); if (sessionID == UUID.Zero) return new UserSession(); // search through each session looking for the owner foreach (UUID usersessionid in m_sessions.Keys) { // got it! if (m_sessions[usersessionid].session_id == sessionID) { agentID = usersessionid; uid = m_sessions[usersessionid]; break; } } // can't find a session if (agentID == UUID.Zero) { return new UserSession(); } } } } usd = uid.session_data; if (message.Type != OSDType.Map) return new UserSession(); mmap = (OSDMap)message; { if (mmap["agent"].Type != OSDType.Map) return new UserSession(); OSDMap agent_map = (OSDMap)mmap["agent"]; usd.agent_id = agentID; usd.name_f = uid.name_f; usd.name_l = uid.name_l; usd.region_id = uid.region_id; usd.a_language = agent_map["language"].AsString(); usd.mem_use = (float)agent_map["mem_use"].AsReal(); usd.meters_traveled = (float)agent_map["meters_traveled"].AsReal(); usd.regions_visited = agent_map["regions_visited"].AsInteger(); usd.run_time = (float)agent_map["run_time"].AsReal(); usd.start_time = (float)agent_map["start_time"].AsReal(); usd.client_version = agent_map["version"].AsString(); UserSessionUtil.UpdateMultiItems(ref usd, agent_map["agents_in_view"].AsInteger(), (float)agent_map["ping"].AsReal(), (float)agent_map["sim_fps"].AsReal(), (float)agent_map["fps"].AsReal()); if (mmap["downloads"].Type != OSDType.Map) return new UserSession(); OSDMap downloads_map = (OSDMap)mmap["downloads"]; usd.d_object_kb = (float)downloads_map["object_kbytes"].AsReal(); usd.d_texture_kb = (float)downloads_map["texture_kbytes"].AsReal(); usd.d_world_kb = (float)downloads_map["workd_kbytes"].AsReal(); // m_log.DebugFormat("[WEB STATS MODULE]: mmap[\"session_id\"] = [{0}]", mmap["session_id"].AsUUID()); usd.session_id = mmap["session_id"].AsUUID(); if (mmap["system"].Type != OSDType.Map) return new UserSession(); OSDMap system_map = (OSDMap)mmap["system"]; usd.s_cpu = system_map["cpu"].AsString(); usd.s_gpu = system_map["gpu"].AsString(); usd.s_os = system_map["os"].AsString(); usd.s_ram = system_map["ram"].AsInteger(); if (mmap["stats"].Type != OSDType.Map) return new UserSession(); OSDMap stats_map = (OSDMap)mmap["stats"]; { if (stats_map["failures"].Type != OSDType.Map) return new UserSession(); OSDMap stats_failures = (OSDMap)stats_map["failures"]; usd.f_dropped = stats_failures["dropped"].AsInteger(); usd.f_failed_resends = stats_failures["failed_resends"].AsInteger(); usd.f_invalid = stats_failures["invalid"].AsInteger(); usd.f_resent = stats_failures["resent"].AsInteger(); usd.f_send_packet = stats_failures["send_packet"].AsInteger(); if (stats_map["net"].Type != OSDType.Map) return new UserSession(); OSDMap stats_net = (OSDMap)stats_map["net"]; { if (stats_net["in"].Type != OSDType.Map) return new UserSession(); OSDMap net_in = (OSDMap)stats_net["in"]; usd.n_in_kb = (float)net_in["kbytes"].AsReal(); usd.n_in_pk = net_in["packets"].AsInteger(); if (stats_net["out"].Type != OSDType.Map) return new UserSession(); OSDMap net_out = (OSDMap)stats_net["out"]; usd.n_out_kb = (float)net_out["kbytes"].AsReal(); usd.n_out_pk = net_out["packets"].AsInteger(); } } } uid.session_data = usd; m_sessions[agentID] = uid; // m_log.DebugFormat( // "[WEB STATS MODULE]: Parse data for {0} {1}, session {2}", uid.name_f, uid.name_l, uid.session_id); return uid; }
private UserSession ParseViewerStats(string request, UUID agentID) { UserSession uid = new UserSession(); UserSessionData usd; OSD message = OSDParser.DeserializeLLSDXml(request); OSDMap mmap; lock (m_sessions) { if (agentID != UUID.Zero) { if (!m_sessions.ContainsKey(agentID)) { m_log.WarnFormat("[WEB STATS MODULE]: no session for stat disclosure for agent {0}", agentID); return(new UserSession()); } uid = m_sessions[agentID]; // m_log.DebugFormat("[WEB STATS MODULE]: Got session {0} for {1}", uid.session_id, agentID); } else { // parse through the beginning to locate the session if (message.Type != OSDType.Map) { return(new UserSession()); } mmap = (OSDMap)message; { UUID sessionID = mmap["session_id"].AsUUID(); if (sessionID == UUID.Zero) { return(new UserSession()); } // search through each session looking for the owner foreach (UUID usersessionid in m_sessions.Keys) { // got it! if (m_sessions[usersessionid].session_id == sessionID) { agentID = usersessionid; uid = m_sessions[usersessionid]; break; } } // can't find a session if (agentID == UUID.Zero) { return(new UserSession()); } } } } usd = uid.session_data; if (message.Type != OSDType.Map) { return(new UserSession()); } mmap = (OSDMap)message; { if (mmap["agent"].Type != OSDType.Map) { return(new UserSession()); } OSDMap agent_map = (OSDMap)mmap["agent"]; usd.agent_id = agentID; usd.name_f = uid.name_f; usd.name_l = uid.name_l; usd.region_id = uid.region_id; usd.a_language = agent_map["language"].AsString(); usd.mem_use = (float)agent_map["mem_use"].AsReal(); usd.meters_traveled = (float)agent_map["meters_traveled"].AsReal(); usd.regions_visited = agent_map["regions_visited"].AsInteger(); usd.run_time = (float)agent_map["run_time"].AsReal(); usd.start_time = (float)agent_map["start_time"].AsReal(); usd.client_version = agent_map["version"].AsString(); UserSessionUtil.UpdateMultiItems(ref usd, agent_map["agents_in_view"].AsInteger(), (float)agent_map["ping"].AsReal(), (float)agent_map["sim_fps"].AsReal(), (float)agent_map["fps"].AsReal()); if (mmap["downloads"].Type != OSDType.Map) { return(new UserSession()); } OSDMap downloads_map = (OSDMap)mmap["downloads"]; usd.d_object_kb = (float)downloads_map["object_kbytes"].AsReal(); usd.d_texture_kb = (float)downloads_map["texture_kbytes"].AsReal(); usd.d_world_kb = (float)downloads_map["workd_kbytes"].AsReal(); // m_log.DebugFormat("[WEB STATS MODULE]: mmap[\"session_id\"] = [{0}]", mmap["session_id"].AsUUID()); usd.session_id = mmap["session_id"].AsUUID(); if (mmap["system"].Type != OSDType.Map) { return(new UserSession()); } OSDMap system_map = (OSDMap)mmap["system"]; usd.s_cpu = system_map["cpu"].AsString(); usd.s_gpu = system_map["gpu"].AsString(); usd.s_os = system_map["os"].AsString(); usd.s_ram = system_map["ram"].AsInteger(); if (mmap["stats"].Type != OSDType.Map) { return(new UserSession()); } OSDMap stats_map = (OSDMap)mmap["stats"]; { if (stats_map["failures"].Type != OSDType.Map) { return(new UserSession()); } OSDMap stats_failures = (OSDMap)stats_map["failures"]; usd.f_dropped = stats_failures["dropped"].AsInteger(); usd.f_failed_resends = stats_failures["failed_resends"].AsInteger(); usd.f_invalid = stats_failures["invalid"].AsInteger(); usd.f_resent = stats_failures["resent"].AsInteger(); usd.f_send_packet = stats_failures["send_packet"].AsInteger(); if (stats_map["net"].Type != OSDType.Map) { return(new UserSession()); } OSDMap stats_net = (OSDMap)stats_map["net"]; { if (stats_net["in"].Type != OSDType.Map) { return(new UserSession()); } OSDMap net_in = (OSDMap)stats_net["in"]; usd.n_in_kb = (float)net_in["kbytes"].AsReal(); usd.n_in_pk = net_in["packets"].AsInteger(); if (stats_net["out"].Type != OSDType.Map) { return(new UserSession()); } OSDMap net_out = (OSDMap)stats_net["out"]; usd.n_out_kb = (float)net_out["kbytes"].AsReal(); usd.n_out_pk = net_out["packets"].AsInteger(); } } } uid.session_data = usd; m_sessions[agentID] = uid; // m_log.DebugFormat( // "[WEB STATS MODULE]: Parse data for {0} {1}, session {2}", uid.name_f, uid.name_l, uid.session_id); return(uid); }