public void OnMakeRootAgent(ScenePresence agent) { UUID regionUUID = GetRegionUUIDFromHandle(agent.RegionHandle); lock (m_sessions) { if (!m_sessions.ContainsKey(agent.UUID)) { UserSessionData usd = UserSessionUtil.newUserSessionData(); UserSessionID uid = new UserSessionID(); uid.name_f = agent.Firstname; uid.name_l = agent.Lastname; uid.region_id = regionUUID; uid.session_id = agent.ControllingClient.SessionId; uid.session_data = usd; m_sessions.Add(agent.UUID, uid); } else { UserSessionID uid = m_sessions[agent.UUID]; uid.region_id = regionUUID; uid.session_id = agent.ControllingClient.SessionId; m_sessions[agent.UUID] = uid; } } }
public UserSessionID ParseViewerStats(string request, UUID agentID) { UserSessionID uid = new UserSessionID(); UserSessionData usd; OSD message = OSDParser.DeserializeLLSDXml(request); OSDMap mmap; lock (m_sessions) { if (agentID != UUID.Zero) { if (!m_sessions.ContainsKey(agentID)) { m_log.Warn("[VS]: no session for stat disclosure"); return new UserSessionID(); } uid = m_sessions[agentID]; } else { // parse through the beginning to locate the session if (message.Type != OSDType.Map) return new UserSessionID(); mmap = (OSDMap)message; { UUID sessionID = mmap["session_id"].AsUUID(); if (sessionID == UUID.Zero) return new UserSessionID(); // 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 UserSessionID(); } } } } usd = uid.session_data; if (message.Type != OSDType.Map) return new UserSessionID(); mmap = (OSDMap)message; { if (mmap["agent"].Type != OSDType.Map) return new UserSessionID(); 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 UserSessionID(); 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(); usd.session_id = mmap["session_id"].AsUUID(); if (mmap["system"].Type != OSDType.Map) return new UserSessionID(); 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 UserSessionID(); OSDMap stats_map = (OSDMap)mmap["stats"]; { if (stats_map["failures"].Type != OSDType.Map) return new UserSessionID(); 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 UserSessionID(); OSDMap stats_net = (OSDMap)stats_map["net"]; { if (stats_net["in"].Type != OSDType.Map) return new UserSessionID(); 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 UserSessionID(); 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; return uid; }
/// <summary> /// Add/Update a user's stats in the database /// </summary> /// <param name="uid"></param> public void UpdateUserStats(UserSessionID uid) { if (uid.session_id == UUID.Zero) { return; } List <string> Keys = new List <string>(); List <object> Values = new List <object>(); Keys.Add("session_id"); Keys.Add("agent_id"); Keys.Add("region_id"); Keys.Add("last_updated"); Keys.Add("remote_ip"); Keys.Add("name_f"); Keys.Add("name_l"); Keys.Add("avg_agents_in_view"); Keys.Add("min_agents_in_view"); Keys.Add("max_agents_in_view"); Keys.Add("mode_agents_in_view"); Keys.Add("avg_fps"); Keys.Add("min_fps"); Keys.Add("max_fps"); Keys.Add("mode_fps"); Keys.Add("a_language"); Keys.Add("mem_use"); Keys.Add("meters_traveled"); Keys.Add("avg_ping"); Keys.Add("min_ping"); Keys.Add("max_ping"); Keys.Add("mode_ping"); Keys.Add("regions_visited"); Keys.Add("run_time"); Keys.Add("avg_sim_fps"); Keys.Add("min_sim_fps"); Keys.Add("max_sim_fps"); Keys.Add("mode_sim_fps"); Keys.Add("start_time"); Keys.Add("client_version"); Keys.Add("s_cpu"); Keys.Add("s_gpu"); Keys.Add("s_os"); Keys.Add("s_ram"); Keys.Add("d_object_kb"); Keys.Add("d_texture_kb"); Keys.Add("n_in_kb"); Keys.Add("n_in_pk"); Keys.Add("n_out_kb"); Keys.Add("n_out_pk"); Keys.Add("f_dropped"); Keys.Add("f_failed_resends"); Keys.Add("f_invalid"); Keys.Add("f_off_circuit"); Keys.Add("f_resent"); Keys.Add("f_send_packet"); Values.Add(uid.session_data.session_id); Values.Add(uid.session_data.agent_id); Values.Add(uid.session_data.region_id); Values.Add(uid.session_data.last_updated); Values.Add(uid.session_data.remote_ip); Values.Add(uid.session_data.name_f); Values.Add(uid.session_data.name_l); Values.Add(uid.session_data.avg_agents_in_view); Values.Add(uid.session_data.min_agents_in_view); Values.Add(uid.session_data.max_agents_in_view); Values.Add(uid.session_data.mode_agents_in_view); Values.Add(uid.session_data.avg_fps); Values.Add(uid.session_data.min_fps); Values.Add(uid.session_data.max_fps); Values.Add(uid.session_data.mode_fps); Values.Add(uid.session_data.a_language); Values.Add(uid.session_data.mem_use); Values.Add(uid.session_data.meters_traveled); Values.Add(uid.session_data.avg_ping); Values.Add(uid.session_data.min_ping); Values.Add(uid.session_data.max_ping); Values.Add(uid.session_data.mode_ping); Values.Add(uid.session_data.regions_visited); Values.Add(uid.session_data.run_time); Values.Add(uid.session_data.avg_sim_fps); Values.Add(uid.session_data.min_sim_fps); Values.Add(uid.session_data.max_sim_fps); Values.Add(uid.session_data.mode_sim_fps); Values.Add(uid.session_data.start_time); Values.Add(uid.session_data.client_version); Values.Add(uid.session_data.s_cpu); Values.Add(uid.session_data.s_gpu); Values.Add(uid.session_data.s_os); Values.Add(uid.session_data.s_ram); Values.Add(uid.session_data.d_object_kb); Values.Add(uid.session_data.d_texture_kb); Values.Add(uid.session_data.n_in_kb); Values.Add(uid.session_data.n_in_pk); Values.Add(uid.session_data.n_out_kb); Values.Add(uid.session_data.n_out_pk); Values.Add(uid.session_data.f_dropped); Values.Add(uid.session_data.f_failed_resends); Values.Add(uid.session_data.f_invalid); Values.Add(uid.session_data.f_off_circuit); Values.Add(uid.session_data.f_resent); Values.Add(uid.session_data.f_send_packet); GD.Replace("stats_session_data", Keys.ToArray(), Values.ToArray()); }