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