public async Task <IActionResult> OnGet() { var mod = await SharedSettings.GetIndexStatsAsync(_db); TotalUserJournalCount = mod.TotalUserJournalCount; TotalUserJournalLines = mod.TotalUserJournalLines; UserCount = mod.TotalUserCount; if (User.Identity.IsAuthenticated) { LoggedInUser = await _db.ExecuteSingleRowAsync <Profile>("SELECT * FROM user_profile WHERE user_identifier = @user_identifier", new SqlParameter("user_identifier", User.Identity.Name)); var rdb = SharedSettings.RedisClient.GetDatabase(0); var cmdrNameCache = await rdb.StringGetAsync($"commanderName:{User.Identity.Name}"); if (cmdrNameCache.IsNull) { var hc = _httpClientFactory.CreateClient(); hc.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", LoggedInUser.UserSettings.AuthToken); hc.BaseAddress = new Uri("https://companion.orerve.net"); var cmdrProfile = await GetProfileAsync(hc); var cmdrJson = await cmdrProfile.Content.ReadAsStringAsync(); if (!cmdrProfile.IsSuccessStatusCode || cmdrJson.Trim() == "{}") { return(Redirect("~/api/journal/logout")); } if (!string.IsNullOrWhiteSpace(cmdrJson)) { var cmdrInfo = JsonSerializer.Deserialize <EliteProfile>(cmdrJson); CommanderName = cmdrInfo.Commander.Name; if (string.IsNullOrWhiteSpace(CommanderName)) { return(Redirect("~/api/journal/logout"));; } await rdb.StringSetAsyncWithRetries($"commanderName:{User.Identity.Name}", CommanderName, TimeSpan.FromMinutes(30)); } else { CommanderName = "(Unknown, API Issues)"; } } else { CommanderName = cmdrNameCache; } LoggedInUserJournalCount = await _db.ExecuteScalarAsync <long>( "SELECT COUNT_BIG(journal_id) FROM user_journal WHERE user_identifier = @user_identifier AND last_processed_line_number > 0", new SqlParameter("user_identifier", User.Identity.Name) ); IntegrationsEnabled.Add("EDDN", LoggedInUser.SendToEDDN); foreach (var inte in LoggedInUser.IntegrationSettings) { IntegrationsEnabled.Add(inte.Key, inte.Value.GetProperty("enabled").GetBoolean()); } } return(Page()); }
public static async Task SendStatsTweetAsync(PerformContext context) { context.WriteLine("Looking for tokens to refresh!"); using (var scope = Startup.ServiceProvider.CreateScope()) { IConfiguration configuration = scope.ServiceProvider.GetRequiredService <IConfiguration>(); MSSQLDB db = scope.ServiceProvider.GetRequiredService <MSSQLDB>(); var tweetSender = scope.ServiceProvider.GetRequiredService <TwitterSender>(); var _rdb = SharedSettings.RedisClient.GetDatabase(0); var prevIndexStats = await _rdb.StringGetAsync("weekly-stats-json"); var mod = await SharedSettings.GetIndexStatsAsync(db); StringBuilder sb = new StringBuilder(); sb.AppendLine("Weekly stats #EliteDangerous"); sb.AppendLine(""); if (!prevIndexStats.IsNullOrEmpty) { try { var prevIndexModel = JsonConvert.DeserializeObject <IndexStatsModel>(prevIndexStats); var userDiff = mod.TotalUserCount - prevIndexModel.TotalUserCount; var journalDiff = mod.TotalUserJournalCount - prevIndexModel.TotalUserJournalCount; var linesDiff = mod.TotalUserJournalLines - prevIndexModel.TotalUserJournalLines; if (linesDiff == 0 && journalDiff == 0 && userDiff == 0) { // No changes, no need to send tweet return; } if (userDiff > 0) { sb.AppendLine($"{SharedSettings.NumberFixer(userDiff)} user(s) registered (Total {SharedSettings.NumberFixer(mod.TotalUserCount)})"); } if (journalDiff > 0) { sb.AppendLine($"{SharedSettings.NumberFixer(journalDiff)} journal(s) saved (Total {SharedSettings.NumberFixer(mod.TotalUserJournalCount)})"); } if (linesDiff > 0) { sb.AppendLine($"{SharedSettings.NumberFixer(linesDiff)} lines(s) saved (Total {SharedSettings.NumberFixer(mod.TotalUserJournalLines)})"); } } catch { sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserCount)} users registered"); sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalCount)} journals saved"); sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalLines)} lines of journal"); } } else { sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserCount)} users registered"); sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalCount)} journals saved"); sb.AppendLine($"{SharedSettings.NumberFixer(mod.TotalUserJournalLines)} lines of journal"); } _rdb.StringSet("weekly-stats-json", JsonConvert.SerializeObject(mod)); sb.AppendLine("https://journal-limpet.com"); var res = await tweetSender.SendAsync(sb.ToString()); if (!res.status) { await MailSender.SendSingleEmail(configuration, "*****@*****.**", "Failed to send tweet", res.response); } } }