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"); }
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(); }
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)"); }