public async Task <IActionResult> Details(int?id, DateTime?Inicio, DateTime?Fim) { if (id == null) { return(NotFound()); } if (!Inicio.HasValue) { Inicio = DateTime.Now.AddDays(-3).Date; } if (!Fim.HasValue) { Fim = DateTime.Now.Date; } ViewBag.Fim = Fim; ViewBag.Inicio = Inicio; var relogio = await _context.Relogios .FirstOrDefaultAsync(m => m.Id == id); try { IRelogioService relogioService = (IRelogioService)ActivatorUtilities.CreateInstance(this._serviceProvider, typeof(RelogioHenry)); await relogioService.LerRelogioELancarAsync(relogio, Inicio.Value, Fim.Value.AddDays(1), lancar : false); }catch (Exception e) { _logger.LogError("Não foi possível ler o relógio. Mostrando dados adquiridos anteriormente"); } relogio.Registros = _context.Registros.Where(r => r.IdRelogio == relogio.Id && r.Marcacao > Inicio && r.Marcacao < Fim).OrderBy(r => r.Marcacao).ToList(); if (relogio == null) { return(NotFound()); } return(View(relogio)); }
public override Task DoWork(CancellationToken cancellationToken) { try { _logger.LogInformation($"{DateTime.Now:hh:mm:ss} Iniciando ciclo e leitura."); using var scope = _serviceProvider.CreateScope(); var _pontoSyncContext = scope.ServiceProvider.GetRequiredService <PontoSyncContext>(); var _frequenciaContext = scope.ServiceProvider.GetRequiredService <FrequenciaContext>(); var relogios = _pontoSyncContext.Relogios.ToList(); int count = 0; Parallel.ForEach(relogios, relogio => { try { IRelogioService relogioService = (IRelogioService)ActivatorUtilities.CreateInstance(_serviceProvider.CreateScope().ServiceProvider, typeof(RelogioHenry)); DateTime inicio; //Se nunca havia sido lido antes, ler os últimos 60 minutos. if (relogio.UltimoSucesso == null) { inicio = DateTime.Now.AddMinutes(-60); } else { //Se já havia sido lido, recuperar no máximo 3 dias de leitura. if ((DateTime.Now.Date - relogio.UltimoSucesso.Value.Date).TotalDays > 3) { inicio = DateTime.Now.AddDays(-3); } //Se a leitura é recente ler desde o último sucesso, e 15 minutos de sobreposição. else { inicio = relogio.UltimoSucesso.Value.AddMinutes(-15); } } relogioService.LerRelogioELancarAsync(relogio, inicio, DateTime.Now, true); } catch (Exception e) { count++; _logger.LogError(1, e, $"Problema lendo o relógio {relogio.Nome} com o IP {relogio.URL} e descrito como {relogio.Descricao}"); } } ); _logger.LogInformation($"{DateTime.Now:hh:mm:ss} Terminado ciclo e leitura. Quantidade de erros:" + count); } catch { _logger.LogError("Erro crítico no Job de leitura do relógio"); } return(Task.CompletedTask); }