Esempio n. 1
0
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            var delayTime = TimeSpan.FromMinutes(5);

            while (!stoppingToken.IsCancellationRequested)
            {
                _logger.LogInformation($"Worker running at: {DateTime.Now}");

                var allAppointments = await _calendarService.GetAllAppointmentsForRooms();

                _logger.LogInformation($"Found {allAppointments.Count} appointments");

                var computersToAwake = allAppointments
                                       .Where(x => x.DateTime > DateTime.Now &&
                                              x.DateTime <= DateTime.Now.Add(delayTime))
                                       .Select(x => x.Room.Computer)
                                       .Distinct();
                _logger.LogInformation($"Found {computersToAwake.Count()} individual computers");

                foreach (var computer in computersToAwake)
                {
                    _logger.LogInformation($"Awakening computer with IP-address '{computer.IpAddress}'");
                    try
                    {
                        await _computerService.AwakeComputer(computer.IpAddress);
                    }
                    catch (Exception e)
                    {
                        _logger.LogWarning($"An error happened while awakening computer with IP-address '{computer.IpAddress}'{Environment.NewLine}{e}");
                    }
                }

                _logger.LogInformation($"Worker sleeping until {DateTime.Now + delayTime}");
                await Task.Delay(delayTime, stoppingToken);
            }
        }