public static void CrawlAuditTrails(IOutputFactory outFactory, CancellationToken token) { var crawlInvoker = new AuditTrailCrawler(outFactory); IAuditTrailCrawler crawler = new DBCrawler(); if (crawler.IsDisabled) { return; } var supressions = CxAnalytix.Configuration.Config.GetConfig <CxAuditTrailSupressions>(CxAuditTrailSupressions.SECTION_NAME); foreach (var field in typeof(CxAuditTrailTableNameConsts).GetFields()) { if (token.IsCancellationRequested) { break; } if (GetPropertyValue <CxAuditTrailSupressions, bool>(field.Name, supressions)) { _log.Debug($"{field.Name} logging has been suppressed via configuration."); continue; } crawlInvoker.InvokeCrawlMethod(field.Name, crawler, token); } }
public static void CrawlAuditTrails(CancellationToken token) { var crawlInvoker = new AuditTrailCrawler(); IAuditTrailCrawler crawler = new DBCrawler(); if (crawler.IsDisabled) { return; } var supressions = Configuration.Config.GetConfig <CxAuditTrailSupressions>(CxAuditTrailSupressions.SECTION_NAME); using (var trx = Output.StartTransaction()) { Parallel.ForEach(typeof(CxAuditTrailTableNameConsts).GetFields(), new ParallelOptions { CancellationToken = token, MaxDegreeOfParallelism = Configuration.Config.Service.ConcurrentThreads }, (field) => { if (token.IsCancellationRequested) { return; } if (GetPropertyValue <CxAuditTrailSupressions, bool>(field.Name, supressions)) { _log.Debug($"{field.Name} logging has been suppressed via configuration."); return; } crawlInvoker.InvokeCrawlMethod(field.Name, crawler, trx, token); }); if (!token.IsCancellationRequested && trx.Commit()) { crawlInvoker.WriteSinceDate(); } } }
/// <summary> /// Initiate the legacy NoSQL Freelancer storage. /// </summary> /// <param name="dbPath">Path to the SQLite database file. DB will be created if file is nonexistent.</param> /// <param name="accPath">Path to accounts' directory.</param> /// <param name="log"></param> public NoSQLDB(string dbPath, string accPath, LogDispatcher.LogDispatcher log) { //One-shot event assignment; NoSQLDB-Retriever Logger.LogDisp = log; //Retriever = new MetaRetriever(this); AccPath = accPath; if (!File.Exists(dbPath)) { SQLiteConnection.CreateFile(dbPath); _conn = new SQLiteConnection(); var conString = new SQLiteConnectionStringBuilder { DataSource = dbPath }; _conn.ConnectionString = conString.ToString(); try { _conn.Open(); } catch (Exception e) { Logger.LogDisp.NewMessage(LogType.Fatal, "NoSQLDB: Can't connect to new player DB. Reason: " + e.Message); throw; } // Create data base structure var createDataBase = _conn.CreateCommand(); // Useful method createDataBase.CommandText = CreateDBString.Replace("@Table", "Accounts"); createDataBase.ExecuteNonQuery(); createDataBase.CommandText = CreateDBString.Replace("@Table", "DelAccounts"); createDataBase.ExecuteNonQuery(); createDataBase.CommandText = @"CREATE TABLE LoginIP( AccID TEXT NOT NULL, IP TEXT NOT NULL, LogTime DATETIME NOT NULL, PRIMARY KEY (AccID, IP) ON CONFLICT REPLACE );"; createDataBase.ExecuteNonQuery(); createDataBase.CommandText = @"CREATE TABLE LoginID( AccID TEXT NOT NULL, ID1 TEXT NOT NULL, ID2 TEXT NOT NULL );"; createDataBase.ExecuteNonQuery(); createDataBase.CommandText = @"CREATE TABLE Bans( AccID TEXT NOT NULL PRIMARY KEY ON CONFLICT REPLACE, Reason TEXT NOT NULL, DateStarting DATETIME NOT NULL, DateFinishing DATETIME NOT NULL );"; createDataBase.ExecuteNonQuery(); createDataBase.CommandText = "CREATE INDEX AccLookup ON LoginIP(AccID ASC);"; createDataBase.ExecuteNonQuery(); createDataBase.CommandText = "CREATE INDEX CharLookup ON Accounts(CharName ASC);"; createDataBase.ExecuteNonQuery(); _conn.Close(); Logger.LogDisp.NewMessage(LogType.Warning, "Created new player DB."); } // Base created fo sho _conn = new SQLiteConnection(); var cs = new SQLiteConnectionStringBuilder {DataSource = dbPath}; _conn.ConnectionString = cs.ToString(); _conn.Open(); Logger.LogDisp.NewMessage(LogType.Info, "NoSQLDB: Connected."); Queue = new DBQueue(_conn, "NoSQLDB.Main"); LoginDB = new LoginDatabase( _conn, Queue); Bans = new BanDB(this); //TODO: might need to use non-hardcoded paths BansID = new IniBan(accPath + @"\loginidbans.ini"); BansIP = new IniBan(accPath + @"\ipbans.ini"); Scan = new Scanner(_conn,this); Retriever = new DBCrawler(_conn); Scan.StateChanged += Scan_StateChanged; if (StateChanged != null) StateChanged(DBStates.Ready); }