Ejemplo n.º 1
0
        private void ProcessInferenceForUser(IUser user, IDocumentStore store, IInferenceType inferenceType)
        {
            using (var session = store.OpenSession())
            {
                //check if this inference has already been made (e.g. last time the procesor ran)
                //if it has move on
                if (session.Query<Inference>()
                       .Any(inf => inf.InferenceTypeName == inferenceType.Name
                                     && inf.MadeAt >= inferenceType.CheckTime
                                     && inf.UserId == user.Id))
                    return;

                //check if this inference type has been triggered
                if (!inferenceType.HasTriggered(user, session)) return;
                //if it has create and store a new inference
                _log.Info(string.Format("Found an inference of type {0} for {1}",inferenceType.Name,user.Name));
                var newInference = new Inference
                {
                    Id = IlluminateDatabase.GenerateId<Inference>(),
                    InferenceTypeName = inferenceType.Name,
                    MadeAt = DateTime.Now,
                    UserId = user.Id
                };
                session.Store(newInference);
                session.SaveChanges();

                //now invoke each associated action for the new inference
                foreach (var action in inferenceType.Actions)
                {
                    _log.Info(string.Format("Invoking action {0} for {1} inference",action.GetType(),inferenceType.Name));
                    action.Invoke(user, inferenceType, session);
                }
            }
            
        }
        public void Invoke(IUser user,IInferenceType inferenceType,IDocumentSession session)
        {
            //create a new notification and save it
            var notification = new Notification
                                   {
                                       About = user.ToSimpleUser(),
                                       Id = IlluminateDatabase.GenerateId<Notification>(),
                                       SendDate = DateTime.Now,
                                       From = EmailRecipient.GetIlluminateRecipient(),
                                       Title = "Illuminate Inference",
                                       Body = inferenceType.GetDescription(user),
                                       NotificationRecipients = new NotificationRecipient[]
                                                                    {
                                                                        new NotificationRecipient
                                                                            {

                                                                                NotificationDeliveryTypes =
                                                                                    NotificationDeliveryTypes
                                                                                        .Toast |
                                                                                    NotificationDeliveryTypes
                                                                                        .Email,
                                                                                Users = user.Relationships
                                                                                            .Where(
                                                                                                r =>
                                                                                                r.RelationshipName ==
                                                                                                Role.BuiltInRole
                                                                                                    .LineManager
                                                                                                    .ToString())

                                                                            }
                                                                    }
                                   };

           session.Store(notification);
           session.SaveChanges();
            
        }
Ejemplo n.º 3
0
        public ScheduleRegistry()
        {
            XmlConfigurator.Configure(); //configure logging
            _logger = LogManager.GetLogger(typeof(ScheduleRegistry));


            var numSecondsBackoff = 3600;
                var numSecondsBackoffStr = ConfigurationManager.AppSettings["UNSENT_NOTIFICATION_BACKOFF_SECONDS"];
                if (!string.IsNullOrEmpty(numSecondsBackoffStr))
                    numSecondsBackoff = int.Parse(numSecondsBackoffStr);

            Initialise();

            //Run notification processor every 30 seconds
            var mailgunSender = new MailGunEmailSender();
            Schedule(() => new NotificationProcessor(
                               new EmailNotificationDispatcher(_logger, mailgunSender),
                               new ToastDispatcher(_database.MasterStore, _logger),
                               _database.GetAllOrgStores(),
                               new SmsDispatcher(_logger, new TxtLocalSmsSender()),
                               _logger,
                               numSecondsBackoff
                               )
                               .Process())
                .ToRunNow().AndEvery(30).Seconds();

            
            Schedule(() => new TrialProcessor(_database,_logger)
                               .Process())
                .ToRunNow().AndEvery(2).Minutes();

            //inference engine schedule
            var inferenceTypes= new IInferenceType[] {
                new PoorHigInferenceType(new InferenceTypeConfig{CheckForOtherInferencesPeriodDays = 10,NumberInPeriod = 3,PeriodDays = 10})
                                       {
                                           Actions = new IInferenceAction[]
                                                         {
                                                             new NotifyManagerAction()
                                                         }},

            new ManyConcernsInferenceType(new InferenceTypeConfig{CheckForOtherInferencesPeriodDays = 10,NumberInPeriod = 2,PeriodDays = 10})
                                       {
                                           Actions = new IInferenceAction[]
                                                         {
                                                             new NotifyManagerAction()
                                                         }},
             new PraiseInferenceType(new InferenceTypeConfig{CheckForOtherInferencesPeriodDays = 10,NumberInPeriod = 3,PeriodDays = 10})
                                       {
                                           Actions = new IInferenceAction[]
                                                         {
                                                             new NotifyManagerAction()
                                                         }},
            new NoPraiseInferenceType(new InferenceTypeConfig{CheckForOtherInferencesPeriodDays = 180,NumberInPeriod = 0,PeriodDays = 180})
                                       {
                                           Actions = new IInferenceAction[]
                                                         {
                                                             new NotifyManagerAction()
                                                         }},
            new RepeatedSicknessReasonInferenceType(new InferenceTypeConfig{CheckForOtherInferencesPeriodDays = 365,NumberInPeriod = 2,PeriodDays = 365})
                                       {
                                           Actions = new IInferenceAction[]
                                                         {
                                                             new NotifyManagerAction()
                                                         }},

            };
            Schedule(() => new InferenceProcessor(
                               _database.GetAllOrgStores(),
                               inferenceTypes,
                               _logger)
                               .Process())
                .ToRunNow().AndEvery(10).Minutes();

            //Run daily email task at 3am

            Schedule(() => new Tasks.EmailDailyTasks().DoWork(_database, mailgunSender)).ToRunEvery(1).Days().At(3, 0);


            //Run Open task updates at 6am?
            Schedule(() => new Tasks.ConsolidateEndDates().DoWork(_database)).ToRunEvery(1).Days().At(6, 0);

            //one off update of ALL tasks etc. 
            Schedule(() => new Tasks.ConsolidateEndDates(true).DoWork(_database)).ToRunNow();


            //Update Assignees occsionally. !. 
            Schedule(() => new Tasks.RefreshAssignees().DoWork(_database)).ToRunNow().AndEvery(1).Hours();

            //Update Users occsionally. !. 
            Schedule(() => new Tasks.RefreshUserState().DoWork(_database))
                .ToRunNow().AndEvery(4).Hours();
            
            Schedule(()=>new Tasks.UpdateGraphite().DoWork(_database))
                .ToRunNow().AndEvery(1).Minutes();

        }