diff options
Diffstat (limited to 'OpenSim/Data/MSSQL/MSSQLLogData.cs')
-rw-r--r-- | OpenSim/Data/MSSQL/MSSQLLogData.cs | 106 |
1 files changed, 86 insertions, 20 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLLogData.cs b/OpenSim/Data/MSSQL/MSSQLLogData.cs index b284c02..a617cea 100644 --- a/OpenSim/Data/MSSQL/MSSQLLogData.cs +++ b/OpenSim/Data/MSSQL/MSSQLLogData.cs | |||
@@ -26,6 +26,7 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Data.SqlClient; | ||
29 | using System.Reflection; | 30 | using System.Reflection; |
30 | using System.Collections.Generic; | 31 | using System.Collections.Generic; |
31 | using System.Data; | 32 | using System.Data; |
@@ -39,6 +40,8 @@ namespace OpenSim.Data.MSSQL | |||
39 | /// </summary> | 40 | /// </summary> |
40 | internal class MSSQLLogData : ILogDataPlugin | 41 | internal class MSSQLLogData : ILogDataPlugin |
41 | { | 42 | { |
43 | private const string _migrationStore = "LogStore"; | ||
44 | |||
42 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 45 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
43 | 46 | ||
44 | /// <summary> | 47 | /// <summary> |
@@ -48,7 +51,7 @@ namespace OpenSim.Data.MSSQL | |||
48 | 51 | ||
49 | public void Initialise() | 52 | public void Initialise() |
50 | { | 53 | { |
51 | m_log.Info("[MSSQLLogData]: " + Name + " cannot be default-initialized!"); | 54 | m_log.Info("[LOG DB]: " + Name + " cannot be default-initialized!"); |
52 | throw new PluginNotInitialisedException (Name); | 55 | throw new PluginNotInitialisedException (Name); |
53 | } | 56 | } |
54 | 57 | ||
@@ -57,18 +60,37 @@ namespace OpenSim.Data.MSSQL | |||
57 | /// </summary> | 60 | /// </summary> |
58 | public void Initialise(string connect) | 61 | public void Initialise(string connect) |
59 | { | 62 | { |
60 | // TODO: do something with the connect string | 63 | if (string.IsNullOrEmpty(connect)) |
61 | IniFile gridDataMSSqlFile = new IniFile("mssql_connection.ini"); | 64 | { |
62 | string settingDataSource = gridDataMSSqlFile.ParseFileReadValue("data_source"); | 65 | database = new MSSQLManager(connect); |
63 | string settingInitialCatalog = gridDataMSSqlFile.ParseFileReadValue("initial_catalog"); | 66 | } |
64 | string settingPersistSecurityInfo = gridDataMSSqlFile.ParseFileReadValue("persist_security_info"); | 67 | else |
65 | string settingUserId = gridDataMSSqlFile.ParseFileReadValue("user_id"); | 68 | { |
66 | string settingPassword = gridDataMSSqlFile.ParseFileReadValue("password"); | 69 | // TODO: do something with the connect string |
67 | 70 | IniFile gridDataMSSqlFile = new IniFile("mssql_connection.ini"); | |
68 | database = | 71 | string settingDataSource = gridDataMSSqlFile.ParseFileReadValue("data_source"); |
69 | new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId, | 72 | string settingInitialCatalog = gridDataMSSqlFile.ParseFileReadValue("initial_catalog"); |
70 | settingPassword); | 73 | string settingPersistSecurityInfo = gridDataMSSqlFile.ParseFileReadValue("persist_security_info"); |
74 | string settingUserId = gridDataMSSqlFile.ParseFileReadValue("user_id"); | ||
75 | string settingPassword = gridDataMSSqlFile.ParseFileReadValue("password"); | ||
76 | |||
77 | database = | ||
78 | new MSSQLManager(settingDataSource, settingInitialCatalog, settingPersistSecurityInfo, settingUserId, | ||
79 | settingPassword); | ||
80 | } | ||
81 | |||
82 | //TODO when can this be removed | ||
83 | TestTable(); | ||
84 | |||
85 | //Updating mechanisme | ||
86 | database.CheckMigration(_migrationStore); | ||
87 | } | ||
71 | 88 | ||
89 | /// <summary> | ||
90 | /// Can be removed someday!!! | ||
91 | /// </summary> | ||
92 | private void TestTable() | ||
93 | { | ||
72 | using (IDbCommand cmd = database.Query("select top 1 * from logs", new Dictionary<string, string>())) | 94 | using (IDbCommand cmd = database.Query("select top 1 * from logs", new Dictionary<string, string>())) |
73 | { | 95 | { |
74 | try | 96 | try |
@@ -80,9 +102,38 @@ namespace OpenSim.Data.MSSQL | |||
80 | database.ExecuteResourceSql("Mssql-logs.sql"); | 102 | database.ExecuteResourceSql("Mssql-logs.sql"); |
81 | } | 103 | } |
82 | } | 104 | } |
105 | using (AutoClosingSqlCommand cmd = database.Query("select * from migrations where name = '" + _migrationStore + "'")) | ||
106 | { | ||
107 | //Special for Migrations to create backword compatible | ||
108 | try | ||
109 | { | ||
110 | bool insert = true; | ||
111 | using (SqlDataReader reader = cmd.ExecuteReader()) | ||
112 | { | ||
113 | if (reader.Read()) insert = false; | ||
114 | } | ||
115 | if (insert) | ||
116 | { | ||
117 | cmd.CommandText = "insert into migrations(name, version) values('" + _migrationStore + "', 1)"; | ||
118 | cmd.ExecuteNonQuery(); | ||
119 | } | ||
120 | } | ||
121 | catch | ||
122 | { | ||
123 | //No migrations table | ||
124 | //HACK create one and add data | ||
125 | cmd.CommandText = "create table migrations(name varchar(100), version int)"; | ||
126 | cmd.ExecuteNonQuery(); | ||
83 | 127 | ||
84 | } | 128 | cmd.CommandText = "insert into migrations(name, version) values('migrations', 1)"; |
129 | cmd.ExecuteNonQuery(); | ||
85 | 130 | ||
131 | cmd.CommandText = "insert into migrations(name, version) values('" + _migrationStore + "', 1)"; | ||
132 | cmd.ExecuteNonQuery(); | ||
133 | } | ||
134 | } | ||
135 | } | ||
136 | |||
86 | /// <summary> | 137 | /// <summary> |
87 | /// Saves a log item to the database | 138 | /// Saves a log item to the database |
88 | /// </summary> | 139 | /// </summary> |
@@ -95,13 +146,28 @@ namespace OpenSim.Data.MSSQL | |||
95 | public void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority, | 146 | public void saveLog(string serverDaemon, string target, string methodCall, string arguments, int priority, |
96 | string logMessage) | 147 | string logMessage) |
97 | { | 148 | { |
98 | try | 149 | string sql = "INSERT INTO logs ([target], [server], [method], [arguments], [priority], [message]) VALUES "; |
99 | { | 150 | sql += "(@target, @server, @method, @arguments, @priority, @message);"; |
100 | database.insertLogRow(serverDaemon, target, methodCall, arguments, priority, logMessage); | 151 | |
101 | } | 152 | using (AutoClosingSqlCommand command = database.Query(sql)) |
102 | catch | ||
103 | { | 153 | { |
104 | // it didn't log, don't worry about it | 154 | command.Parameters.Add(database.CreateParameter("server", serverDaemon)); |
155 | command.Parameters.Add(database.CreateParameter("target",target)); | ||
156 | command.Parameters.Add(database.CreateParameter("method", methodCall)); | ||
157 | command.Parameters.Add(database.CreateParameter("arguments", arguments)); | ||
158 | command.Parameters.Add(database.CreateParameter("priority", priority.ToString())); | ||
159 | command.Parameters.Add(database.CreateParameter("message", logMessage)); | ||
160 | |||
161 | try | ||
162 | { | ||
163 | command.ExecuteNonQuery(); | ||
164 | } | ||
165 | catch (Exception e) | ||
166 | { | ||
167 | //Are we not in a loop here | ||
168 | //m_log.Error(e.ToString()); | ||
169 | Console.WriteLine("[LOG DB] Error logging : " + e.Message); | ||
170 | } | ||
105 | } | 171 | } |
106 | } | 172 | } |
107 | 173 | ||
@@ -119,7 +185,7 @@ namespace OpenSim.Data.MSSQL | |||
119 | /// </summary> | 185 | /// </summary> |
120 | public void Dispose() | 186 | public void Dispose() |
121 | { | 187 | { |
122 | // Do nothing. | 188 | database = null; |
123 | } | 189 | } |
124 | 190 | ||
125 | /// <summary> | 191 | /// <summary> |