/// <summary> /// Добавить сущность StatisticsChannel в базу данных /// </summary> public static void AddStatisticsChannelToDb(Db db, Channel channelInfo) { StatisticsChannel chanStat = new StatisticsChannel() { TelegramId = channelInfo.IdChannel, SubscribersCount = channelInfo.Subscribers ?? 0, Username = channelInfo.ChannelName, }; db.StatisticsChannels.Add(chanStat); db.SaveChanges(); }
private void CloseChannel() { lock (_channelSync) { var ch = _channel; _channel = null; if (ch != null) { _bytesReceived += ch.BytesReceived; _bytesSent += ch.BytesSent; if (ch.IsOpen) { ch.Close(); } ch.Dispose(); } } }
private StatisticsChannel OpenChannel() { lock (_channelSync) { try { if (_channel == null) { _channel = new StatisticsChannel(FlasherConfig.Read().GetProgrammerConfig().CreateChannel()); } if (!_channel.IsOpen) { _channel.Open(); } return(_channel); } catch (Exception) { CloseChannel(); return(null); } } }
public static string GetViewsStatistics(Db db, TelegramChannel channel) { string res = null; StatisticsChannel lastChannelStat = (from c in db.StatisticsChannels where c.TelegramId == channel.TelegramId select c)?.ToList().LastOrDefault() ?? null; if (lastChannelStat == null) { return("Нет статистики по каналу"); } List <TelegramPost> postList = (from p in db.TelegramPosts where p.ChannelTelegramId == channel.TelegramId select p)?.ToList() ?? new List <TelegramPost>(); List <StatisticsPost> postStatList = (from s in db.StatisticsPosts where s.ChannelTelegramId == channel.TelegramId select s)?.ToList() ?? new List <StatisticsPost>(); if (postList.Count == 0 || postStatList.Count == 0) { return("Нет статистики о постах!"); } Dictionary <long, TelegramPost> allPosts = new Dictionary <long, TelegramPost>(); foreach (var item in postList) { allPosts.Add(item.TelegramId, item); } Dictionary <long, StatisticsPost> lastStat = new Dictionary <long, StatisticsPost>(); foreach (var item in postStatList) { if (lastStat.ContainsKey(item.TelegramId)) { lastStat[item.TelegramId] = item; } else { lastStat.Add(item.TelegramId, item); } } long averagePostViewAllTime = GetAveragePostViewOnLastDays(lastStat, allPosts); long averagePostView30 = GetAveragePostViewOnLastDays(lastStat, allPosts, 30); long averagePostView7 = GetAveragePostViewOnLastDays(lastStat, allPosts, 7); long averagePostView3 = GetAveragePostViewOnLastDays(lastStat, allPosts, 3); res += $"Статистика постов:\n\n" + $"В базе есть статистика по последним {postList.Count} постам\n\n" + $"Среднее количество просмотров на каждый пост за последние:\n" + $"По всем данным : {averagePostViewAllTime} просмотр/пост.\n" + $" 30 дн. : {averagePostView30} просмотр/пост.\n" + $" 7 дн. : {averagePostView7} просмотр/пост.\n" + $" 3 дн. : {averagePostView3} просмотр/пост.\n\n" + $" На данный момент ER (за 30 дн.) = {((float)averagePostView30 / (float) lastChannelStat.SubscribersCount) * 100}%"; return(res); }