/// <summary>
 /// Initializes a new instance of the RepoConstraintFactory class
 /// </summary>
 /// <param name="contextProvider">the contextprovider object that enables this Factory to access the db using EntityFramework</param>
 /// <param name="factory">the pluginFactory that will provide custom plugins that are required in order to execute some constraints</param>
 public RepoConstraintFactory(IContextBuffer contextProvider, PluginFactory factory) : base(factory)
 {
     this.contextProvider = contextProvider;
     RefreshConstraints();
     BackgroundRunner.AddPeriodicTask(RefreshConstraints, 60000);
 }
        /// <summary>
        /// Completes the satrtup and puts this proxy into an operational state
        /// </summary>
        private void StartupComplete()
        {
            client.SubscribeEvent(remoteObjectName, "PackageProcessed",
                                  new PackageFinishedEventHandler((s, e) =>
            {
                PackageSender ntask;

                lock (processingPackages)
                {
                    var retVal =
                        (from t in processingPackages where t.Package.Id == e.Package.Id select t)
                        .FirstOrDefault();
                    if (retVal != null)
                    {
                        processingPackages.Remove(retVal);
                    }

                    ntask = retVal;
                }

                PackageTrigger trigger;
                lock (unCommittedPackages)
                {
                    trigger = (from t in unCommittedPackages
                               where t.Args.Package.Id == e.Package.Id
                               select t).FirstOrDefault();
                }


                if (ntask != null || trigger != null)
                {
                    if ((e.Tasks.All(Success) && Success(e.Package)) || !e.Tasks.Any(RequireReboot))
                    {
                        bool reTriggered = trigger != null;
                        if (!reTriggered)
                        {
                            lock (unCommittedPackages)
                            {
                                if (unCommittedPackages.All(t => t.Args.Package.Id != e.Package.Id))
                                {
                                    unCommittedPackages.Add(new PackageTrigger
                                    {
                                        Args        = e,
                                        LastTrigger = DateTime.MinValue
                                    });
                                }
                            }
                        }

                        if (reTriggered)
                        {
                            LogEnvironment.LogDebugEvent(string.Format("The calling system did not commit the job {0} yet", e.Package.Id), LogSeverity.Warning);
                        }
                    }
                    else
                    {
                        lock (processingPackages)
                        {
                            processingPackages.Add(ntask);
                        }

                        RebootService();
                    }
                }
            }));
            void OpCallback(object o, EventArgs e)
            {
                if (client.Operational)
                {
                    lock (processingPackages)
                    {
                        processingPackages.ForEach(t => t.Sent = false);
                    }
                }
                else
                {
                    timeOfCommunicationLoss = DateTime.Now;
                }

                ((IBidirectionalClient)o).OperationalChanged -= OpCallback;
            };

            client.OperationalChanged += OpCallback;
            InitializeService();
            BackgroundRunner.AddPeriodicTask(ReTriggerPendingTasks, 20000);
        }
Exemplo n.º 3
0
 protected override void Ready()
 {
     BackgroundRunner.AddPeriodicTask(CheckSchedules, 500);
     LogEnvironment.LogDebugEvent("PeriodScheduler is now online", LogSeverity.Report);
     base.Ready();
 }
Exemplo n.º 4
0
 /// <summary>
 /// Starts this Scheduler
 /// </summary>
 protected override void Ready()
 {
     BackgroundRunner.AddPeriodicTask(CheckSchedules, 2000);
     base.Ready();
 }