public async Task <List <Vm> > Get(int id) { _logger.LogInformation($"REQUEST : {Request.Path}"); _logger.LogInformation($"ID : {id}"); List <Vm> vms = new List <Vm>(); List <User> users; if ((List <Vm>)_cache.Get(0) != null && (List <User>)_cache.Get(1) != null && id == 0) { vms = (List <Vm>)_cache.Get(0); users = ((List <User>)_cache.Get(1)); _logger.LogInformation($"CACHE VMS : {vms.Count}"); _logger.LogInformation($"CACHE USERS: {users.Count}"); return(vms); } else { _logger.LogInformation($"CACHE NO : {vms.Count}"); var dbVms = await _context.Vms.ToListAsync(); var ous = await _context.OrganizationUnits.ToListAsync(); var adapters = await _context.Adapters.Where(x => x.IsOK).Include(x => x.Provider).Include(a => a.Credentials).ToListAsync(); users = _authService.GetUsersList(); foreach (Adapter adapter in adapters) { if (!adapter.IsOK) { break; } switch (adapter.Provider.Id) { case (int)ProviderType.Ovirt: ServicesResponse servicesResponse = await VmService.GetVMs(adapter); OvirtVM.Vms ovirtVms; if (!servicesResponse.isSuccess) { break; } ovirtVms = (OvirtVM.Vms)servicesResponse.resultObject; List <Vm> commonVMs = ovirtVms.Vm.ConvertAll(x => (Vm)x); // хз зачем commonVMs.ForEach(x => x.Adapter = adapter); vms.AddRange(commonVMs); adapter.Provider = null; break; case (int)ProviderType.VMware: var response = await EasyAdmin.Services.VMware.VmService.GetVmListAsync(adapter); if (response.isSuccess) { var vmwareVm = response.resultObject; vmwareVm.ForEach(x => x.Adapter = adapter); vms.AddRange(vmwareVm); } // хз зачем но добавлю как выше adapter.Provider = null; break; } } var isAdmin = User.Claims.SingleOrDefault(x => x.Type == ClaimTypes.Role && x.Value == "Admin") != null; foreach (var vm in vms) { var dbVm = dbVms.SingleOrDefault(x => x.Id == vm.Id); if (dbVm == null) { //_context.Vms.Add(vm); } else // if (dbVm.LastTimeUpdated.AddDays(1) < DateTime.Today) { vm.HddSize = dbVm.HddSize; } var haveAccess = new List <string>() { vm.AdminId, vm.OwnerId, vm.ManagerId }; var claims = User.Claims.Select(x => x.Value).ToList(); if (isAdmin || claims.Intersect(haveAccess).Any()) { vm.PoolShortName = ous.FirstOrDefault(p => vm.Name.Contains(p.PoolShortName))?.PoolShortName ?? ous.Single(d => d.Id == 1).PoolShortName; vm.Admin = users.SingleOrDefault(x => x.Sam == vm.AdminId); vm.Owner = users.SingleOrDefault(x => x.Sam == vm.OwnerId); vm.Manager = users.SingleOrDefault(x => x.Sam == vm.ManagerId); } else { vms.Remove(vm); } } _cache.Remove(0); _cache.Set(0, vms, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(5))); _cache.Set(1, users, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(5))); return(vms); } //await _context.SaveChangesAsync(); }