Пример #1
0
        public IActionResult Index(int Id, bool ajax)
        {
            ViewData["Id"]   = Id;
            ViewData["ajax"] = ajax;

            // Статистика запросов за прошлую минуту
            if (!memoryCache.TryGetValue(KeyToMemoryCache.IspNumberOfRequestToMinutes(DateTime.Now.AddMinutes(-1)), out IDictionary <string, NumberOfRequestMinute> NumberOfRequestsPerMinute))
            {
                NumberOfRequestsPerMinute = new Dictionary <string, NumberOfRequestMinute>();
            }

            // Настройки домена
            var domain = FindAndInclude(coreDB.RequestsFilter_Domains.AsNoTracking(), Id);

            ViewBag.host = domain.host;

            // Список алиасов
            List <AliasView> Aliases = new List <AliasView>();

            // Alias To AliasView
            foreach (var alias in domain.Aliases)
            {
                // Base Alias
                var model = new AliasView()
                {
                    DomainId = alias.DomainId,
                    Folder   = alias.Folder,
                    host     = alias.host,
                    Id       = alias.Id
                };

                // Количество запросов для алиаса
                if (NumberOfRequestsPerMinute.TryGetValue(alias.host, out NumberOfRequestMinute dt))
                {
                    model.ReqToMinute = dt.NumberOfRequest;
                }

                Aliases.Add(model);
            }

            // Выводим результат
            return(View("~/Views/RequestsFilter/Domain/Aliases.cshtml", Aliases.OrderByDescending(i => i.ReqToMinute)));
        }
Пример #2
0
        public static void SetCountRequestToMinute(string IP, TypeRequest type, string host, int DomainID, bool EnableCountRequest)
        {
            if (type != TypeRequest.All && type != TypeRequest._303)
            {
                return;
            }

            #region Локальный метод - "SetCount"
            void SetCount(NumberOfRequestMinute dt)
            {
                switch (type)
                {
                case TypeRequest._303:
                    dt.Count303++;
                    Trigger.OnRequestToMinute((IP, type, dt.Count303, host, DomainID));
                    break;

                case TypeRequest.All:
                    dt.NumberOfRequest++;
                    Trigger.OnRequestToMinute((IP, type, dt.NumberOfRequest, host, DomainID));
                    break;
                }
            }

            #endregion

            if (EnableCountRequest)
            {
                string keyNumberOfRequestToMinutes = KeyToMemoryCache.IspNumberOfRequestToMinutes(DateTime.Now);
                if (memoryCache.TryGetValue(keyNumberOfRequestToMinutes, out IDictionary <string, NumberOfRequestMinute> NumberOfRequestsPerMinute))
                {
                    // Если хост есть в кеше
                    if (NumberOfRequestsPerMinute.TryGetValue(host, out NumberOfRequestMinute dtValue))
                    {
                        SetCount(dtValue);
                    }

                    // Если хоста нету в кеше
                    else
                    {
                        var dt = new NumberOfRequestMinute();
                        dt.DomainID = DomainID;
                        SetCount(dt);
                        NumberOfRequestsPerMinute.Add(host, dt);
                    }
                }
                else
                {
                    // Считаем запрос
                    var dt = new NumberOfRequestMinute();
                    dt.DomainID = DomainID;
                    SetCount(dt);

                    // Создаем кеш
                    memoryCache.Set(keyNumberOfRequestToMinutes, new Dictionary <string, NumberOfRequestMinute>()
                    {
                        [host] = dt
                    }, TimeSpan.FromMinutes(3));
                }
            }
        }