public static async Task Run(IMonitorsRepository monitorsRepository,
                                     IMonitorLogsRepository monitorLogsRepository,
                                     IMonitoringService monitoringService,
                                     IPushNotificationService pushNotificationService,
                                     IPushNotificationTokensRepository pushNotificationTokensRepository)
        {
            await monitoringService.Monitor(null, monitorsRepository, monitorLogsRepository);

            var applicationUserMonitors = monitoringService.GetFailedMonitors();

            await pushNotificationService.SendPushNotifications(applicationUserMonitors, pushNotificationTokensRepository);
        }
Example #2
0
 public AuthenticationController(UserManager <ApplicationUser> userManager,
                                 SignInManager <ApplicationUser> signInManager,
                                 IUserRepository userRepository,
                                 IPushNotificationTokensRepository pushNotificationTokensRepository,
                                 IOptions <TokenOptions> tokens,
                                 ILogger <AuthenticationController> logger)
     : base(userManager, logger)
 {
     _signInManager  = signInManager;
     _userRepository = userRepository;
     _tokenOptions   = tokens.Value;
     _pushNotificationTokensRepository = pushNotificationTokensRepository;
 }
Example #3
0
        public async Task SendPushNotifications(ApplicationUserMonitors applicationUserMonitors,
                                                IPushNotificationTokensRepository pushNotificationTokensRepository)
        {
            var pushMessages = new List <PushMessage>();

            foreach (var key in applicationUserMonitors)
            {
                var user = key.Key;

                if (user.PushNotificationsEnabled == false)
                {
                    continue;
                }

                var monitors = key.Value;

                var monitorDescriptions
                    = monitors.Cast <Monitor>()
                      .Select(monitor => monitor.OutageDescription.Trim())
                      .ToArray();

                var downSites = string.Join(", ", monitorDescriptions);

                var pushNotificationTokens
                    = await pushNotificationTokensRepository.GetUserPushNotificationTokens(user);

                foreach (var token in pushNotificationTokens)
                {
                    var message = new PushMessage
                    {
                        To    = token.Token,
                        Body  = $"The following sites are down: {downSites}",
                        Title = "Site outage detected"
                    };

                    pushMessages.Add(message);
                }
            }

            await Send(pushMessages);
        }
        public MessagingService()
        {
            _locationUsersRepository = new LocationUsersRepository();

            _pushNotificationTokensRepository = new PushNotificationTokensRepository();
        }