Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
 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();
         }
     }
 }
Ejemplo n.º 3
0
 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);
         }
     }
 }
Ejemplo n.º 4
0
        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);
        }