Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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();
                }
            }
        }
Beispiel #3
0
        /// <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);
        }