Example #1
0
    public async Task FlushHitActivity()
    {
        Log.Information("Flushing HitActivity buffer");
        var metrics = LiteDbProvider.GetCollections <HitActivity>();

        var dateFormat    = "yyyy-MM-dd HH";
        var dateFormatted = DateTime.Now.ToString(dateFormat);

        Log.Debug("Filter last hour: {DateFormatted}", dateFormatted);
        var filteredMetrics = metrics.Find(x =>
                                           x.Timestamp.ToString(dateFormat) == dateFormatted).ToList();

        if (filteredMetrics.Count == 0)
        {
            Log.Debug("No HitActivity buffed need to flush");
            return;
        }

        Log.Debug("Flushing {Count} of {CountAll} data..", filteredMetrics.Count, metrics.Count());
        foreach (var hitActivity in filteredMetrics)
        {
            var data = new Dictionary <string, object>()
            {
                { "via_bot", hitActivity.ViaBot },
                { "update_type", hitActivity.UpdateType },
                { "from_id", hitActivity.FromId },
                { "from_first_name", hitActivity.FromFirstName },
                { "from_last_name", hitActivity.FromLastName },
                { "from_username", hitActivity.FromUsername },
                { "from_lang_code", hitActivity.FromLangCode },
                { "chat_id", hitActivity.ChatId },
                { "chat_username", hitActivity.ChatUsername },
                { "chat_type", hitActivity.ChatType },
                { "chat_title", hitActivity.ChatTitle },
                { "timestamp", hitActivity.Timestamp }
            };

            var insertHit = await _queryService
                            .CreateMySqlFactory()
                            .FromTable("hit_activity")
                            .InsertAsync(data);

            Log.Information("Insert Hit: {InsertHit}", insertHit);
        }

        Log.Debug("Clearing local data..");
        filteredMetrics.ForEach(x => {
            metrics.DeleteMany(y => y.Timestamp == x.Timestamp);
        });

        LiteDbProvider.Rebuild();

        Log.Information("Flush HitActivity done");
    }
Example #2
0
    public static async Task SyncWordToLocalAsync(this QueryFactory factory)
    {
        var sw = Stopwatch.StartNew();

        Log.Information("Starting Sync Words filter");

        var wordFilters = (await factory.FromQuery(new Query("word_filter"))
                           .GetAsync <WordFilter>()).ToList();

        // var cloudQuery = (await new Query("word_filter")
        // .ExecForMysql()
        // .GetAsync()
        // ).ToList();

        // var cloudWords = cloudQuery.ToJson().MapObject<List<WordFilter>>();

        var collection = LiteDbProvider.GetCollections <WordFilter>();

        collection.DeleteAll();
        collection.Insert(wordFilters);

        // var jsonWords = "local-words".OpenJson();

        // Log.Debug("Getting Words Collections");
        // var wordCollection = jsonWords.GetCollection<WordFilter>();

        // Log.Debug("Deleting old Words");
        // await wordCollection.DeleteManyAsync(x => x.Word != null)
        // ;

        // Log.Debug("Inserting new Words");
        // await wordCollection.InsertManyAsync(cloudWords)
        // ;

        Log.Information("Sync {0} Words complete in {1}", wordFilters.Count, sw.Elapsed);

        // jsonWords.Dispose();
        // cloudQuery.Clear();
        // cloudWords.Clear();
        wordFilters.Clear();
        sw.Stop();
    }
Example #3
0
    public static async Task SyncWordToLocalAsync()
    {
        var sw = Stopwatch.StartNew();

        Log.Information("Starting Sync Words filter");
        var cloudQuery = (await new Query("word_filter")
                          .ExecForMysql()
                          .GetAsync()).ToList();

        var cloudWords = cloudQuery.ToJson().MapObject <List <WordFilter> >();

        var collection = LiteDbProvider.GetCollections <WordFilter>();

        collection.DeleteAll();
        collection.Insert(cloudWords);

        // var jsonWords = "local-words".OpenJson();

        // Log.Debug("Getting Words Collections");
        // var wordCollection = jsonWords.GetCollection<WordFilter>();

        // Log.Debug("Deleting old Words");
        // await wordCollection.DeleteManyAsync(x => x.Word != null)
        // ;

        // Log.Debug("Inserting new Words");
        // await wordCollection.InsertManyAsync(cloudWords)
        // ;

        Log.Information("Sync {0} Words complete in {1}", cloudWords.Count, sw.Elapsed);

        // jsonWords.Dispose();
        cloudQuery.Clear();
        cloudWords.Clear();
        sw.Stop();

        // var localQuery = (await new Query("word_filter")
        //     .ExecForSqLite()
        //     .GetAsync()
        //     ).ToList();
        // var localWords = localQuery.ToJson().MapObject<List<WordFilter>>();
        //
        //
        // var diffWords = cloudWords
        //     .Where(c => localWords.All(l => l.Word != c.Word)).ToList();
        // Log.Debug($"DiffWords: {diffWords.Count} item(s)");
        //
        // if (diffWords.Count == 0)
        // {
        //     Log.Debug("Seem not need sync words to Local storage");
        //     return;
        // }
        //
        // Log.Information("Starting sync Words to Local");
        // var clearData = await new Query("word_filter")
        //     .ExecForSqLite(true)
        //     .DeleteAsync()
        //     ;
        //
        // Log.Information($"Deleting local Word Filter: {clearData} rows");
        //
        // foreach (var row in cloudWords)
        // {
        //     var data = new Dictionary<string, object>()
        //     {
        //         {"word", row.Word},
        //         {"is_global", row.IsGlobal},
        //         {"deep_filter", row.DeepFilter},
        //         {"from_id", row.FromId},
        //         {"chat_id", row.ChatId},
        //         {"created_at", row.CreatedAt}
        //     };
        //
        //     var insert = await new Query("word_filter")
        //         .ExecForSqLite()
        //         .InsertAsync(data)
        //         ;
        // }
        //
        // Log.Information($"Synced {cloudWords.Count} row(s)");
    }