aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/UserStatistics/LogLinesAJAX.cs
diff options
context:
space:
mode:
authorTeravus Ovares2009-01-05 04:09:04 +0000
committerTeravus Ovares2009-01-05 04:09:04 +0000
commite4a8cc192dd16930718ff18838aa82e6187741bf (patch)
treea41492dc43a435fcd8a9395fb1f6aff8ae03b702 /OpenSim/Region/UserStatistics/LogLinesAJAX.cs
parent* Another minor GenericMessage fix - If we assume the method names are case-i... (diff)
downloadopensim-SC-e4a8cc192dd16930718ff18838aa82e6187741bf.zip
opensim-SC-e4a8cc192dd16930718ff18838aa82e6187741bf.tar.gz
opensim-SC-e4a8cc192dd16930718ff18838aa82e6187741bf.tar.bz2
opensim-SC-e4a8cc192dd16930718ff18838aa82e6187741bf.tar.xz
* Adds an active log to the WebStats console. for an example of it in use as it is right now see http://wmcv.com:9000/SStats/
* It still isn't quite ready to be used mainstream. * A couple of things to note, it doesn't keep track of the logs if nobody is looking at the stats. * It doesn't read the whole log file. Just the last 10 lines of the stream. Tested to 1GB+ logfiles with no noticeable performance issues.
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/UserStatistics/LogLinesAJAX.cs98
1 files changed, 98 insertions, 0 deletions
diff --git a/OpenSim/Region/UserStatistics/LogLinesAJAX.cs b/OpenSim/Region/UserStatistics/LogLinesAJAX.cs
new file mode 100644
index 0000000..9626c12
--- /dev/null
+++ b/OpenSim/Region/UserStatistics/LogLinesAJAX.cs
@@ -0,0 +1,98 @@
1using System;
2using System.Collections;
3using System.Collections.Generic;
4using System.Reflection;
5using System.Text;
6using System.Text.RegularExpressions;
7using Mono.Data.SqliteClient;
8using OpenMetaverse;
9using OpenSim.Region.Environment.Scenes;
10using OpenSim.Framework.Statistics;
11
12namespace OpenSim.Region.UserStatistics
13{
14 public class LogLinesAJAX : IStatsController
15 {
16 private Regex normalizeEndLines = new Regex(@"\r\n", RegexOptions.Compiled | RegexOptions.Singleline | RegexOptions.Multiline);
17
18 private Regex webFormat = new Regex(@"[^\s]*\s([^,]*),[^\s]*\s([A-Z]*)[^\s-][^\[]*\[([^\]]*)\]([^\n]*)",
19 RegexOptions.Singleline | RegexOptions.Compiled);
20 private Regex TitleColor = new Regex(@"[^\s]*\s(?:[^,]*),[^\s]*\s(?:[A-Z]*)[^\s-][^\[]*\[([^\]]*)\](?:[^\n]*)",
21 RegexOptions.Singleline | RegexOptions.Compiled);
22
23
24 #region IStatsController Members
25
26 public Hashtable ProcessModel(Hashtable pParams)
27 {
28 Hashtable nh = new Hashtable();
29 nh.Add("loglines", pParams["LogLines"]);
30 return nh;
31 }
32
33 public string RenderView(Hashtable pModelResult)
34 {
35 StringBuilder output = new StringBuilder();
36
37 HTMLUtil.HR(ref output, "");
38 output.Append("<H3>ActiveLog</H3>\n");
39
40 string tmp = normalizeEndLines.Replace(pModelResult["loglines"].ToString(), "\n");
41
42 string[] result = Regex.Split(tmp, "\n");
43
44 string formatopen = "";
45 string formatclose = "";
46
47 for (int i = 0; i < result.Length;i++ )
48 {
49 if (result[i].Length >= 30)
50 {
51 string logtype = result[i].Substring(24, 6);
52 switch (logtype)
53 {
54 case "WARN ":
55 formatopen = "<font color=\"#7D7C00\">";
56 formatclose = "</font>";
57 break;
58
59 case "ERROR ":
60 formatopen = "<font color=\"#FF0000\">";
61 formatclose = "</font>";
62 break;
63
64 default:
65 formatopen = "";
66 formatclose = "";
67 break;
68
69 }
70 }
71 StringBuilder replaceStr = new StringBuilder();
72 //string titlecolorresults =
73
74 string formatresult = Regex.Replace(TitleColor.Replace(result[i], "$1"), "[^ABCDEFabcdef0-9]", "");
75 if (formatresult.Length > 6)
76 {
77 formatresult = formatresult.Substring(0, 6);
78
79 }
80 for (int j = formatresult.Length; j <= 5; j++)
81 formatresult += "0";
82 replaceStr.Append("$1 - [<font color=\"#");
83 replaceStr.Append(formatresult);
84 replaceStr.Append("\">$3</font>] $4<br />");
85 string repstr = replaceStr.ToString();
86
87 output.Append(formatopen);
88 output.Append(webFormat.Replace(result[i], repstr));
89 output.Append(formatclose);
90 }
91
92
93 return output.ToString();
94 }
95
96 #endregion
97 }
98}