Exemplo n.º 1
0
        public async Task <IActionResult> GetDepartures(Crossing crossing, DateTime?date, int?days = 1)
        {
            date = date ?? LaesoeTime.Now.Date;

            if (Request.GetTypedHeaders().CacheControl?.NoCache != true)
            {
                var departures = await _cache.GetDeparturesAsync(crossing, date.Value, days.Value, false, HttpContext.RequestAborted);

                if (departures != null)
                {
                    return(Ok(departures));
                }
            }

            await _crawlDeparturesProcessor.SyncDeparturesAsync(crossing, date.Value, days.Value, HttpContext.RequestAborted);

            var result = await _cache.GetDeparturesAsync(crossing, date.Value, days.Value, true, HttpContext.RequestAborted);

            return(Ok(result));
        }
Exemplo n.º 2
0
        protected override async Task RunAsync(CancellationToken cancellationToken)
        {
            var crossings = (Crossing[])Enum.GetValues(typeof(Crossing));

            var isFirstRun = true;

            while (!cancellationToken.IsCancellationRequested)
            {
                var now     = LaesoeTime.Now;
                var nowDate = now.Date;

                int days = GetDays(now, isFirstRun);
                isFirstRun = false;

                try
                {
                    foreach (var crossing in crossings)
                    {
                        await _processor.SyncDeparturesAsync(crossing, nowDate, days, cancellationToken);

                        _logger.LogInformation("Successfully synchronized departures for {Crossing} from {Date} for {Days} days", crossing, nowDate, days);
                    }
                }
                catch (TaskCanceledException)
                {
                }
                catch (Exception e)
                {
                    _logger.LogError(e, "Departure synchronization failed from {Date} for {Days} days", nowDate, days);
                }

                try
                {
                    await Task.Delay(TimeSpan.FromHours(1), cancellationToken);
                }
                catch (TaskCanceledException)
                {
                }
            }
        }