Default_Report.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Reflection;
  5. using System.Text;
  6. using Mono.Data.SqliteClient;
  7. using OpenMetaverse;
  8. using OpenSim.Region.Environment.Scenes;
  9. using OpenSim.Framework.Statistics;
  10. namespace OpenSim.Region.UserStatistics
  11. {
  12. public class Default_Report : IStatsController
  13. {
  14. public Default_Report()
  15. {
  16. }
  17. #region IStatsController Members
  18. public Hashtable ProcessModel(Hashtable pParams)
  19. {
  20. SqliteConnection conn = (SqliteConnection)pParams["DatabaseConnection"];
  21. List<Scene> m_scene = (List<Scene>)pParams["Scenes"];
  22. stats_default_page_values mData = rep_DefaultReport_data(conn, m_scene);
  23. mData.sim_stat_data = (Dictionary<UUID,USimStatsData>)pParams["SimStats"];
  24. Hashtable nh = new Hashtable();
  25. nh.Add("hdata", mData);
  26. return nh;
  27. }
  28. public string RenderView(Hashtable pModelResult)
  29. {
  30. stats_default_page_values mData = (stats_default_page_values) pModelResult["hdata"];
  31. return rep_Default_report_view(mData);
  32. }
  33. #endregion
  34. public string rep_Default_report_view(stats_default_page_values values)
  35. {
  36. StringBuilder output = new StringBuilder();
  37. const string TableClass = "defaultr";
  38. const string TRClass = "defaultr";
  39. const string TDHeaderClass = "header";
  40. const string TDDataClass = "content";
  41. //const string TDDataClassRight = "contentright";
  42. const string TDDataClassCenter = "contentcenter";
  43. const string STYLESHEET =
  44. @"
  45. <STYLE>
  46. body
  47. {
  48. font-size:15px; font-family:Helvetica, Verdana; color:Black;
  49. }
  50. TABLE.defaultr { }
  51. TR.defaultr { padding: 5px; }
  52. TD.header { font-weight:bold; padding:5px; }
  53. TD.content {}
  54. TD.contentright { text-align: right; }
  55. TD.contentcenter { text-align: center; }
  56. TD.align_top { vertical-align: top; }
  57. </STYLE>
  58. ";
  59. HTMLUtil.HtmlHeaders_O(ref output);
  60. HTMLUtil.InsertProtoTypeAJAX(ref output);
  61. string[] ajaxUpdaterDivs = new string[2];
  62. int[] ajaxUpdaterSeconds = new int[2];
  63. string[] ajaxUpdaterReportFragments = new string[2];
  64. ajaxUpdaterDivs[0] = "activeconnections";
  65. ajaxUpdaterSeconds[0] = 10;
  66. ajaxUpdaterReportFragments[0] = "activeconnectionsajax.ajax";
  67. ajaxUpdaterDivs[1] = "activesimstats";
  68. ajaxUpdaterSeconds[1] = 20;
  69. ajaxUpdaterReportFragments[1] = "simstatsajax.ajax";
  70. HTMLUtil.InsertPeriodicUpdaters(ref output, ajaxUpdaterDivs, ajaxUpdaterSeconds, ajaxUpdaterReportFragments);
  71. output.Append(STYLESHEET);
  72. HTMLUtil.HtmlHeaders_C(ref output);
  73. HTMLUtil.TABLE_O(ref output, TableClass);
  74. HTMLUtil.TR_O(ref output, TRClass);
  75. HTMLUtil.TD_O(ref output, TDHeaderClass);
  76. output.Append("# Users Total");
  77. HTMLUtil.TD_C(ref output);
  78. HTMLUtil.TD_O(ref output, TDHeaderClass);
  79. output.Append("# Sessions Total");
  80. HTMLUtil.TD_C(ref output);
  81. HTMLUtil.TD_O(ref output, TDHeaderClass);
  82. output.Append("Avg Client FPS");
  83. HTMLUtil.TD_C(ref output);
  84. HTMLUtil.TD_O(ref output, TDHeaderClass);
  85. output.Append("Avg Client Mem Use");
  86. HTMLUtil.TD_C(ref output);
  87. HTMLUtil.TD_O(ref output, TDHeaderClass);
  88. output.Append("Avg Sim FPS");
  89. HTMLUtil.TD_C(ref output);
  90. HTMLUtil.TD_O(ref output, TDHeaderClass);
  91. output.Append("Avg Ping");
  92. HTMLUtil.TD_C(ref output);
  93. HTMLUtil.TD_O(ref output, TDHeaderClass);
  94. output.Append("KB Out Total");
  95. HTMLUtil.TD_C(ref output);
  96. HTMLUtil.TD_O(ref output, TDHeaderClass);
  97. output.Append("KB In Total");
  98. HTMLUtil.TD_C(ref output);
  99. HTMLUtil.TR_C(ref output);
  100. HTMLUtil.TR_O(ref output, TRClass);
  101. HTMLUtil.TD_O(ref output, TDDataClass);
  102. output.Append(values.total_num_users);
  103. HTMLUtil.TD_C(ref output);
  104. HTMLUtil.TD_O(ref output, TDDataClass);
  105. output.Append(values.total_num_sessions);
  106. HTMLUtil.TD_C(ref output);
  107. HTMLUtil.TD_O(ref output, TDDataClassCenter);
  108. output.Append(values.avg_client_fps);
  109. HTMLUtil.TD_C(ref output);
  110. HTMLUtil.TD_O(ref output, TDDataClassCenter);
  111. output.Append(values.avg_client_mem_use);
  112. HTMLUtil.TD_C(ref output);
  113. HTMLUtil.TD_O(ref output, TDDataClassCenter);
  114. output.Append(values.avg_sim_fps);
  115. HTMLUtil.TD_C(ref output);
  116. HTMLUtil.TD_O(ref output, TDDataClassCenter);
  117. output.Append(values.avg_ping);
  118. HTMLUtil.TD_C(ref output);
  119. HTMLUtil.TD_O(ref output, TDDataClassCenter);
  120. output.Append(values.total_kb_out);
  121. HTMLUtil.TD_C(ref output);
  122. HTMLUtil.TD_O(ref output, TDDataClassCenter);
  123. output.Append(values.total_kb_in);
  124. HTMLUtil.TD_C(ref output);
  125. HTMLUtil.TR_C(ref output);
  126. HTMLUtil.TABLE_C(ref output);
  127. HTMLUtil.HR(ref output, "");
  128. HTMLUtil.TABLE_O(ref output, "");
  129. HTMLUtil.TR_O(ref output, "");
  130. HTMLUtil.TD_O(ref output, "align_top");
  131. output.Append("<DIV id=\"activeconnections\">loading...</DIV>");
  132. HTMLUtil.TD_C(ref output);
  133. HTMLUtil.TD_O(ref output, "align_top");
  134. output.Append("<DIV id=\"activesimstats\">loading...</DIV>");
  135. HTMLUtil.TD_C(ref output);
  136. HTMLUtil.TR_C(ref output);
  137. HTMLUtil.TABLE_C(ref output);
  138. output.Append("</BODY></HTML>");
  139. // TODO: FIXME: template
  140. return output.ToString();
  141. }
  142. public stats_default_page_values rep_DefaultReport_data(SqliteConnection db, List<Scene> m_scene)
  143. {
  144. stats_default_page_values returnstruct = new stats_default_page_values();
  145. returnstruct.all_scenes = m_scene.ToArray();
  146. lock (db)
  147. {
  148. string SQL = @"SELECT COUNT(DISTINCT agent_id) as agents, COUNT(*) as sessions, AVG(avg_fps) as client_fps,
  149. AVG(avg_sim_fps) as savg_sim_fps, AVG(avg_ping) as sav_ping, SUM(n_out_kb) as num_in_kb,
  150. SUM(n_out_pk) as num_in_packets, SUM(n_in_kb) as num_out_kb, SUM(n_in_pk) as num_out_packets, AVG(mem_use) as sav_mem_use
  151. FROM stats_session_data;";
  152. SqliteCommand cmd = new SqliteCommand(SQL, db);
  153. SqliteDataReader sdr = cmd.ExecuteReader();
  154. if (sdr.HasRows)
  155. {
  156. sdr.Read();
  157. returnstruct.total_num_users = Convert.ToInt32(sdr["agents"]);
  158. returnstruct.total_num_sessions = Convert.ToInt32(sdr["sessions"]);
  159. returnstruct.avg_client_fps = Convert.ToSingle(sdr["client_fps"]);
  160. returnstruct.avg_sim_fps = Convert.ToSingle(sdr["savg_sim_fps"]);
  161. returnstruct.avg_ping = Convert.ToSingle(sdr["sav_ping"]);
  162. returnstruct.total_kb_out = Convert.ToSingle(sdr["num_out_kb"]);
  163. returnstruct.total_kb_in = Convert.ToSingle(sdr["num_in_kb"]);
  164. returnstruct.avg_client_mem_use = Convert.ToSingle(sdr["sav_mem_use"]);
  165. }
  166. }
  167. return returnstruct;
  168. }
  169. }
  170. public struct stats_default_page_values
  171. {
  172. public int total_num_users;
  173. public int total_num_sessions;
  174. public float avg_client_fps;
  175. public float avg_client_mem_use;
  176. public float avg_sim_fps;
  177. public float avg_ping;
  178. public float total_kb_out;
  179. public float total_kb_in;
  180. public float avg_client_resends;
  181. public Scene[] all_scenes;
  182. public Dictionary<UUID, USimStatsData> sim_stat_data;
  183. }
  184. }